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

Rob*_*rtK 30 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
Run Code Online (Sandbox Code Playgroud)

但是,我必须做些什么来确保只有在这个目录不存在的情况下才能运行以下任务?

- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 chdir=/opt
Run Code Online (Sandbox Code Playgroud)

Bru*_*e P 44

这是该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
Run Code Online (Sandbox Code Playgroud)

Ansible将检查是否/opt/jdk1.8.0_71存在,只有在命令不存在时才运行命令.

文档:http://docs.ansible.com/ansible/command_module.html

  • 语法错误:arg:creates:....是正确的方法 (5认同)
  • 如果我需要,例如。在该命令之前下载 /tmp/jdk1.8.0_71 并希望此任务也取决于 /opt/jdk1.8.0_71 是否存在? (3认同)

hel*_*loV 25

- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 chdir=/opt
  when: not p.stat.exists
Run Code Online (Sandbox Code Playgroud)

  • 您能多解释一下这是如何工作的吗?目前尚不清楚“p”或“stat”指的是什么。 (7认同)
  • 对不起!谢谢,我需要多喝咖啡。 (3认同)
  • @bonh 看到提出的问题。它拥有您想要的一切。 (2认同)
  • 我刚刚使用过这个,但必须检查 Ansible 2.7.5 中的 p.results.stat.exists (2认同)