[ 英语 | 印度尼西亚语 | 俄语 ]

生成清单

创建清单的脚本位于 inventory/dynamic_inventory.py,并安装到 ansible-runtime 虚拟环境中,名为 openstack-ansible-inventory

本节解释了 Ansible 如何运行清单,以及如何手动运行它以查看其行为。

手动执行 dynamic_inventory.py 脚本

当运行 Ansible 命令(例如 ansibleansible-playbookopenstack-ansible)时,Ansible 会自动执行 dynamic_inventory.py 脚本,并将其输出用作清单。

运行以下命令

# from the root folder of cloned OpenStack-Ansible repository
inventory/dynamic_inventory.py --config /etc/openstack_deploy/

动态清单脚本也安装在虚拟环境中作为脚本。因此,您还可以运行以下命令

source /opt/ansible-runtime/bin/activate
openstack-ansible-inventory --config /etc/openstack_deploy/

此调用在测试动态清单脚本的更改时很有用。

输入

openstack-ansible-inventory 接受 --config 参数,用于指定包含用于创建清单的配置的目录。如果未指定,则默认值为 /etc/openstack_deploy/

除了此参数之外,基本环境骨架还位于 OpenStack-Ansible 代码库的 inventory/env.d 目录中。

如果在 --config 指定的目录中找到 env.d 目录,则其内容将被添加到基本环境中,并在发生冲突时覆盖任何先前的内容。

配置目录中必须存在以下文件

  • openstack_user_config.yml

此外,配置或环境可以分布在另外两个子目录中

  • conf.d

  • env.d(用于环境自定义)

动态清单脚本执行以下操作

  • 生成运行服务的每个容器的名称

  • 创建容器和 IP 地址映射

  • 将容器分配给物理主机

例如,考虑以下摘录 openstack_user_config.yml

identity_hosts:
  infra01:
    ip: 10.0.0.10
  infra02:
    ip: 10.0.0.11
  infra03:
    ip: 10.0.0.12

identity_hosts 字典定义了一个名为 identity_hosts 的 Ansible 清单组,其中包含三个基础架构主机。配置文件 inventory/env.d/keystone.yml 定义了部署到三个名为 *infra* 的主机的容器的附加 Ansible 清单组。

请注意,标记为 is_metal: true 的任何服务都将在分配的物理主机上运行,而不是在容器中运行。有关 is_metal: true 用法的示例,请参阅 inventory/env.d/cinder.yml 中的 container_skel 部分。

有关更多详细信息,请参阅 配置清单

Outputs

执行后,脚本会将 openstack_inventory.json 文件输出到使用 --config 参数指定的目录中。这用作重复运行的事实依据。

警告

openstack_inventory.json 文件是环境的事实依据。在生产环境中删除此文件意味着容器名称的 UUID 部分将被重新生成,然后将创建新的容器。即使可以通过 SSH 访问,先前版本下生成的容器也将不再被 Ansible 识别。

相同的 JSON 结构会打印到 stdout,Ansible 会将其作为 playbook 的清单来使用。

检查清单配置是否存在错误

在运行 openstack-ansible-inventory 时使用 --check 标志将运行清单构建过程并查找已知错误,但不会将任何文件写入磁盘。

如果 openstack_user_config.ymlconf.d 文件中定义的任何组未在环境中找到,将引发警告。

此检查不会执行 YAML 语法验证,但如果存在无法解析的错误,则会失败。

写入调试日志

--debug/-d 参数允许写入详细的日志文件以调试清单脚本的行为。输出将写入当前工作目录中的 inventory.log

inventory.log 文件将被追加,而不是覆盖。

--check 一样,此标志在从 ansible 运行时不会被调用。

使用 tox 运行

在某些情况下,您可能希望在更改 openstack_user_config.yml 或 env.d/conf.d 文件后在操作员本地机器上生成清单。鉴于您已经在这样的机器上拥有 openstack_deploy 目录,您可以在该目录中创建 tox.ini 文件,内容如下

[tox]
envlist = generate_inventory

[testenv]
skip_install = true
usedevelop = true
allowlist_externals =
    bash

[testenv:generate_inventory]
basepython = python3
deps = -rhttps://opendev.org/openstack/openstack-ansible/raw/branch/master/requirements.txt
install_command =
    pip install -c https://releases.openstack.org/constraints/upper/master {packages} -e git+https://opendev.org/openstack/openstack-ansible@master\#egg=openstack-ansible
commands =
    openstack-ansible-inventory --config {toxinidir}/openstack_deploy

然后,您可以运行一个命令来使用 tox 生成清单

tox -e generate_inventory

结果,您的 openstack_user_config.json 将被更新。您也可以使用此方法来验证清单的有效性。