如何仅在文件或目录不存在时运行ansible任务?

如何仅在文件或目录不存在时运行ansible任务?,ansible,ansible-playbook,Ansible,Ansible Playbook,在Ansible playbook中,如果目录不存在,我希望运行任务 - name: Check for java exists in /opt stat: path=/opt/jdk1.8.0_71 register: p when: p.stat.isdir is defined and p.stat.isdir 但是,我必须做些什么来确保仅当此目录不存在时才运行以下任务 - name: Extract java if dir not existing comma

在Ansible playbook中,如果目录不存在,我希望运行任务

- name: Check for java exists in /opt     
  stat: path=/opt/jdk1.8.0_71
  register: p
  when: p.stat.isdir is defined and p.stat.isdir
但是,我必须做些什么来确保仅当此目录不存在时才运行以下任务

- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 chdir=/opt

这就是
所创建的
参数的完美用途:

- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 
  args: 
      chdir: /opt 
      creates: /opt/jdk1.8.0_71
Ansible将检查
/opt/jdk1.8.071
是否存在,并且仅在不存在时运行该命令


文档:

如果我需要在该命令之前下载/tmp/jdk1.8.0_71,并且希望此任务也取决于/opt/jdk1.8.0_71是否存在,该怎么办?更新的链接(作为注释发布,因为建议的编辑队列已满):您能解释一下这是如何工作的吗?不清楚
p
stat
指的是什么。@bonh请看问题。它有你想要的一切。对不起!谢谢,我需要喝更多的咖啡。我刚刚用过这个,但必须检查Ansible 2.7.5中是否存在p.results.stat
- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 
  args: 
      chdir: /opt 
      creates: /opt/jdk1.8.0_71