是否存在一些奇怪的Ansible行为,这意味着清单主机名仅在某些情况下有效?
这是我正在处理的剧本的一部分,第一个调试语句显示正确的值,但是set_fact
然后选择一个空列表,然后在第二个调试任务中选择该列表。
由于某些原因,完全相同的表达式在debug
和set_fact
中的行为有所不同,我不知道为什么。就像inventory_hostname
任务中未定义set_fact
一样(而且我什至会收到一条消息,提示我在两种情况下都标记“ | first”过滤器,就像我最终想要做的那样。) >
- 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
是否有关于如何将数据获取到更合理的变量的指针?
答案 0 :(得分:0)
哦,我太傻了。
我尝试两次评估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
行中的表达式是固定的。