我正在用这个剧本创建一个剧本:
在主机上hypervisors
:
- 从所有主机检索虚拟机列表
- 使用模块
add_host
将它们全部添加到一个名为的新库存组中guests
我的库存:
[hypervisors]
host1
host2
我的剧本:
- hosts: hypervisors
- shell: virsh list | awk 'NR>2' | awk '{print $2}'
register: result_virsh
- add_host:
name: "{{ item }}"
group: "guests"
with_items: "{{ result_virsh.stdout_lines }}"
模块add_host
绕过 play host 循环,只对 play 中的所有主机运行一次。
然后它被调用一次(对于 host1),这是使用这个模块的一个特例(见上面的链接),好像变量run_once
被隐式固定为true
.
如何将它用于组中的所有主机hypervisors
?
编辑:仅使用 localhost 在您的计算机上重现它的示例
创建文件/tmp/host1_test以模拟来宾vm1和vm2的返回:
vm1
vm2
创建文件/tmp/host2_test以模拟来宾vm3和vm4的返回:
vm3
vm4
将此清单 ( test_add_host.ini ) 与两台主机一起使用,均具有固定 IP 地址127.0.0.1:
[hypervisors]
host1 ansible_host=127.0.0.1 test_filename=/tmp/host1_test
host2 ansible_host=127.0.0.1 test_filename=/tmp/host2_test
使用这个剧本(test_add_host.yml):
- hosts: hypervisors
gather_facts: no
tasks:
- shell: "cat {{ test_filename }}"
register: result_virsh
- add_host:
name: "{{ item }}"
group: "guests"
with_items: "{{ result_virsh.stdout_lines }}"
- hosts: guests
gather_facts: no
tasks:
- local_action: ping
使用以下命令在本地调用此 playbook:
ansible-playbook -c local -i test_add_host.ini test_add_host.yml
- 首先播放呼叫主机host1和host2
- 第二次播放呼叫主机vm1和vm2
我应该怎么做才能在第二次播放中调用所有主机(vm1、vm2、vm3和vm4)?