给出以下清单/角色/剧本示例,如何将角色中的任务委派给localhost并使其打印该角色在其上执行的节点的IP地址?
需要明确的是,在这种情况下,我想要的输出是app1
的IP地址。但是,我希望localhost打印该IP地址。我不希望在app1
节点上运行打印任务。
## inventory
[app_nodes]
app1
app2
## Role: foobar/main.yml
task:
debug:
msg: {{ansible_default_ipv4.address}}
delegate_to: localhost
## playbook
hosts: app_nodes
roles:
- { role: foobar }
答案 0 :(得分:0)
答案是结合使用host_vars
魔术变量和inventory_hostname
## inventory
[app_nodes]
app1
app2
## Role: foobar/main.yml
task:
debug:
msg: {{host_vars[inventory_hostname]['ansible_facts']['default_ipv4_address']}}
delegate_to: localhost
## playbook
hosts: app_nodes
roles:
- { role: foobar }
在运行时,这将输出app1和app2的IP地址。