介绍 AWX 和 Ansible Tower 集合
Ansible 内容集合是一种分发内容(包括模块)的新方式,用于 Ansible。
AWX 和 Ansible Tower 集合允许 Ansible Playbook 与 AWX 和 Ansible Tower 交互。与通过基于 Web 的 UI 或 API 与 AWX 或 Red Hat Ansible Tower 交互类似,AWX 集合提供的模块是创建、更新或删除对象以及执行运行作业、配置 Ansible Tower 等任务的另一种方式。本文将讨论有关此集合的新更新,以及一个示例 Playbook 以及如何成功运行它的详细信息。
AWX 集合 awx.awx 是在 Ansible Galaxy 上提供的上游社区发行版。下游支持的 Ansible 集合 ansible.tower 在 Ansible Tower 3.7 发布的同时在 Automation Hub 上提供。
此集合取代了以前直接托管和维护在 Ansible 仓库 中的 Ansible Tower Web 模块。这些模块最初是在 2019 年 10 月 添加到 AWX 源代码 中的,当时集合工作开始;Ansible Core 中的 tower_*
模块 很快就被标记为正式迁移。
AWX 集合的改进
Ansible Core 提供的模块和 AWX 集合的初始版本依赖于 tower-cli 项目提供的库。由于 tower-cli 已弃用,目前正在努力删除该依赖项。这导致了 AWX 集合的重大更新。
在删除 tower-cli 的过程中,我们尝试使模块与其在 Ansible Core 中发布的相应版本向后兼容。这样,如果您已经利用了 Ansible Core 中的 tower_*
模块,则切换到 AWX 集合时所需的工作量应该非常少。有关更多信息,请参阅下面的 弃用更新 部分。
此外,我们标准化了模块的操作逻辑,从而使集合模块更加统一。以前,每个模块都是单独编写的(有时由不同的作者编写)。这导致各个模块的行为存在细微差异。AWX 集合中分发的模块遵循标准模式,即使由不同的作者编写,也能提供一致性。
将集合同步到 Red Hat Ansible Tower 版本还可以使模块的参数与 Web UI 和 API 中提供的选项保持同步。作为最近更改的一部分,我们添加了一些新的 工具,并更新了许多模块,现在包含了自模块最初发布以来已添加到 Ansible Tower 的功能的参数。
该集合现在还提供了对幂等性和检查模式的更好支持。在使用检查模式的早期版本中,旧模块只会确保它们可以连接到 Ansible Tower 服务器,但不会指示它们是否真的会对 Ansible Tower 对象进行更改。AWX 集合模块现在将更准确地指示它们是否会通过检查模式更改 Tower 对象。
使用 AWX 集合
开始使用 AWX 集合非常容易;您只需从 Ansible Galaxy 安装集合即可与 Ansible Tower 交互。可以使用以下命令完成此操作
ansible-galaxy collection install awx.awx
安装集合后,我们可以开始编写 Playbook 来管理您的 Ansible Tower 实例。
注意:为了与您的 Red Hat Ansible Tower 环境通信,您需要运行一个实例,并具有专用的 Ansible Tower 主机地址。
设置身份验证
为了与 Red Hat Ansible Tower 交互,我们需要做的第一件事是提供身份验证。这可以通过多种方式完成,所有这些方式都与旧版本的模块向后兼容。以下身份验证选项可用
- 将连接信息指定为模块参数
- 使用连接信息提供环境变量
- 引用包含连接信息的旧 tower_cli.cfg 文件
下面是一个 tower_cli.cfg 文件的示例
host: [$HOST_ADDRESS]
verify_ssl: False
tower_username: [$TOWER_USERNAME]
tower_password: [$TOWER_PASSWORD]
oauth_token: [$OAUTH_TOKEN] (if using oauth instead of a password)
创建 Playbook
安装 AWX 集合并确定身份验证方法后,我们可以开始 编写 Playbook 来与 Ansible Tower 交互。为了激活集合,在 Playbook 的 Play 级别需要以下代码片段
即使您在仍然附带 tower_*
模块的 Ansible 版本上运行,这也会导致 Ansible 加载来自 AWXCollection 的模块,而不是 Ansible Core 中发布的版本。Playbook 的其余部分将与不使用集合的 Playbook 完全相同。
在下面的示例 Playbook 中,身份验证信息未在任务中指定,而是将从环境变量或 tower_cli.cfg
文件中加载
---
- name: Playbook for Using a Variety of Tower Modules
hosts: localhost
gather_facts: false
collections:
- awx.awx
tasks:
- name: Create a new organization
tower_organization:
name: "New Org"
description: "test org"
state: present
- name: Create an Inventory
tower_inventory:
name: "New Inventory"
description: "test inv"
organization: "New Org"
state: present
- name: Create a Host
tower_host:
name: "New Host"
inventory: "New Inventory"
state: present
variables:
foo: bar
- name: Create a Project
tower_project:
name: "New Project"
organization: "New Org"
scm_type: git
scm_url: https://github.com/ansible/test-playbooks.git
- name: Create a Team
tower_team:
name: "Test Team"
description: "test team"
organization: "New Org"
state: present
validate_certs: false
- name: Create a Job Template
tower_job_template:
name: "Job Template to Launch"
project: "New Project"
inventory: "New Inventory"
playbook: debug.yml
ask_extra_vars: yes
- name: Launch the Job Template (w/ extra_vars)!
tower_job_launch:
job_template: "Job Template to Launch"
extra_vars:
var1: My First Variable
var2: My Second Variable
var3: My Third Variable
注意:指示 Ansible 使用集合中的模块的另一种方法是使用集合命名空间完全限定模块的名称,如下例所示
- name: Launch the Job Template (w/ extra_vars)
awx.awx.tower_job_launch:
job_template: "Job Template to Launch"
extra_vars:
var1: My First Variable
var2: My Second Variable
var3: My Third Variable
执行 Playbook
假设以上 Playbook 作为名为 configure_tower.yml 的文件保存在您的当前目录中,以下命令将运行此 Playbook
$ ansible-playbook -i localhost configure_tower.yml
注意:如果您的机器上存在 Python 问题,更改 ansible-playbook 命令为以下内容可能会有所帮助
$ ansible-playbook -i localhost -e ansible_python_interpreter=$(which python) configure_tower.yml
使用正确安装的集合、配置的身份验证设置和格式正确的 Playbook,您应该会看到类似于以下内容的输出
Playbook 完成后,如果您导航到 Red Hat Ansible Tower 服务器的 Web UI,您应该能够看到创建了以下对象
- 一个名为“New Org”的组织
- 一个名为“New Inventory”的清单和该清单中名为“New Host”的主机
- 一个名为“New Project”的项目
- 一个名为“New Team”的团队
- 一个名为“Job Template to Launch”的作业模板
此外,您可以在“作业”页面上看到 Playbook 使用指定的 extra_vars 调用了作业模板。见下文
弃用更新
在删除 tower-cli 期间,我们尝试使模块尽可能相似,以方便从旧的核心模块过渡到新集合。不可避免地,必须进行一些小的更改;这些更改的详细信息可以在 AWX 集合 README.md 文件的“发布和升级”部分找到。一些需要提及的更改包括
- extra_vars 参数不再支持通过指定
@<文件名>
符号从文件加载变量。现在,它们采用字典。如果您以前正在加载文件,请改为使用查找插件加载文件。
- 一些模块不再以以前的方式返回值。所有返回值已在模块之间统一,并且主要返回修改的对象的 ID。
结论
使用 AWX 集合启动和运行非常简单直接。除其他事项外,集合使用户能够将其最常用的任务存储在不同的 Playbook 中,这些 Playbook 可以根据需要轻松共享。在后续的博文中,我们将讨论贡献和开发,以及如何测试您可能想要添加到集合中的任何新模块或更新的模块。