未定义变量时跳过Ansible任务
我在剧本中有以下任务:未定义变量时跳过Ansible任务,ansible,Ansible,我在剧本中有以下任务: - name: task xyz copy: src="{{ item }}" dest="/tmp/{{ item }}" with_items: "{{ y.z }}" when: y.z is defined y.z未定义,因此我希望跳过该任务。相反,我收到: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'z'" 我
- name: task xyz
copy:
src="{{ item }}"
dest="/tmp/{{ item }}"
with_items: "{{ y.z }}"
when: y.z is defined
y.z
未定义,因此我希望跳过该任务。相反,我收到:
FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'z'"
我发现:
但我似乎实现了这一点。我在这里做错了什么?这里的问题是带有_项的
在之前、当
时进行评估。实际上,在实际场景中,您将项
放在时
条件中。请参阅:
此任务适用于您:
- name: task xyz
copy:
src: "{{ item }}"
dest: "/tmp/{{ item }}"
with_items: "{{ (y|default([])).z | default([]) }}"
我不知道
y
dict中缺少现有属性z
是否与未定义的y.z
相同。Undefined不一定意味着与null、empty、nil、false等相同的内容。作为一种不同的检查方式,您可以尝试使用'z'而不是y
(我知道这并不能回答您的问题,但它可以让您继续。您是想尝试y中的'z
?在任何情况下,我都尝试了,但结果是一样的。为了完整性,请参考文档:“将when与_项组合(请参见循环),请注意when语句对每个项分别进行处理。”()我不知道你的评论是什么意思。我在我的回答中包括了一个与你引用的陈述直接相关的链接。啊,不知怎么的,没有找到。你是对的,你的回答已经尽可能完整了。