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

扩展 OpenStack-Ansible,添加额外的 Ansible 内容

将 OpenStack-Ansible 包含在您的项目中

将 OpenStack-Ansible 仓库包含在另一个项目中,可以通过几种方式实现

  • 指向已发布标签的 git 子模块。

  • 一个脚本,用于自动执行 OpenStack-Ansible 的 git checkout 操作。

在将 OpenStack-Ansible 包含在项目中时,请考虑使用与 ansible.cfg 文件部分中所示的并行目录结构。

另外请注意,将文件复制到诸如 env.dconf.d 之类的目录,应通过扩展项目中的某种脚本来处理。

将 OpenStack-Ansible 与您的 Ansible 结构集成

您可以通过设置环境变量或调整 /usr/local/bin/openstack-ansible.rc,同时包含 OpenStack-Ansible 角色和库,来创建您自己的 playbook、变量和角色结构。

OpenStack-Ansible 的相关环境变量如下

ANSIBLE_LIBRARY

此变量应指向 /etc/ansible/plugins/library。 这样做允许角色和 playbook 访问 OpenStack-Ansible 包含的 Ansible 模块。

ANSIBLE_ROLES_PATH

默认情况下,此变量应指向 /etc/ansible/roles。 这允许 Ansible 正确查找扩展角色可能引用的任何 OpenStack-Ansible 角色。

ANSIBLE_INVENTORY

此变量应指向 openstack-ansible/inventory/dynamic_inventory.py。 使用此设置,扩展可以访问 OpenStack-Ansible 使用的相同的动态库存。

在此文件中,openstack-ansible 顶级目录的路径可以是相对路径。

考虑以下目录结构

my_project
|
|- custom_stuff
|  |
|  |- playbooks
|- openstack-ansible
|  |
|  |- playbooks

设置的环境变量将使用 ../openstack-ansible/playbooks/<directory>

在您的 OpenStack-Ansible 安装中添加或覆盖角色

默认情况下,OpenStack-Ansible 使用其 ansible-role-requirements 文件来获取安装过程所需的角色。

这些角色将被提取到标准的 ANSIBLE_ROLES_PATH,默认情况下为 /etc/ansible/roles

ANSIBLE_ROLE_FILE 是一个环境变量,指向 ansible-galaxy 可以使用的 YAML 文件位置,用于指定要下载和安装的角色。 默认值为 ansible-role-requirements.yml

要完全覆盖 ansible-role-requirement.yml 文件,您可以在运行 bootstrap-ansible.sh 脚本之前定义环境变量 ANSIBLE_ROLE_FILE。 使用这种方法,部署者有责任维护所需 Ansible 角色的适当版本固定,如果需要升级。

如果您想扩展或仅部分覆盖 ansible-role-requirements.yml 文件的内容,您可以创建一个新配置文件,其路径默认为 /etc/openstack_deploy/user-role-requirements.yml。 也可以通过另一个环境变量 USER_ROLE_FILE 覆盖此路径,该路径预计相对于 OSA_CONFIG_DIR (/etc/openstack_deploy) 文件夹。

此文件的格式与 ansible-role-requirements.yml 相同,可用于添加新角色或选择性覆盖现有角色。 列在 user-role-requirements.yml 中的新角色将与 ansible-role-requirements.yml 中的角色合并,并且具有匹配 name 键的角色将覆盖 ansible-role-requirements.yml 中的角色。 如果未定义 src 键,引导脚本将跳过克隆这些角色。

部署者很容易将此文件置于自己的版本控制之下,并将其从 OpenStack-Ansible 树中移除。

在您的 OpenStack-Ansible 安装中添加或覆盖集合

与角色类似,用于安装的集合存储在 ansible-collection-requirements 文件中。 可以通过 ANSIBLE_COLLECTION_FILE 环境变量覆盖对此文件的路径。

OpenStack-Ansible 的 Victoria 版本添加了一个可选的新配置文件,其默认值为 /etc/openstack_deploy/user-collection-requirements.yml

它应采用 ansible-galaxy 需求文件的本机格式,可用于将新集合添加到部署主机或覆盖 ansible-collection-requirements 中定义的集合的版本或源。

user-collection-requirements 将使用集合 name 作为键与 ansible-collection-requirements 合并。 如果在 user-collection-requirements 中未定义 source,则将跳过集合安装。 这样可以跳过安装不需要的集合。

您可以通过在运行 bootstrap-ansible.sh 脚本之前设置 USER_COLLECTION_FILE 环境变量来覆盖 user-collection-requirements.yml 的位置。 尽管预计它相对于 OSA_CONFIG_DIR (/etc/openstack_deploy) 文件夹。

在部署期间调用额外的 playbook

如果您将一些额外的部署功能作为集合或 git 仓库安装在部署主机上,则可以在部署的某些点自动包含额外的 playbook。

存在调用外部 playbook 的挂钩点如下

  • pre_setup_hosts_hook

  • post_setup_hosts_hook

  • pre_setup_infrastructure_hook

  • post_setup_infrastructure_hook

  • pre_setup_openstack_hook

  • post_setup_openstack_hook

挂钩变量应在合适的 user_variables.yml 文件中配置。 一个示例调用来自集合(使用 user-collection-requirements.yml 安装)的 playbook

pre_setup_hosts_hook: custom.collection.playbook

使用集合安装额外的 playbook,并使用其 FQCN 引用 playbook 是包含其他用户定义 playbook 的最可靠方法。

在 Ansible 虚拟环境中安装额外的 Python 包

某些 Ansible 集合可能需要在执行环境中存在特定的 Python 库。 为了实现这一点,部署者可以在 /etc/openstack_deploy/user-ansible-venv-requirements.txt 文件中创建一个 Python 库列表,这些库应在 bootstrap-ansible.sh 执行期间与 Ansible 一起安装在虚拟环境中。

您可以通过在运行 bootstrap-ansible.sh 脚本之前使用 USER_ANSIBLE_REQUIREMENTS_FILE 环境变量覆盖 user-ansible-venv-requirements.txt 文件的默认路径。

为部署定义环境变量

在整个文档中,我们经常谈论控制 OpenStack-Ansible 和 Ansible 本身行为的各种环境变量。

从 Zed 版本开始,可以将 user.rc 文件放置在 OSA_CONFIG_DIR (/etc/openstack_deploy) 文件夹中,并包含任何可能需要更改默认行为或任何任意 ansible-configuration 参数的环境变量定义。 这些环境变量是通用的,不限于 Ansible 理解的变量。

可以通过设置 OSA_USER_RC 变量来更改此文件的路径,但 OSA_CONFIG_DIROSA_USER_RC 变量不能通过 user.rc 文件重新定义或控制。