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

时间:2016-01-26 18:43:02

标签: ansible ansible-playbook

在Ansible手册中,如果目录,我想运行任务。

- 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

2 个答案:

答案 0 :(得分:41)

creates参数非常适合:

- 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.0_71是否存在,并且仅在命令不存在时运行该命令。

文档:How to run external executable using Python?

答案 1 :(得分:25)

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