读取另一个组的Ansible变量

时间:2015-10-30 14:42:23

标签: ansible

以下是库存文件的示例:

[web_servers]
web_server-1 ansible_ssh_host=xxx ansible_ssh_user=yyy

[ops_servers]
ops_server-1 ansible_ssh_host=xxx ansible_ssh_user=zzz

此外,web_servers组在group_vars/web_servers中具有特定的变量:

tomcat_jmx_port: 123456

在处理tomcat_jmx_port时如何访问ops_servers var?

有些人可能会说我需要一个共同代理组(如all)来放置常见的变量,但这仅仅是一个例子,在真实生活中我想从ops_servers访问许多变量,我希望保持清晰,因此tomcat_jmx_port必须留在web_servers group_vars文件中。

事实上,我需要一种本地查找。

任何想法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

要从任意组访问变量,您需要使用全局变量groups,这样您就可以访问组中所有主机的变量。所以这样的东西会返回web_servers组中第一个主机的名称:

{{ groups['web_servers'][0] }}

要访问主机的各个变量,您可以执行以下操作:

{{ hostvars['somehost']['ansible_default_ipv4']['address'] }}

这将返回名为somehost的主机的默认IP地址。

您可以轻松组合hostvars& groups如果你需要更复杂的东西:

{{ hostvars[groups['web_servers'][0]]['ansible_default_ipv4']['address'] }}

这个将为您提供web_servers组中第一个主机的默认IP地址。

答案 1 :(得分:4)

你也可以"包括"使用

运行上下文中的变量
- include_vars: group_vars/web_servers

请注意,如果您在上下文中有相同名称的变量,它们将被覆盖。

这将使您的变量可用{{tomcat_jmx_port}}