Ansible的变量似乎在set_fact内部消失了



是否有一些奇怪的Ansible行为,这意味着inventory_hostname只在特定情况下工作?

这是我正在处理的剧本片段,第一个调试语句显示了正确的值,但set_fact随后选取了一个空列表,然后在第二个调试任务中选取该列表。

出于某种原因,完全相同的表达式debug中与set_fact的行为不同,我看不出为什么。就好像inventory_hostnameset_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行中的表达式已修复。

最新更新