Ansible:如果文件存在,请不要运行shell命令

时间:2016-10-13 23:45:06

标签: ansible ansible-playbook

我想在Ansible剧本中做以下几点:

- name: "Generate variant html report"
  shell: "<my command>"
  with_items: "{{ variants | default([]) }}"
  when: ({{ folderReports }}/{{ item }}).exists == False

when内,我需要一种方法来创建文件路径,并确定它是否存在。我尝试使用&#34;(&#34;&#34;)&#34;围绕我的第一个表达,但它似乎没有工作:

  

2016-10-13 16:22:48,130 p = 94292 u = sautomation |致命:[localhost]:失败! =&GT; {&#34;失败&#34;:true,&#34; msg&#34;:&#34;条件检查&#39;({{folderReports}} / {{item}})。exists == True& #39;失败。错误是:模板错误,模板字符串:意外&#39; /&#39;。字符串:{%if(/opt/diff-test1.diff).exists == True%} True {%else%} False {%endif%} \ n \ n错误似乎出现在&#39; / opt中/ansible/roles/stats/tasks/main.yml' ;:第45行,第3列,但可能在文件的其他位置,具体取决于确切的语法问题。\ n \ n违规行似乎是:\ n \ n \ n-名称:\&#34;生成报告\&#34; \ n ^此处\ n&#34;}

1 个答案:

答案 0 :(得分:2)

要防止在指定文件已存在的情况下执行任务,请使用shell模块的creates参数:

- name: "Generate variant html report"
  shell: "<my command>"
  args:
    creates: "{{ folderReports }}/{{ item }}"
  with_items: "{{ variants | default([]) }}"

您收到错误,因为条件中的.exists检查是否存在变量(fact),而不是目标节点上的文件。