从 Cinder 中提取 Brick 库¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/cinder/+spec/extract-brick
本规范讨论了两个要点。首先是将 brick/cinder 目录提取成一个独立的库。其次,修改 Cinder 以使用外部库。
问题描述¶
‘brick’ 的概念是在 Havana 时间框架内创建的。 一直以来,它的设计目标都是一个独立的库,Cinder、Nova 和 OpenStack 中的任何其他项目都可以使用。 目前 brick 位于 Cinder 内部的一个目录中,这意味着只有 Cinder 可以使用它。
用例¶
在 Nova 和 Cinder 中使用相同的库代码。
提议的变更¶
我们希望提取 brick 目录并将其封装成一个 pypi 库,任何 python 项目都可以使用。
因此我们需要做的是
首先创建一个单独的 python 项目并将其发布到 pypi
将 brick 添加到 cinder 的 requirements.txt
删除现有的 cinder/brick 目录
Cinder 中所有使用 cinder/brick 的地方都需要修改为使用新的 pypi 库。
备选方案¶
我们可以简单地将 brick 保留在 Cinder 内部,而不共享它的代码。 这个问题是,对 brick 的任何更改/修复都需要回移植到 Nova 中的相同代码中。 这就是现有的问题。
数据模型影响¶
这不会改变 Cinder 的数据模型。
REST API 影响¶
无
安全影响¶
任何影响 brick 的安全问题都可能影响使用新库的 Cinder 中的任何内容。 Brick 将被放置在 stackforge 中进行代码审查,以便任何人都可以贡献修复。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
不应有性能影响,因为与今天在 Cinder 中存在的一样,相同的代码将存在于 pypi brick 库中。 导入将从系统安装位置而不是 cinder 代码库中提取库。
其他部署者影响¶
Brick 将是 Cinder 的一个依赖项。 因此,为 cinder 构建分发包的任何人也需要确保 brick 被安装。
开发人员影响¶
目前,任何 Cinder 开发者都可以将新功能添加到 brick 并修复 brick 作为 Cinder 项目的一部分中的错误。 今后,开发者需要从 stackforge 克隆 brick 的源代码并在那里进行更改。
缺点是,如果 brick 库中有新的功能、API 或接口更改,则必须发布一个版本才能使 Cinder 获得这些更改。
实现¶
负责人¶
- 主要负责人
Walter A. Boring IV - walter-boring
- 其他贡献者
e0ne
工作项¶
我已经开始创建独立的 brick 库的工作了,这里是: https://github.com/hemna/cinder-brick
这个仓库需要注册到 stackforge,以便 brick 可以受益于社区流程和 gerrit。
一旦进入 stackforge,就需要发布一个官方版本,以便该包存在于 pypi 中。
然后可以对 Cinder 进行补丁,将其添加到 requirements.txt
接下来是另一个补丁,删除 brick/cinder 并调整 Cinder 的所有内容以使用新的库。
依赖项¶
无
测试¶
Cinder 中所有现有的 brick 单元测试可以保留,以确保其按广告宣传的那样工作。 现有的 Cinder brick 单元测试也将迁移到新项目并在那里运行。
文档影响¶
无。
参考资料¶
原始 Cinder brick 提案 https://wiki.openstack.org/wiki/CinderBrick