未定义变量时跳过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语句对每个项分别进行处理。”()我不知道你的评论是什么意思。我在我的回答中包括了一个与你引用的陈述直接相关的链接。啊,不知怎么的,没有找到。你是对的,你的回答已经尽可能完整了。