以下是库存文件的示例:
[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文件.
实际上,我需要一种本地查找.
还有什么想法?
谢谢你的帮助.
要访问任意组中的变量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。
您可以轻松组合hostvars&groups如果需要更复杂的东西:
{{ 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}}使用