附加组件

keystoneauth 插件的可扩展性被有意设计为允许各种不同的身份验证机制,这些机制不必驻留在上游软件包中。然而,上游支持一些涉及额外依赖项的插件,而 keystoneauth 包不能直接依赖这些依赖项。

为了解决这个问题,我们利用 setuptools extras 依赖项 来实现额外的插件。要使用像 kerberos 插件这样具有额外依赖项的插件,您必须安装这些额外的依赖项,例如

pip install keystoneauth1[kerberos]

按照惯例(不是要求),额外的插件在 keystoneauth1.extras 模块中有一个与依赖项同名的模块。例如:

from keystoneauth1.extras import kerberos

keystoneauth 没有专门检查是否安装了访问模块的正确依赖项。如果未找到所需的依赖项,您应该会看到标准的 python ImportError。

示例

所有附加插件都遵循以下模式

  1. 导入插件模块

  2. 实例化插件

  3. 调用插件的 get_token 方法,并传递一个 session 对象来获取 token

Kerberos

使用 Kerberos 获取域范围的 token

from keystoneauth1.extras import kerberos
from keystoneauth1 import session

plugin = kerberos.Kerberos('http://example.com:5000/v3')
sess = session.Session(plugin)
token = plugin.get_token(sess)

获取未范围的联合 token

from keystoneauth1.extras import kerberos
from keystoneauth1 import session

plugin = kerberos.MappedKerberos(
    auth_url='http://example.com:5000/v3', protocol='example_protocol',
    identity_provider='example_identity_provider')

sess = session.Session()
token = plugin.get_token(sess)

获取项目范围的联合 token

from keystoneauth1.extras import kerberos
from keystoneauth1 import session

plugin = kerberos.MappedKerberos(
    auth_url='http://example.com:5000/v3', protocol='example_protocol',
    identity_provider='example_identity_provider',
    project_id='example_project_id')

sess = session.Session()
token = plugin.get_token(sess)
project_id = plugin.get_project_id(sess)