将 Identity 中间件拆分为一个独立的包¶
Keystone 拥有足够数量的中间件,可以证明需要一个单独的仓库。这些中间件将来自多个项目,包括 Keystone 服务器和 python-keystoneclient 仓库。 拆分主要是为了解决一些主要请求
限制 python-keystoneclient 的依赖项。 一些中间件依赖项对于 CLI 工具或 API 库来说没有必要(例如,memcache)。
允许服务器需求(例如中间件)和 CLI/客户端库之间进行单独的发布计划(以及更改隔离)。 分开的打包和发布计划允许在更新中间件时具有更窄的关注范围(不会意外影响客户端库/CLI 的公共接口)。
将所有 OpenStack Identity 特定的中间件整合到一个仓库中。
问题描述¶
目前大部分中间件位于 python-keystoneclient 中。 但是,中间件代码会引入服务器特定的依赖项,这些依赖项不适用于命令行客户端和其他集成脚本。 它们有足够不同的用例,应该有自己的仓库和 python 包。
提议的变更¶
创建一个名为 keystonemiddleware 的新仓库,并使用 oslo-incubator 毕业工具将数据从 python-keystoneclient/middleware 和 keystone/middleware 复制过来,同时保留提交历史记录。 中间件代码的测试也将迁移(尽可能保留历史记录)。 只有 Keystone 中被外部服务使用的中间件将被迁移(例如 ec2token)。
一旦 keystonemiddleware 包发布,python-keystoneclient 中的中间件将被冻结(仅安全修复,没有新功能),并且所有新的开发都将针对新中间件包中的代码进行。 最初来自 Keystone 的中间件将通过导入在旧位置提供,并附带弃用消息,而不是冻结。
旧的中间件代码将在至少两个完整的 OpenStack 发布周期内保持弃用状态并可用。 在 L 及以后的开发周期中将考虑删除选项。
新的中间件包将独立于 OpenStack 命名的发布版本发布(类似于 python-keystoneclient 库)。
中间件包的初始版本将是版本 1.0.0(使用语义化版本控制方案)。
备选方案¶
将 Keystoneclient 分割成多个库
通用代码(例如会话、cms),这可能是一个 oslo-lib
中间件 (auth_token, ec2, s3)
客户端代码(保留在 keystonclient 包中)
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
需要接收安全修复的中间件版本有两个,直到弃用的中间件被删除。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
部署者需要更新 paste-ini 配置文件,以引用中间件的新位置。 旧的中间件将在 python-keystoneclient 包中至少两个完整的 OpenStack 发布周期内可用。 在 python-keystoneclient 包中,旧的中间件将仅接收安全修复。
开发人员影响¶
开发人员需要了解提交代码更改的仓库。
实现¶
负责人¶
morganfainberg
ayoung
工作项¶
创建新仓库。
使用 oslo-incubator 毕业工具将中间件代码和测试从 python-keystoneclient 复制到新仓库,以保留更改历史记录。
使用 oslo-incubator 毕业工具将中间件(被外部服务使用(例如 ec2token))代码和测试从 keystone 复制到新仓库,以保留更改历史记录。
更改 keystoneclient 和 Keystone 中间件,以便在使用时打印弃用消息。 这包括更新所有弃用消息,以指向新的包。
发布 keystonemiddleware 包的初始版本(在弃用更新之前执行)。
更新全局需求以添加新的 keystonemiddleware 包。
更新服务和 paste-ini 示例文件以使用新的 keystonemiddleware 包。
依赖项¶
无
测试¶
中间件特定的单元测试将被移动到新仓库。
门控配置将确保对新仓库的更改进行完整的集成测试运行。
文档影响¶
文档需要更新,说明在哪里查找 keystone 中间件
参考资料¶
无