从组中的所有主机获取 ansible_fqdn
get ansible_fqdn from all hosts in a group
我正在尝试从一个组中的所有主机获取 ansible_fqdn
模板中的内容,其中包含类似这样的内容
{% for host in groups.all %}
{{ hostvars[host].ansible_fqdn }}
{% endfor %}
或使用:
{% for host in query('inventory_hostnames', target) | map('extract', hostvars, 'inventory_hostname') %}
{{ hostvars[host].ansible_fqdn }}
{% endfor %}
在所有情况下我得到:
"AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_fqdn'"
我确实注意到,如果我只是 "print/write":
{{ hostvars[host] }}
ansible_fqdn
在 facter_networking
之内,但也在尝试:
{{ hostvars[host][facter_networking].fqdn }}
或
{{ hostvars[host][facter_networking].fqdn }}
我得到:
fatal: [10.25.176.10]: FAILED! => {
"changed": false,
"msg": "AnsibleUndefinedVariable: ansible.vars.hostvars.HostVarsVars object has no element {
'domain': 'test-x',
'fqdn': 'TEST-X.example.org',
'hostname': 'TEST-X',
'interfaces': {
'ens192': {
'bindings': [{
'address': '10.25.176.10',
'netmask': '255.255.254.0',
'network': '10.25.176.0'
}, {
'address': '10.25.177.226',
'netmask': '255.255.252.0',
'network': '10.25.176.0'
}],
'ip': '10.25.176.10',
'mac': '00:50:56:8f:ce:ca',
'mtu': 1500,
'netmask': '255.255.254.0',
'network': '10.25.176.0'
},
'lo': {
'bindings': [{
'address': '127.0.0.1',
'netmask': '255.0.0.0',
'network': '127.0.0.0'
}],
'ip': '127.0.0.1',
'mtu': 65536,
'netmask': '255.0.0.0',
'network': '127.0.0.0'
}
},
'ip': '10.25.176.10',
'mac': '00:50:56:8f:ce:ca',
'mtu': 1500,
'netmask': '255.255.254.0',
'network': '10.25.176.0',
'primary': 'ens192'
}
}
如果我使用:
{{ hostvars[host].facter_networking }}
我得到:
"msg": "AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'facter_networking'
数据在那里,但我知道如何提取它吗?
这是剧本:
- name: Gathering info
action: setup
- name: Create .pgpass
template:
src: pgpass.j2
dest: /home/postgres/.pgpass
owner: postgres
group: postgres
mode: 0600
可以从 ansible_facts
字典中访问为主机收集的 Ansible 事实。因此,要访问主机的 fqdn
,您必须访问 hostvars[host]['ansible_facts']['fqdn']
.
由于我们正在遍历 groups['all']
,只需确保收集事实任务也在 - hosts: all
上 运行。
因此,使用上述方法,模板可能如下所示:
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['fqdn'] }}
{% endfor %}
请注意,ansible_
前缀不是必需的,即 fqdn
而不是 ansible_fqdn
。
我正在尝试从一个组中的所有主机获取 ansible_fqdn
模板中的内容,其中包含类似这样的内容
{% for host in groups.all %}
{{ hostvars[host].ansible_fqdn }}
{% endfor %}
或使用:
{% for host in query('inventory_hostnames', target) | map('extract', hostvars, 'inventory_hostname') %}
{{ hostvars[host].ansible_fqdn }}
{% endfor %}
在所有情况下我得到:
"AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_fqdn'"
我确实注意到,如果我只是 "print/write":
{{ hostvars[host] }}
ansible_fqdn
在 facter_networking
之内,但也在尝试:
{{ hostvars[host][facter_networking].fqdn }}
或
{{ hostvars[host][facter_networking].fqdn }}
我得到:
fatal: [10.25.176.10]: FAILED! => {
"changed": false,
"msg": "AnsibleUndefinedVariable: ansible.vars.hostvars.HostVarsVars object has no element {
'domain': 'test-x',
'fqdn': 'TEST-X.example.org',
'hostname': 'TEST-X',
'interfaces': {
'ens192': {
'bindings': [{
'address': '10.25.176.10',
'netmask': '255.255.254.0',
'network': '10.25.176.0'
}, {
'address': '10.25.177.226',
'netmask': '255.255.252.0',
'network': '10.25.176.0'
}],
'ip': '10.25.176.10',
'mac': '00:50:56:8f:ce:ca',
'mtu': 1500,
'netmask': '255.255.254.0',
'network': '10.25.176.0'
},
'lo': {
'bindings': [{
'address': '127.0.0.1',
'netmask': '255.0.0.0',
'network': '127.0.0.0'
}],
'ip': '127.0.0.1',
'mtu': 65536,
'netmask': '255.0.0.0',
'network': '127.0.0.0'
}
},
'ip': '10.25.176.10',
'mac': '00:50:56:8f:ce:ca',
'mtu': 1500,
'netmask': '255.255.254.0',
'network': '10.25.176.0',
'primary': 'ens192'
}
}
如果我使用:
{{ hostvars[host].facter_networking }}
我得到:
"msg": "AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'facter_networking'
数据在那里,但我知道如何提取它吗?
这是剧本:
- name: Gathering info
action: setup
- name: Create .pgpass
template:
src: pgpass.j2
dest: /home/postgres/.pgpass
owner: postgres
group: postgres
mode: 0600
可以从 ansible_facts
字典中访问为主机收集的 Ansible 事实。因此,要访问主机的 fqdn
,您必须访问 hostvars[host]['ansible_facts']['fqdn']
.
由于我们正在遍历 groups['all']
,只需确保收集事实任务也在 - hosts: all
上 运行。
因此,使用上述方法,模板可能如下所示:
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['fqdn'] }}
{% endfor %}
请注意,ansible_
前缀不是必需的,即 fqdn
而不是 ansible_fqdn
。