我想根据变量名从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
稍后在剧本中我想运行一个命令,但是为此,我需要主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
文件中。
答案 0 :(得分:2)
hostvars
是一个哈希。哈希中的每个顶部条目都是清单中主机的名称。为了解决该哈希,您使用的字符串'master_host'
不存在。您想要的是对要在其上执行命令的特定主机使用变量master_host
的值。
2种可能的正确语法是:
{{ hostvars[master_host].ansbible_default_ipv4.address }}
{{ hostvars[master_host]['ansbible_default_ipv4']['address'] }}
...或点或括号语法之间的任意混合。