以下是库存文件的示例:
[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文件中。
事实上,我需要一种本地查找。
任何想法?
感谢您的帮助。
答案 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}}