介绍 AWX 和 Ansible Tower 集合
介绍 AWX 和 Ansible Tower 集合
Ansible 内容集合是分发内容(包括模块)的一种新方法,适用于 Ansible。
AWX 和 Ansible Tower 集合允许 Ansible 剧本与 AWX 和 Ansible Tower 交互。与通过基于 Web 的 UI 或 API 与 AWX 或 Red Hat Ansible Tower 交互类似,AWX 集合提供的模块是创建、更新或删除对象以及执行运行作业、配置 Ansible Tower 等任务的另一种方式。本文将讨论有关此集合的新更新,以及示例剧本和有关如何成功运行它的详细信息。
AWX 集合 awx.awx 是 Ansible Galaxy 上提供的上游社区分发版。 下游支持的 Ansible 集合 ansible.tower 与 Ansible Tower 3.7 版本一起在自动化中心提供。
此集合取代了以前直接位于 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 的功能的参数。
该集合现在还为幂等性和 check_mode 提供了更好的支持。在使用 check_mode 的先前版本中,旧模块只确保它们可以连接到 Ansible Tower 服务器,但不会指示它们是否会真正更改 Ansible Tower 对象。AWX 集合模块现在将更准确地指示它们是否会通过 check_mode 更改 Tower 对象。
使用 AWX 集合
使用 AWX 集合非常容易入门;您需要做的就是从 Ansible Galaxy 安装该集合,以便与 Ansible Tower 交互。可以使用以下命令完成此操作
ansible-galaxy collection install awx.awx
安装完集合后,我们就可以开始编写剧本以管理您的 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)
创建剧本
安装完 AWX 集合并确定身份验证方法后,我们可以开始 编写剧本 来与 Ansible Tower 交互。为了激活该集合,剧本级别需要以下代码段
collections: - awx.awx
即使您运行的是仍然提供 tower_*
模块的 Ansible 版本,这也将导致 Ansible 从 AWXCollection 加载模块,而不是从 Ansible Core 中提供的版本加载模块。您剧本的其余部分将与没有使用该集合的剧本完全相同。
在下面的示例剧本中,身份验证信息未在任务中指定,而是会从环境变量或 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
执行剧本
假设上面的剧本保存在您的当前目录中,名为 configure_tower.yml,以下命令将运行此剧本
$ ansible-playbook -i localhost configure_tower.yml
注意:如果您在机器上遇到 Python 问题,将 ansible-playbook 命令更改为以下内容可能会有所帮助
$ ansible-playbook -i localhost -e ansible_python_interpreter=$(which python) configure_tower.yml
使用正确安装的集合、配置的身份验证设置和格式正确的剧本,您应该看到类似于以下内容的输出
剧本完成后,如果您导航到 Red Hat Ansible Tower 服务器的 Web UI,您应该可以看到创建了以下对象
- 名为“New Org”的组织
- 名为“New Inventory”的清单,以及该清单中的名为“New Host”的主机
- 名为“New Project”的项目
- 名为“New Team”的团队
- 名为“Job Template to Launch”的作业模板
此外,您可以在作业页面上看到,剧本使用指定 extra_vars 调用了作业模板。 如下所示
弃用更新
在删除 tower-cli 期间,我们尝试使模块尽可能相似,以简化从旧 Core 模块到新集合的过渡。不可避免地,必须进行一些细微的更改;这些更改的详细信息可以在 AWX 集合的“发布和升级”部分的 README.md 文件中找到。一些值得一提的更改包括
- extra_vars 参数不再支持通过指定
@<文件名>
符号从文件加载变量。相反,它们现在接受字典。如果您以前正在加载文件,请使用查找插件来加载该文件。 - 某些模块不再像以前那样返回值。所有返回值已在各个模块中统一,主要返回修改对象的 ID。
结论
使用 AWX 集合非常简单,也很容易上手。 除其他事项外,集合使用户能够将他们最常用的任务存储在不同的剧本中,这些剧本可以根据需要轻松共享。 在后续的博客文章中,我们将讨论贡献和开发,以及如何测试您可能想要添加到集合中的任何新模块或更新模块。