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

问题描述 投票:1回答:1

我想基于变量名从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-0replica-0等,我不想把IP放入inventory文件。

ansible ansible-inventory
1个回答
2
投票

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

2种可能的正确语法是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.