[ English | Indonesia | 한국어 (대한민국) | español (México) | English (United Kingdom) | Deutsch | 中文 (简体, 中国) ]

使用DevStack测试更改

显而易见,开发过程中很重要的一部分是能够测试您开发的更改并确保它们正常运行。 在像OpenStack这样的复杂生态系统中,还需要能够验证代码的互操作性。 像是您可能对Cinder进行了更改,但是这个更改可能也会影响Nova与Cinder API交互的方式。

开发人员需要一种简单的方法来部署OpenStack云以便对更改进行功能性和互操作性测试。 这就是DevStack的目的。

什么是DevStack

DevStack是一组模块化脚本,通过运行这些脚本来部署基本的OpenStack云,以便用作演示或测试环境。 这些脚本可以在裸机或虚拟机的单个节点上运行。 也可以将其配置用于部署到多个节点。 DevStack部署能够处理繁琐的任务,例如配置数据库和消息排队系统,使开发人员可以快速轻松地部署OpenStack云。

默认情况下,OpenStack的核心服务会被安装,但用户也可以配置需要部署的其他服务。 所有服务均从源安装。 除非脚本被配置为从稳定分支(stable branch)(比如 stable/pike)克隆,否则DevStack将从git master中拉取核心服务。

备注

DevStack的完整文档可以在 here 找到.

获取和配置DevStack

To get DevStack you will need to clone it from the devstack repository under openstack.

git clone https://opendev.org/openstack/devstack

建议在进一步设置运行DevStack的环境的密码和IP地址之前完成克隆。 设置是通过在DevStack中配置 local.conf 文件来完成的。

cd ./devstack
cp ./samples/local.conf local.conf
vi ./local.conf

为了简化将来与部署的交互,您将需要设置以下变量:

  • ADMIN_PASSWORD

  • DATABASE_PASSWORD

  • RABBIT_PASSWORD

在某些发行版中,您可能还需要设置 HOST_IP 。 是否需要这样做将取决于操作系统中网络接口使用的命名约定。

在文件的最下方是 Using milestone-proposed branches 部分。 如果您希望为一个或多个项目克隆主分支以外的分支,则可以更改这部分变量。

一旦将更改保存到 local.conf 后,就可以使用DevStack部署OpenStack云了。

部署DevStack

一旦配置了 local.conf 文件,执行DevStack是非常容易的。

备注

以下命令需要以具有sudo访问权限和NOPASSWD配置的用户身份运行。

./stack.sh

备注

以上命令和后续命令示例假定您仍位于DevStack克隆的根目录下。

此时,DevStack接管了准备将节点用作OpenStack云的任务。 以下操作会被执行完成:

  • 安装必需的软件包(例如mysql和rabbitmq)

  • 配置mysql和rabbitmq

  • 克隆OpenStack项目到/opt/stack/

  • 在/opt/stack/data中创建模拟系统所需的临时后备文件

  • 创建并填充每个项目的数据库

  • 注册并启动OpenStack服务

stack.sh运行的日志会保存在/opt/stack/logs/stack.sh.log中。

验证您的DevStack部署

如果OpenStack已由DevStack成功部署,则您应该能够用网络浏览器登录 local.confHOST_IP 所指定的IP并访问Horizon。

../_images/horizon-login.png

备注

The admin password will be set to the value you put in your local.conf file for ADMIN_PASSWORD

项目服务都已在systemd中注册。 每个服务都以 devstack @ 为前缀。 因此,您可以通过systemd使用以下命令验证Cinder Volume进程是否正在运行:

systemctl status devstack@c-vol.service

由于systemd接受通配符,因此与DevStack关联的所有服务的状态都可以显示为:

systemctl status devstack@*

也可以通过systemd查看正在运行的服务的日志。 要显示Cinder Volume服务的日志,可以使用以下命令:

journalctl -u devstack@c-vol.service

可以在 Using Systemd in DevStack 页面上找到有关使用systemd与DevStack进行交互的更完整参考。

使用DevStack测试更改

使用DevStack开发和测试更改很容易。 可以在项目克隆中的 /opt/stack/<project name> 下进行开发。 考虑到项目是项目git仓库的克隆,因此可以创建分支并进行开发。

DevStack使用这些目录中的代码来运行OpenStack服务,因此可以通过更改项目目录中的代码,然后通过systemd重新启动项目服务来测试任何更改。

这是上面流程的一个示例。 在示例中,对Cinder的LVM驱动程序进行了更改:

cd /opt/stack/cinder/cinder/volume/drivers
vi lvm.py
*Brilliant Code Improvement Implemented*
sudo systemctl restart devstack@c-vol.service

一旦完成代码更改的测试和开发,您将需要将代码更改推送给Gerrit进行审查。 考虑到 /opt/stack 中的项目已经同步到其各自的git仓库中,因此您可以配置 git review , 提交您的更改并将更改上传到Gerrit。

停止DevStack

要关闭在节点上运行的DevStack实例,应使用以下命令:

./unstack.sh

此命令清除在节点上执行的OpenStack安装。 这包括:

  • 停止项目服务,mysql和rabbitmq

  • 清理iSCSI卷

  • 清除临时LVM挂载

在DevStack运行失败的情况下,首先要尝试运行 unstack.sh 。 如果后续运行失败,则可以使用以下命令更彻底地删除DevStack组件:

./clean.sh

clean.sh 运行执行 unstack.sh 的步骤以及其他清理工作:

  • 从/etc删除项目的配置文件

  • 删除日志文件

  • 清理Hypervisor

  • 删除.pyc文件

  • 清理数据库

  • 等等