28. AWX 提示和技巧

28.1. 使用 AWX CLI 工具

AWX 具有功能齐全的命令行界面。有关配置和使用说明,请参阅AWX 命令行界面 文档。

28.2. 更改 AWX 管理员密码

在安装过程中,系统会提示您输入管理员密码,该密码用于在 AWX 中创建的admin超级用户/第一个用户。如果您通过 SSH 登录实例,它将在提示符中告诉您默认的管理员密码。如果您需要在任何时候更改此密码,请在 AWX 服务器上以 root 身份运行以下命令

awx-manage changepassword admin

接下来,输入新密码。之后,您输入的密码将作为 Web UI 中的管理员密码。

要使用 Django 在创建时设置密码验证策略,请参阅Django 密码策略了解更多详细信息。

28.3. 从命令行创建 AWX 管理员

有时您可能会发现从命令行创建管理员(超级用户)帐户很有用。要创建管理员,请在 AWX 服务器上以 root 身份运行以下命令,并在出现提示时输入管理员信息

awx-manage createsuperuser

28.4. 设置与 AWX 一起使用的跳板主机

AWX 提供的凭据不会通过 ProxyCommand 流向跳板主机。它们仅在建立隧道连接后用于最终节点。

要使其正常工作,请在 ProxyCommand 定义中配置 AWX 用户的 SSH 配置文件中的固定用户/密钥文件,该定义通过跳板主机设置连接。例如

Host tampa
Hostname 10.100.100.11
IdentityFile [privatekeyfile]

Host 10.100..
Proxycommand ssh -W [jumphostuser]@%h:%p tampa

您还可以通过清单变量将跳板主机添加到 AWX 实例中。这些变量可以在清单、组或主机级别设置。要添加此项,请导航到您的清单,并在您选择的任何级别的variables字段中添加以下变量

ansible_user: <user_name>
ansible_connection: ssh
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q <user_name>@<jump_server_name>"'

28.5. 使用 AWX 时查看 JSON 命令的 Ansible 输出

使用 AWX 时,您可以使用 API 获取命令的 Ansible 输出(JSON 格式)。

要查看 Ansible 输出,请浏览至

https://<awx server name>/api/v2/jobs/<job_id>/job_events/

28.6. 查找和配置 Ansible 配置文件

虽然 Ansible 不需要配置文件,但操作系统软件包通常在/etc/ansible/ansible.cfg中包含一个默认配置文件以进行可能的自定义。为了使用自定义ansible.cfg文件,请将其放在项目的根目录中。AWX 从项目目录的根目录运行ansible-playbook,在那里它将找到自定义ansible.cfg文件。项目中其他任何位置的ansible.cfg都将被忽略。

要了解您可以在此文件中使用哪些值,请参阅github 上的配置文件

使用默认值可以接受开始,但请注意,您可以在此处配置默认模块路径或连接类型以及其他内容。

AWX 会覆盖一些 ansible.cfg 选项。例如,AWX 将 SSH ControlMaster 套接字、SSH 代理套接字以及任何其他每个作业运行项存储在传递给用于作业执行的容器的每个作业临时目录中。

28.7. 查看所有 ansible_ 变量的列表

Ansible 默认情况下会收集其管理下的机器的“事实”,这些事实可以在剧本和模板中访问。要查看有关机器的所有可用事实,请将setup模块作为临时操作运行

ansible -m setup hostname

这将打印出该特定主机的所有可用事实的字典。有关更多信息,请参阅:https://docs.ansible.org.cn/ansible/playbooks_variables.html#information-discovered-from-systems-facts

28.8. ALLOW_JINJA_IN_EXTRA_VARS 变量

设置ALLOW_JINJA_IN_EXTRA_VARS = template仅适用于保存的作业模板额外变量。提示变量和调查变量从“模板”中排除。此参数具有三个值:template允许直接在作业模板定义上使用 Jinja(默认值),never禁用所有 Jinja 使用(推荐),以及always始终允许 Jinja(强烈不建议,但为了以前的兼容性而提供的一个选项)。

此参数可在 AWX UI 的“作业设置”屏幕中配置

../_images/settings-jobs-jinja.png

28.9. 使用执行环境

请参阅《AWX 用户指南》中的执行环境

28.10. 为通知配置 awxhost 主机名

系统设置中,您可以将服务的基准 URL字段中的https://awxhost替换为您首选的主机名以更改通知主机名。

../_images/configure-awx-system-misc-baseurl.png

AWX 的新安装不需要设置通知的主机名。

28.11. 使用 curl 启动作业

使用 AWX API 启动作业很简单。以下是一些使用curl工具的简单易懂的示例。

假设您的作业模板 ID 为“1”,您的 AWX IP 为 192.168.42.100,并且adminawxsecret是有效的登录凭据,您可以通过这种方式创建一个新作业

curl -f -k -H 'Content-Type: application/json' -XPOST \
    --user admin:awxsecret \
    http://192.168.42.100/api/v2/job_templates/1/launch/

这将返回一个 JSON 对象,您可以解析该对象并使用它来提取“id”字段,该字段是新创建作业的 ID。

您还可以将额外变量传递给作业模板调用,如下例所示

curl -f -k -H 'Content-Type: application/json' -XPOST \
    -d '{"extra_vars": "{\"foo\": \"bar\"}"}' \
    --user admin:awxsecret http://192.168.42.100/api/v2/job_templates/1/launch/

