将 Trove 客体代理移动到其自身模块

https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent

目前客体代理代码是 trove 包的一部分。此蓝图的目标是重构客体代理和通用函数到新的顶级包中,以便客体代理可以独立部署到实例上。

注意:将客体代理拆分为其自身仓库是原始规范中的一个要求。然而,在 Kilo 中期周期中确定这样做会在 trove 组件之间引入难以维护的依赖关系。

例如,trove 核心和客体代理之间的 AMQP / API 消息更改的提交需要手动协调,如果 trove 和客体代理位于不同的仓库中。

由于这种协调的开销超过了将客体代理拆分为其自身仓库的好处,我们将继续在目录级别进行拆分,但将仓库拆分推迟到进一步讨论为止。

问题描述

此蓝图将带来以下改进

  • 简化在实例上安装客体代理。

  • 减少部署到实例上的代码量。

  • 通过不导入 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 代码树部署到客体实例上。

备选方案

实现

负责人

主要负责人

  • Robert Myers (robertmyers)

  • Simon Chang (schang)

里程碑

完成目标里程碑

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 和通用模块路径的文档或配置文件内容都需要更新。例如

参考资料

Kilo 中期周期讨论记录:https://etherpad.openstack.org/p/trove-kilo-sprint-blueprints-bugs