问题描述
在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只运行一个主机。你可以根据需要修改脚本来适应更多的主机。
请注意,这种方法需要手动运行脚本,并且需要确保主机的依赖关系正确设置。
正文完