假设我有一个类似下面的剧本
- name: install nagios client
hosts: client1
roles:
- nagios-client
set_fact:
client_ip: "{{ ansible_default_ipv4.address }}"
client_hostname: "{{ ansible_hostname }}"
- name: register client
hosts: server
vars:
- ip: {{ client_ip }}
- hostname: {{ client_hostname }}
role:
- register-nagios-client
我知道set_fact绑定到一个主机,不能在另一个主机上使用,也可以从事实{{ hostvars['client1']['ansible_eth0']['ipv4']['address'] }}
获取客户端的IP。但是有没有解决方法来定义一个可以在yml文件中的多个位置引用的局部变量?
答案 0 :(得分:1)
事实与主持人不一致,并且在正在运行的剧本的生命周期内保持定义。
您似乎已经知道如何从其他主机引用事实,所以只需使用它。要么(如果你在第一本剧本中保留set_fact
):
vars:
- ip: "{{ hostvars['hostname'][client_ip] }}"
- hostname: "{{ hostvars['hostname'][client_hostname] }}"
或(因为似乎没有必要在第一场比赛中设置事实):
vars:
- ip: "{{ hostvars['hostname'][ansible_default_ipv4][address] }}"
- hostname: "{{ hostvars['hostname'][ansible_hostname] }}"
我使用上面的hostname
来引用您想要的主机。你的剧本中的client1
是一个主持人群组。它可能与主机名称匹配,也可能不匹配。它也可以解析为多个主机。