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

Ansible:如果文件存在,则不要运行shell命令,ansible,ansible-playbook,Ansible,Ansible Playbook,我想在Ansible剧本中做以下几点: - name: "Generate variant html report" shell: "<my command>" with_items: "{{ variants | default([]) }}" when: ({{ folderReports }}/{{ item }}).exists == False -name:“生成变体html报告” 贝壳:“” 带_项:{{variants}默认([])} 当:({{folde

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

- name: "Generate variant html report"
  shell: "<my command>"
  with_items: "{{ variants | default([]) }}"
  when: ({{ folderReports }}/{{ item }}).exists == False
-name:“生成变体html报告”
贝壳:“”
带_项:{{variants}默认([])}
当:({{folderReports}}/{{item}).exists==False
when
中,我需要一种方法来创建文件路径,并确定它是否存在。我试图用“(“”)”来包围我的第一个表达式,但它似乎不起作用:

2016-10-13 16:22:48130 p=94292 u=sautomation |致命:[localhost]:失败!=>{“failed”:true,“msg”:“条件检查”({folderReports}}/{{item})。exists==true”失败。错误为:模板化字符串时模板错误:意外的“/”。字符串:{%if(/opt/diff-test1.diff)。exists==true%}true{%else%}False{%endif%}\n\n错误似乎出现在“/opt/ansible/roles/stats/tasks/main.yml”中:第45行第3列,但可能\n出现在文件的其他位置,具体取决于语法问题。\n\n出现问题的行是:\n\n\n-name:\“Generate report\”\n^here\n“}


如果指定的文件已经存在,要防止执行任务,请使用模块的
创建
参数:

-name:“生成变体html报告”
贝壳:“”
args:
创建:“{folderReports}}/{{item}”
带_项:{{variants}默认([])}


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

我不明白您现在说什么。这正是您在问题中指定的:如果文件不存在,则必须运行任务(
.exist==False
)。这与“当文件存在时,此步骤将不会运行”相同。对不起,您完全正确。在剧本的另一部分中,我只需要在文件存在时执行操作。还有什么方法可以做到这一点吗?分两步:首先通过指定要检查的文件的路径,使用模块检查文件是否存在,然后根据
matched
的返回值以条件执行任务。如果我正确理解您的建议,如果我需要在“带_项目“就像我前面的示例一样,对吗?首先使用
find
查找与
变体匹配的文件,然后在运行任务的条件下使用
find
的输出
文件
。”。请看我在上面的评论中链接的文档页面。这是一个不同的问题,很难在评论中处理。我认为您应该尝试实现它,如果遇到问题,请使用代码示例和结果创建一个单独的问题。
- name: "Generate variant html report"
  shell: "<my command>"
  args:
    creates: "{{ folderReports }}/{{ item }}"
  with_items: "{{ variants | default([]) }}"