将 Trove 客体代理移动到其自身模块¶
https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent
目前客体代理代码是 trove 包的一部分。此蓝图的目标是重构客体代理和通用函数到新的顶级包中,以便客体代理可以独立部署到实例上。
注意:将客体代理拆分为其自身仓库是原始规范中的一个要求。然而,在 Kilo 中期周期中确定这样做会在 trove 组件之间引入难以维护的依赖关系。
例如,trove 核心和客体代理之间的 AMQP / API 消息更改的提交需要手动协调,如果 trove 和客体代理位于不同的仓库中。
由于这种协调的开销超过了将客体代理拆分为其自身仓库的好处,我们将继续在目录级别进行拆分,但将仓库拆分推迟到进一步讨论为止。
提议的变更¶
配置¶
将添加一个新的顶级 oslo.cfg 用于 troveguest。(这应该只是 trove.common.cfg 中值的一个小子集)
trove.common.cfg 中专门用于客体的那些值将被移除。
有可能需要添加一些配置值。
数据库¶
无
公共 API¶
无
内部 API¶
无
Guest Agent¶
1) 客体代理代码将被移动到现有 trove 仓库中的一个顶级模块,名为 ‘troveguest’。
2) 导入语句将从 ‘trove.guestagent’ 更改为 ‘troveguest’
3) 通用函数的导入将被更新。有关详细信息,请参阅下面的“通用代码”部分。
4) 当前将代码 rsync 到开发实例的代码将被更改为仅包含 ‘troveguest’ 和通用函数模块。(有可能使用另一种交付方法,但是应该在它自己的蓝图中完成)
通用代码¶
客体代理当前在 trove.common (/opt/stack/trove/trove/common) 和 trove.openstack.common (/opt/stack/trove/trove/openstack/common) 中使用大量的通用代码。
“trove.common” 模块下的代码将被移动到 “common” 模块
/opt/stack/trove/trove/common -> /opt/stack/trove/common
所有导入语句将从 ‘trove.common’ 更改为 ‘common’
“trove.openstack.common” 模块下的代码将被移动到 “common.openstack” 模块
/opt/stack/trove/trove/openstack/common -> /opt/stack/trove/common/openstack
所有导入语句将从 ‘trove.openstack.common’ 更改为 ‘common.openstack’
将通用模块从 trove 中分离出来,允许客体代理和通用模块独立部署到实例上。我们不再需要仅因为客体代理需要使用一些通用函数而将整个 trove 代码树部署到客体实例上。
备选方案¶
无
实现¶
里程碑¶
- 完成目标里程碑
Kilo
工作项¶
阶段 1¶
https://review.openstack.org/#/c/119425/
在 setup.cfg 的 [files] 部分添加一个新的包
[files]
packages =
trove
troveguest
将 trove/guestagent 模块上移一级,并将其命名为 “troveguest”。所有 “trove.guestagent” 的引用都将被更改为 “troveguest”。
新的模块布局如下所示
trove/
...
doc/
etc/
tools/
trove/
troveguest/ < --- new module
setup.py
setup.cfg
...
阶段 2¶
将 “trove.common” 模块上移一级到 “common”,并将 “trove.openstack.common” 移动到 “common.openstack”。有关详细信息,请参阅“通用代码”部分。重命名导入。
新的模块布局如下所示
trove/
...
common/ < --- moved from /opt/stack/trove/trove/common
common/openstack < --- /opt/stack/trove/trove/openstack/common
doc/
etc/
tools/
trove/
troveguest/
setup.py
setup.cfg
...
依赖项¶
无
测试¶
客体代理测试需要从 trove.tests 模块中分离出来,然后我们需要确保测试被正确发现。
可能修改 tox.ini
[testenv:cover]
basepython = python2.7
commands =
{envpython} run_tests.py --group=does_not_exist
coverage erase
python setup.py testr --coverage
coverage run -a run_tests.py
coverage run -a troveguest/run_tests.py
coverage html
coverage report
文档影响¶
任何引用旧的 trove.guestagent 和通用模块路径的文档或配置文件内容都需要更新。例如
此 wiki 的 trove-guestagent 部分:https://wiki.openstack.org/wiki/Trove
此示例配置文件:<trove_dir>/etc/trove/trove-guestagent.conf.sample
参考资料¶
Kilo 中期周期讨论记录:https://etherpad.openstack.org/p/trove-kilo-sprint-blueprints-bugs