如何在AWX playbook中使用多个主机

93次阅读
没有评论

问题描述

在AWX playbook中想要使用多个主机,他的工作流程是在GCP上创建了两个虚拟机,并将外部IP存储到变量中。在下一个playbook中,他希望在主机部分使用所有的IP地址。他的代码如下:

---- name: Download and install jenkins
hosts:
  - "{{ node_1_ip }}"
  - "{{ node_2_ip }}"
tasks:
  - name: Install java
    yum:
      name: java-1.8.0-openjdk-devel
      become: true

但是当他运行playbook时,出现了警告:

[WARNING]: Could not match supplied host pattern, ignoring: 35.228.80.9

35.228.80.9是他的node_2_ip。他想知道如何将playbook应用到这两台机器上。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

我怀疑你没有在你的inventory中设置主机。你可以使用以下命令找出主机从哪里获取:

ansible-config dump | grep HOST

实际上,你可能只需要创建一个包含以下内容的inventory文件:

[nodes]
node01 ansible_host=YOUR FIRST NODE的IP地址
node02 ansible_host=35.228.80.9

然后在ansible-playbook命令中指定-i参数:

ansible-playbook -i inventory -k playbook.yml

根据你的具体用例,使用GCE动态清单可能更具可扩展性和可维护性,尽管这需要一些额外的设置。

方案2

使用脚本或工具来管理主机可能会增加复杂性,并且需要确保主机的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制主机的运行顺序。你可以使用ansible-playbook命令的--limit参数来指定要运行的主机。以下是一个示例脚本,可以在两个主机上运行playbook:

#!/bin/bash
# 运行 playbook 在第一个主机上
ansible-playbook -i YOUR_FIRST_NODE_IP, playbook.yml
# 运行 playbook 在第二个主机上
ansible-playbook -i 35.228.80.9, playbook.yml

在这个示例中,我们使用ansible-playbook命令和-i参数来指定要运行的主机。通过在主机后面加上逗号,我们告诉Ansible只运行一个主机。你可以根据需要修改脚本来适应更多的主机。
请注意,这种方法需要手动运行脚本,并且需要确保主机的依赖关系正确设置。

正文完