我遇到了Ansible的意外问题。这是简化的例子。
我在groups_vars / all文件中定义了一些全局变量,如下所示:
---
node01: {ipv4_address: '10.10.10.1', some_info: data}
在库存文件中使用它:
[physical-hosts]
phyn01 node="{{ node01 }}" ansible_ssh_host="{{ node.ipv4_address }}"
有趣的是,Ansible可以在每个主机上ssh并获取事实。但是在执行playbook时我无法获得每个主机的'node'变量值(我有其他数据)。
工作示例:
- hosts: physical-hosts
tasks:
- name: get node variable for current host
debug: var=node
在这种情况下输出:
TASK: [get node variable for current host] ************************************
ok: [phyn01] => {
"node": {
"ipv4_address": "10.10.10.1",
"some_info": "data"
}
}
但如果我使用以下内容,我就无法得到相同的结果:
- hosts: physical-hosts
tasks:
- debug: var=hostvars.{{item}}.node
with_items: groups['physical-hosts']
它报告错误的答案如下:
TASK: [debug var=hostvars.{{item}}.node] **************************************
ok: [phyn01] => (item=phyn01) => {
"hostvars.phyn01.node": "{{ node01 }}",
"item": "phyn01"
}
要点:
所以问题是:
感谢您的关注
upd :我是从内存写的,所以有很多错误。现在输出和拼写错误是真实的和固定的
答案 0 :(得分:0)
对于第3点,或者您的第一个问题:为了获得对组中主机数据的访问权限,您可以使用hostvars,首先必须为所有主机或感兴趣的组创建任务。例如,一个内部角色,简单地在所有主机上做一些简单的事情。然后,此角色强制在所有主机上收集事实,并将每个主机添加到hostvars组。请记住启用收集事实,而不是限制您的游戏手册运行或标记错过此角色/任务。另外,如果您的vars不是简单的vars,如列表或dicts,那么最好将它们放入host_vars文件中。
之前已在列表中讨论过: https://groups.google.com/forum/#!msg/Ansible-project/f90Y4T4SJfQ/L1YomumcPEQJ
没有理解你的第二个问题,你的库存工作正常。