如果已经存在于ansible中,如何跳过命令

1 ansible

我刚刚开始使用Ansible并尝试了一些我自己的东西.我正在运行以下代码:

---
- hosts: test-server
  remote_user: root
  tasks:
  - name: install java 8
    apt: name=openjdk-7-jdk update-cache=yes force=yes
  - name: add group
    command: addgroup hadoop
Run Code Online (Sandbox Code Playgroud)

并得到以下错误: -

致命:[10.150.0.3]:失败!=> {"已更改":true,"cmd":["addgroup","hadoop"],"delta":"0:00:00.033669","end":"2017-12-08 12:50:15.342671 ","msg":"非零返回码","rc":1,"开始":"2017-12-08 12:50:15.309002","stderr":"addgroup:群组'hadoop'已经存在".,"stderr_lines":["addgroup:组'hadoop'已经存在."],"stdout":"","stdout_lines":[]}
重试,使用:--limit @/root/hdp1.retry

我可以继续删除组'hadoop'并再次尝试代码,它将成功.但我想在代码中创建一些条件,以便如果该组已存在,则该步骤将被忽略.我研究过它,发现我们可以使用一些stat_result when: stat_result.stat.exists == False.但我不确定如何将其合并到代码中.

tec*_*raf 7

不是你应该如何编写Ansible代码.

Ansible是一种声明性语言,您应该使用提供幂等性的本机模块group:

- name: Ensure 'hadoop' group exists
  group:
    name: hadoop
    state: present
Run Code Online (Sandbox Code Playgroud)

这样您就不必检查任何内容.相同的任务将创建一个新组(状态changed)或报告该组已存在(状态ok).执行后的状态将是相同的:组hadoop存在.

遗憾的是,并非您要执行的每个操作都已实现为本机模块,这就是command模块存在的原因.但它应该作为最后的手段.