使用 Devstack 进行开发

现在你已经成功启动并运行了你的 DevStack,你能用它做什么?

检查服务

默认情况下,DevStack 中的大多数服务都作为 systemd 单位运行,命名为 devstack@$servicename.service。你可以使用以下命令查看正在运行的服务。

sudo systemctl status "devstack@*"

要了解 systemd 的基本知识,请参阅 DevStack 中使用 Systemd

修补服务

如果你想对正在运行的服务进行快速更改,最简单的方法是直接在 /opt/stack/$service 中更改代码,然后重新启动受影响的守护进程。

sudo systemctl restart devstack@n-cpu.service

如果你的更改影响多个守护进程,你也可以使用通配符进行重新启动。

sudo systemctl restart "devstack@n-*"

警告

你所做的所有更改都在 DevStack 认为它拥有完全控制权的已签出的 git 树中。未提交的工作,或提交到 master 分支的工作,可能会在后续的 DevStack 运行过程中被覆盖。

测试补丁系列

当测试更大的补丁集,或将影响项目内多个服务的补丁时,使用自定义 git 位置,并在专用的 git 树中进行所有更改,通常会更清晰。

在你的 local.conf 中,你可以添加 **_REPO**_BRANCH 用于大多数项目,以使用自定义 git 树而不是默认的上游树。

例如

[[local|localrc]]
NOVA_REPO=/home/sdague/nova
NOVA_BRANCH=fold_disk_config

将在执行任何 devstack 操作(例如 stack.sh)时使用自定义 git 树和分支。

当测试复杂的更改时,提交到这些树,然后执行 ./unstack.sh && ./stack.sh 是一种有价值的迭代方式。这比直接修补需要更长的时间,因为整个 devstack 需要重建。

你可以使用相同的方法来测试 gerrit 中待审核的补丁,方法是使用 gerrit 为每个更改分配的 ref 名称。

[[local|localrc]]
NOVA_BRANCH=refs/changes/10/353710/1

测试库的更改

当测试 OpenStack 服务使用的库的更改(例如 oslo 或任何 python-fooclient 库)时,事情会变得更复杂。默认情况下,我们只测试这些库的已发布版本,这些版本在 pypi 上可用。

你必须首先使用设置 LIBS_FROM_GIT 来覆盖这一点。这将启用你的 DevStack 使用该库的 git 版本,而不是已发布版本。

之后,你还可以指定 **_REPO**_BRANCH 以使用你的更改,而不是仅仅使用上游 master。

[[local|localrc]]
LIBS_FROM_GIT=oslo.policy
OSLOPOLICY_REPO=/home/sdague/oslo.policy
OSLOPOLICY_BRANCH=better_exception

由于库不是通过 pip 以 editable 方式安装的,所以在进行任何本地更改后,你需要

  • cd 到库路径的顶部

  • sudo pip install -U .

  • 重新启动你想要使用新库的所有服务

你可以使用通配符来执行此操作,例如

sudo systemctl restart "devstack@n-*"

这将重新启动所有 nova 服务。