您可以通过登录http://192.168.42.100/api/并浏览各种可用对象来查看实时 API 文档。

注意

extra_vars参数需要是一个包含 JSON 的字符串,而不仅仅是一个 JSON 字典,正如您预期的那样。在转义引号等时要小心。

28.12. 动态清单和私有 IP 地址

默认情况下,AWX 仅显示与之关联有弹性 IP (EIP) 地址的 VPC 中的实例。要查看所有 VPC 实例,请执行以下步骤

  • 在 AWX 界面中,选择您的清单。

  • 单击源设置为 AWS 的组,然后单击“源”选项卡。

  • 在“源变量”框中,输入:vpc_destination_variable: private_ip_address

保存并触发组的更新。您现在应该能够看到所有 VPC 实例。

注意

AWX 必须在 VPC 内部运行并能够访问这些实例,以便有效地配置它们。

28.13. 过滤 AWX 中动态清单源返回的实例

默认情况下,AWX 中的动态清单源(AWS、Google 等)会返回可用于所用云凭据的所有实例。它们会根据各种属性自动加入到组中。例如,AWS 实例按区域、标签名称和值、安全组等进行分组。要定位环境中的特定实例,请编写您的 playbook,使其定位生成的组名称。例如

---
- hosts: tag_Name_webserver
  tasks:
  ...

您也可以使用作业模板设置中的Limit字段将 playbook 运行限制到某个组、多个组、主机或它们的组合。语法与 ansible-playbook 命令行上的--limit parameter相同。

您还可以通过将自动生成的组复制到自定义组中来创建自己的组。确保动态清单源上的Overwrite选项已禁用,否则后续同步操作将删除并替换您的自定义组。

28.14. 在 AWX 中使用 Ansible 源代码中的未发布模块

如果您想在 AWX 系统中利用最新 Ansible 核心分支中提供的功能,那么在 AWX 中使用它非常简单。

首先,确定您要从可用的 Ansible Core Modules 或 Ansible Extra Modules GitHub 存储库中使用的更新模块。

接下来,在 Ansible 源代码 playbook 的同一目录级别创建一个名为/library的新目录。

创建完成后,复制您要使用的模块并将其放入/library目录中 - 它将优先于您的系统模块被使用,并且可以在您通过正常的包管理器更新稳定版本后将其删除。

28.15. 在 AWX 中使用回调插件

Ansible 有一种灵活的方法来处理 playbook 运行期间的操作,称为回调插件。您可以将这些插件与 AWX 一起使用来执行某些操作,例如在 playbook 运行或失败时通知服务,在每次 playbook 运行后发送电子邮件等。有关回调插件架构的官方文档,请参阅:https://docs.ansible.org.cn/developing_plugins.html#callbacks

注意

AWX 不支持stdout回调插件,因为 Ansible 只允许一个,并且 AWX 已经将其用于流式传输事件数据。

您可能还想查看一些示例插件,这些插件应根据特定站点的用途进行修改,例如在以下位置提供的插件:https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/callback

要使用这些插件,请将回调插件.py文件放入名为/callback_plugins的目录中,该目录与 AWX 项目中的 playbook 并排放置。然后,在位于屏幕底部的作业设置的**Ansible 回调插件**字段中指定其路径(每行一个路径)。

../_images/configure-awx-jobs-callback.png

注意

要使大多数与 Ansible 一起提供的回调全局应用,您必须将它们添加到ansible.cfgcallback_whitelist部分。如果您有自定义回调,请参阅 Ansible 文档以了解启用回调插件

28.16. 使用 winrm 连接到 Windows

默认情况下,AWX 尝试ssh到主机。您必须将winrm连接信息添加到 Windows 主机所属的组变量中。要开始,请编辑包含这些主机的 Windows 组,并将变量放在该组的源/编辑屏幕中。

要添加winrm连接信息

通过单击包含 Windows 服务器的组名称右侧的edit按钮,编辑所选组的属性。在“变量”部分,添加您的连接信息,如下所示:ansible_connection: winrm

完成后,保存您的编辑。如果 Ansible 之前尝试过 SSH 连接并失败,则应重新运行作业模板。

28.17. 将现有的清单文件和主机/组变量导入 AWX

要将现有的静态清单和随附的主机和组变量导入 AWX,您的清单结构应类似于以下结构

inventory/
|-- group_vars
|   `-- mygroup
|-- host_vars
|   `-- myhost
`-- hosts

要导入这些主机和变量,请运行awx-manage命令

awx-manage inventory_import --source=inventory/ \
  --inventory-name="My AWX Inventory"

如果您只有一个简单的清单文件(例如名为 ansible-hosts 的文件),请按如下方式导入它

awx-manage inventory_import --source=./ansible-hosts \
  --inventory-name="My AWX Inventory"

如果发生冲突或要覆盖名为“My AWX Inventory”的清单,请运行

awx-manage inventory_import --source=inventory/ \
  --inventory-name="My AWX Inventory" \
  --overwrite --overwrite-vars

如果您收到错误,例如

ValueError: need more than 1 value to unpack

创建一个目录来保存主机文件以及 group_vars

mkdir -p inventory-directory/group_vars

然后,对于每个列出 :vars 的组,创建一个名为inventory-directory/group_vars/<groupname>的文件,并以 YAML 格式设置变量。

分解后,导入程序将正确处理转换。