从 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