我遇到过这种情况:我将 AWX repo 克隆到远程 docker swarm 容器上的 /tmp/ 文件夹中,并且我已经在使用 ansible playbook。我想做的是运行我已经拥有的 playbook,然后在我克隆的 AWX repo 中运行该 playbook。问题是我找不到任何远程运行 playbook 的方法。主要建议是:
---
- import_playbook: setup-docker-swarm-playbook.yml
- import_playbook: /tmp/awx/installer/install.yml
但这不起作用,因为导入剧本仅根据您所在的目录进行检查,因此它不会检查远程的 /tmp/awx,而只是检查我正在处理的项目。此外,导入剧本不支持剧本路径以外的任何其他参数。我也尝试过使用ansible.builtin.fetch获取文件远程剧本并将其复制到我的项目,但这也不起作用,因为剧本无法运行其任何角色来检查其余的 AWX 设置。
任何意见,将不胜感激。
答案1
Ansible 使用“Ansible 控制器”作为您启动剧本的机器。这通常是您的本地 PC 或 Linux-VM,您可以通过 SSH 启动剧本。因此,“控制器”正在与远程机器通信并在那里运行任务。
AWX 本身只是您本地 PC 或 VM 的“替代品”。您的剧本库已在那里签出,并且现在成为您的库存。所有剧本都在 AWX 内运行。
问题是 - AWX 人员构建了一个用于安装或升级 AWX 实例的 Ansible 脚本。但是如果您想使用 AWX,它无法自行更新 - 在安装过程中它会停止 AWX,因此播放将永远无法完成。您有以下选择:
在安装 AWX 的主机上安装 Ansible 本身,并使用 cron 作业或通过 SSH 手动执行并在那里调用剧本。因此 - 您通过 SSH 远程运行剧本,该剧本在本地主机上运行,作为 Ansible 控制器,并安装/更新 AWX。
文档中说 - 您可以在 AWX 存储库中配置清单并定义远程实例和路径。因此,您的本地 PC 是管理 AWX 实例的 Ansible 控制器。安装程序可以从您的系统运行并安装/更新远程实例。您只需更改 中的第一行
installer/inventory
。第三个选项 - 这取决于您安装了什么 - 我使用的是 docker-compose 环境。我只需运行一次安装程序即可生成 docker-compose.yml 等,并将其复制到远程计算机。还有一个单独的脚本(通过 cron 运行)只调用此脚本。如果有一个 Playbook 就更好了,所以第一个选项“更好”。但最后 - 这就是脚本实际在做什么。
我的脚本
docker-compose pull
docker-compose run --rm --service-ports task awx-manage migrate --no-input
docker-compose up -d
在所有情况下,AWX 都无法进行自我更新。您至少需要一个 cron 作业和一个不同的“Ansible 控制器”。即使它是同一台机器。