Ansible:从库存文件中获取变量值
Ansible: Fetch variable value from inventory file
我在从清单文件中获取 rhel
下 ansible_user
的值时遇到问题。以下是我尝试获取的几种方式,每次它都显示未定义 rhel
。关于如何检索它有什么建议吗?
- set_fact:
SSHUSER: "{{ hostvars.[rhel].ansible_user }}"
- set_fact:
SSHUSER: "{{ rhel.ansible_user }}"
---
all:
vars:
project: test
hosts:
children:
test_vm:
hosts: 10.10.10.4
example_vm:
hosts: 10.10.10.5
ubuntu:
children:
test_vm:
vars:
os: ubuntu
ansible_user: "testuser"
rhel:
children:
example_vm:
vars:
os: rhel
ansible_user: "exampleuser"
您引用的 rhel
是一个 组,而不是一个主机 -- 一个主机可能属于多个组。为了实现“组 rhel 的某些成员的主机变量”,您想要的表达式是 jinja2 表达式:{{ hostvars[groups["rhel"][0]].ansible_user }}
其中 groups["rhel"]
是 ansible inventory 主机名的字符串列表,如果假设它们都有一个等价的 ansible_user
那么只获取第一个应该是安全的,它是 groups["rhel"][0]
或更详细但可能更清晰的 groups["rhel"]|first
然后,我们想要那个主机的hostvars
,而不是我们自己的;由于 hostvars
是由 ansible inventory 主机名索引的 dict[str, dict]
,我们可以将该值作为 hostvars[groups["rhel"][0]]
插入到 hostvars
dict 中,这是每个 hostvar,然后 hostvars[groups["rhel"][0]].ansible_user
返回您请求的 ansible_user
事实
我在从清单文件中获取 rhel
下 ansible_user
的值时遇到问题。以下是我尝试获取的几种方式,每次它都显示未定义 rhel
。关于如何检索它有什么建议吗?
- set_fact:
SSHUSER: "{{ hostvars.[rhel].ansible_user }}"
- set_fact:
SSHUSER: "{{ rhel.ansible_user }}"
---
all:
vars:
project: test
hosts:
children:
test_vm:
hosts: 10.10.10.4
example_vm:
hosts: 10.10.10.5
ubuntu:
children:
test_vm:
vars:
os: ubuntu
ansible_user: "testuser"
rhel:
children:
example_vm:
vars:
os: rhel
ansible_user: "exampleuser"
您引用的 rhel
是一个 组,而不是一个主机 -- 一个主机可能属于多个组。为了实现“组 rhel 的某些成员的主机变量”,您想要的表达式是 jinja2 表达式:{{ hostvars[groups["rhel"][0]].ansible_user }}
其中 groups["rhel"]
是 ansible inventory 主机名的字符串列表,如果假设它们都有一个等价的 ansible_user
那么只获取第一个应该是安全的,它是 groups["rhel"][0]
或更详细但可能更清晰的 groups["rhel"]|first
然后,我们想要那个主机的hostvars
,而不是我们自己的;由于 hostvars
是由 ansible inventory 主机名索引的 dict[str, dict]
,我们可以将该值作为 hostvars[groups["rhel"][0]]
插入到 hostvars
dict 中,这是每个 hostvar,然后 hostvars[groups["rhel"][0]].ansible_user
返回您请求的 ansible_user
事实