我有一个ansible playbook,我需要将从任务返回的值与从元数据文件加载的变量进行比较。
此元数据可以采用任何格式,我决定使用YAML。
我想要实现的是从另一个变量+额外的东西构建一个变量名,然后查找这个值。
我通过网络搜索了答案,但我找不到任何答案。这里也有一些类似的问题,但它们并没有完全解决我的问题。
以下是代码:
temp_task.yml
---
- name: Temp task
hosts: xenservers
gather_facts: no
vars_files:
- vars/xenservers_metadata.yml
tasks:
- command: ls /home # just a dummy task..
ignore_errors: yes
- set_fact: nic={{ inventory_hostname }}.network
- debug: msg={{ nic }}
- debug: msg={{ xen_perf.network }}
xenservers_metadata.yml
---
- xen:
network:
- xenbr0: "9b8be49c-....-....-...-..."
我正在尝试让两个调试消息打印出相同的内容。一个是{{ inventory_hostname }}.network
动态构建的,而另一个是我加载的显式变量。
TASK [debug] ********************************************************************************************************************************************************
ok: [xen_perf] => {
"msg": "xen.network"
}
TASK [debug] ********************************************************************************************************************************************************
ok: [xen] => {
"msg": [
{
"xenbr0": "9b8be49c-....-....-...-..."
}
]
}
第一个调试只打印字符串。第二个打印出我需要的实际数据。如何通过动态构造变量/属性来实现第二个数据输出?
答案 0 :(得分:1)
您不会在示例中动态构建变量名称。
所有变量(非事实)都存储在vars
结构中,您可以通过以下方式访问它们:
- debug:
msg: "{{ vars[inventory_hostname].network }}"