读取另一个组的Ansible变量

pie*_*ier 8 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
Run Code Online (Sandbox Code Playgroud)

此外,web_servers小组在group_vars/web_servers以下方面有特定的变量:

tomcat_jmx_port: 123456
Run Code Online (Sandbox Code Playgroud)

tomcat_jmx_port处理时如何访问var ops_servers

有些人可能会说我需要一个all共同代理小组(比如)来放置常见的变量,但这仅仅是一个例子,在真实的生活中有很多我想要访问的变量ops_servers,我想保持清晰,所以tomcat_jmx_port必须留在web_serversgroup_vars文件.

实际上,我需要一种本地查找.

还有什么想法?

谢谢你的帮助.

Bru*_*e P 6

要访问任意组中的变量groups,您可以使用全局变量,该全局变量使您可以访问该组中所有主机的变量。因此,如下所示将返回web_servers组中第一台主机的名称:

{{ groups['web_servers'][0] }}
Run Code Online (Sandbox Code Playgroud)

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

{{ hostvars['somehost']['ansible_default_ipv4']['address'] }}
Run Code Online (Sandbox Code Playgroud)

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

您可以轻松组合hostvarsgroups如果需要更复杂的东西:

{{ hostvars[groups['web_servers'][0]]['ansible_default_ipv4']['address'] }}
Run Code Online (Sandbox Code Playgroud)

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


小智 6

您还可以使用以下命令在运行上下文中“包括”变量

- include_vars: group_vars/web_servers
Run Code Online (Sandbox Code Playgroud)

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

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