Yaml 如何以正确的方式将一个变量分配给Ansible中的另一个变量?
我在Ansible方面遇到了一个意想不到的问题。下面是一个简化的例子 我在groups\u vars/all文件中定义了一些全局变量,如下所示:Yaml 如何以正确的方式将一个变量分配给Ansible中的另一个变量?,yaml,jinja2,ansible,ansible-playbook,Yaml,Jinja2,Ansible,Ansible Playbook,我在Ansible方面遇到了一个意想不到的问题。下面是一个简化的例子 我在groups\u vars/all文件中定义了一些全局变量,如下所示: --- node01: {ipv4_address: '10.10.10.1', some_info: data} 并在库存文件中这样使用: [physical-hosts] phyn01 node="{{ node01 }}" ansible_ssh_host="{{ node.ipv4_address }}" 有趣的是Ansible可以在每台主
---
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"
}
它报告了以下错误答案:
- 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:我是凭记忆写的,所以有很多打字错误。现在,对于第3点或您的第一个问题,输出和输入错误是真实和固定的:为了访问组中的主机数据,您可以使用hostvars,首先必须为所有主机或感兴趣的组创建一个任务。例如,一个简单的内部角色可以在所有主机上做一些琐碎的事情。然后,此角色强制收集所有主机上的事实,并将每个主机添加到hostvars组。请记住启用“收集事实”,而不是限制您的剧本运行或未完成此角色/任务的标记。此外,如果您的变量不是简单的变量,比如列表或dict,那么最好将它们放在宿主变量文件中 在列表中已经讨论过: 我不明白你的第二个问题,你的库存很好