根据定义的变量从另一个组中获取主机IP

时间:2019-04-29 16:09:43

标签: 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 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-0replica-0等匹配,并且我不想将IP放入inventory文件中。

1 个答案:

答案 0 :(得分:2)

hostvars是一个哈希。哈希中的每个顶部条目都是清单中主机的名称。为了解决该哈希,您使用的字符串'master_host'不存在。您想要的是对要在其上执行命令的特定主机使用变量master_host的值。

2种可能的正确语法是:

  • {{ hostvars[master_host].ansbible_default_ipv4.address }}
  • {{ hostvars[master_host]['ansbible_default_ipv4']['address'] }}

...或点或括号语法之间的任意混合。