我想基于变量名从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_host'
不存在。你想要的是使用变量master_host
的值作为你正在执行命令的特定主机。
2种可能的正确语法是:
{{ hostvars[master_host].ansbible_default_ipv4.address }}
{{ hostvars[master_host]['ansbible_default_ipv4']['address'] }}
...或点或括号语法之间的任何混合。