当未定义变量时跳过Ansible任务

jdo*_*low 1 ansible

我在剧本中有以下任务:

- name: task xyz  
  copy:  
    src="{{ item }}"  
    dest="/tmp/{{ item }}"  
  with_items: "{{ y.z }}"  
  when: y.z is defined  
Run Code Online (Sandbox Code Playgroud)

y.z没有定义,所以我期待跳过任务.相反,我收到:

FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'z'"
Run Code Online (Sandbox Code Playgroud)

我发现: 如何在ansible中定义变量时运行任务? 但似乎我实现了这一点.我在这做错了什么?

tec*_*raf 7

这里的问题with_items是之前评估的问题when.其实在现实情况下,您把itemwhen有条件的.请参阅:循环和条件.

此任务适合您:

- name: task xyz
  copy:  
    src: "{{ item }}"  
    dest: "/tmp/{{ item }}"  
  with_items: "{{ (y|default([])).z | default([]) }}"
Run Code Online (Sandbox Code Playgroud)