是否有一些奇怪的Ansible行为,这意味着inventory_hostname只在特定情况下工作?
这是我正在处理的剧本片段,第一个调试语句显示了正确的值,但set_fact
随后选取了一个空列表,然后在第二个调试任务中选取该列表。
出于某种原因,完全相同的表达式在debug
中与set_fact
的行为不同,我看不出为什么。就好像inventory_hostname
在set_fact
任务中未定义一样(我什至收到一条消息,建议如果我标记"|第一"过滤器在这两种情况下,正如我最终想要做的那样。
- name: debug it
debug:
var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list
- name: find the right droplet
set_fact:
droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list }}"
- name: debug it
debug:
var: droplet
关于如何将数据放入更合理的变量的任何指示?
哦,我太傻了。
我试图评估inventory_hostname
两次!!因为在第二种情况下,我需要整个表达式的{{ ... }}
,我忘了从变量中删除它。
正确的答案是:
- name: debug it
debug:
var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list
- name: find the right droplet
set_fact:
droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', inventory_hostname) | list }}"
- name: debug it
debug:
var: droplet
请参阅set_fact
行中的表达式已修复。