从 keystoneclient 迁移

当 keystoneauth 从 keystoneclient 中提取出来时,会话、适配器和身份验证插件的基本用法并没有故意改变。如果您以受支持的方式从 keystoneclient 使用它们,那么过渡应该相当简单。

身份验证插件

身份验证插件本身变化很小,但是插件的加载方式和一些支持类发生了变化。

插件加载

在 keystoneclient 中,身份验证插件的加载由类本身管理。这种方法在允许插件控制其加载方式方面很有用,但它将身份验证逻辑与配置和 CLI 加载联系起来。

在 keystoneauth 中,这已被分离,身份验证插件的处理与加载它的机制分开。

身份验证插件仍然实现基本的身份验证类 BaseAuthPlugin。为了使插件能够从 CLI 或 CONF 文件加载,您应该实现基本的 BaseLoader 类,该类在 –os-auth-type 使用时被加载。该类处理呈现的选项,然后为应用程序构建身份验证插件。

通常,返回的选项与 keystoneclient 中使用的选项相同,但是,在 keystoneclient 中,选项使用了 oslo_config.cfg.Opt 对象。由于试图保持最小的依赖关系,keystoneauth 没有直接依赖于 oslo.config,而是应该将选项指定为 Opt 对象。

为了确保插件之间的区分,插件注册的 setuptools 入口点已更新,以反映 keystoneauth1,现在应该是:keystoneauth1.plugin

AccessInfo 对象

AccessInfo 对象是存储在令牌中的信息的表示。在 keystoneclient 中,这些对象是令牌数据的字典,具有属性访问器。在 keystoneauth 中,字典接口已被删除,只有属性访问器可用。

创建函数也已更改。keystoneclient.access.AccessInfo.factory() 方法已被删除,并替换为 keystoneauth1.access.create()

逐步迁移示例

在 requirements.txt 中添加 keystoneauth1

在代码中进行以下更改

-from keystoneclient import auth
+from keystoneauth1 import plugin

因此

-auth.BaseAuthPlugin
+plugin.BaseAuthPlugin

要导入服务目录

-from keystoneclient import service_catalog
+from keystoneauth1.access import service_catalog

获取 URL 时,使用服务目录的 *endpoint_type* 参数已更改为 *interface*

-service_catalog.ServiceCatalogV2(sc).service_catalog.url_for(..., endpoint_type=interface)
+service_catalog.ServiceCatalogV2(sc).service_catalog.url_for(..., interface=interface)

获取会话

-from keystoneclient import session
+from keystoneauth1 import loading as ks_loading

-_SESSION = session.Session.load_from_conf_options(
-auth_plugin = auth.load_from_conf_options(conf, NEUTRON_GROUP)
+_SESSION = ks_loading.load_session_from_conf_options(
+auth_plugin = ks_loading.load_auth_from_conf_options(conf, NEUTRON_GROUP)

为了测试目的而模拟会话

-@mock.patch('keystoneclient.session.Session')
+@mock.patch('keystoneauth1.session.Session')

令牌 fixture 导入没有太大变化

-from keystoneclient.fixture import V2Token
+from keystoneauth1.fixture import V2Token