Ansible根据定义的变量从另一个组获取主机IP
我想根据变量名从Ansible根据定义的变量从另一个组获取主机IP,ansible,ansible-inventory,Ansible,Ansible Inventory,我想根据变量名从inventory文件中的另一个组获取主机的IP 库存文件示例: [master] master-0.example.io master-1.example.io master-2.example.io [replica] replica-0.example.io master_host=master-0.example.io replica-1.example.io master_host=master-1.example.io replica-2.example.io ma
inventory
文件中的另一个组获取主机的IP
库存文件示例:
[master]
master-0.example.io
master-1.example.io
master-2.example.io
[replica]
replica-0.example.io master_host=master-0.example.io
replica-1.example.io master_host=master-1.example.io
replica-2.example.io master_host=master-2.example.io
稍后在playbook中,我想运行一个命令,但对于该命令,我需要主控IP(FQDN不起作用)。我尝试了以下操作,但不起作用:
- name: Test run
shell: "echo {{ ansible_default_ipv4.address }}:{{ port }} {{ hostvars['master_host']['ansible_default_ipv4', 'address'] }}:{{ port }}"
你知道有没有什么办法可以解决这个问题?或者,如果有任何其他方法可以做到这一点-基本上我需要的是将
master-0
与replica-0
等进行匹配,并且我不想将IP放入inventory
文件。hostvars
是一个散列。散列中的每个顶部条目都是清单中主机的名称。要处理该散列,请使用不存在的字符串'master\u host'
。您需要的是,对正在执行命令的特定主机使用变量master\u host
的值
两种可能的正确语法是:
{{hostvars[master\u host].ansbible\u default\u ipv4.address}
{{hostvars[master\u host]['ansbible\u default\u ipv4']['address']}}
。。。或点或括号语法之间的任何混合。您好,感谢您的及时回复。它成功了,谢谢你!我也在尝试
hostvars['master\u host']['ansible\u default\u ipv4','address']
,但似乎ansible\u default\u ipv4
和address
需要分开(我在PlayBook的另一部分的map
中使用了这种语法,我很高兴能提供帮助。阅读doc.map with attribute需要一个按哈希顺序排列的后续元素列表。在jinja2表达式中寻址哈希与此无关。