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

如果ansible中已存在命令,如何跳过该命令,ansible,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 并获取以下错误:- 致命:[10.150.0.3]:失败!=

我刚刚开始尝试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
并获取以下错误:-

致命:[10.150.0.3]:失败!=>{“changed”:true,“cmd”:[“addgroup”,“hadoop”],“delta”:“0:00:00.033669”,“end”:“2017-12-08 12:50:15.342671”,“msg”:“非零返回码”,“rc”:1,“start”:“2017-12-08 12:50:15.309002”,“stderr”:“addgroup:group`hadoop'已经存在。”,“stderr”:[“addgroup:group'hadoop'已经存在],“stdout”:,“标准输出线”:[]}
要重试,请使用:--limit@/root/hdp1.retry


我可以继续删除组“hadoop”,然后再次尝试代码,它会成功。但是我想在代码中设置一些条件,以便如果组已经存在,那么该步骤将被忽略。我已经对它进行了研究,发现我们可以使用一些统计结果,如
when:stat\u result.stat.exists==False
。但我不确定如何使用将其合并到代码中。

这是而不是您应该如何编写易懂的代码

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

- name: Ensure 'hadoop' group exists
  group:
    name: hadoop
    state: present
这样您就不必检查任何内容。同一任务将创建一个新组(状态
已更改
),或报告该组已存在(状态
确定
)。执行后的状态将相同:组
hadoop
已存在


不幸的是,并不是您想要执行的所有操作都已作为本机模块实现,这就是为什么存在
命令
模块的原因。但它应该作为最后手段使用。

这是而不是您应该如何编写Ansible代码

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

- name: Ensure 'hadoop' group exists
  group:
    name: hadoop
    state: present
这样您就不必检查任何内容。同一任务将创建一个新组(状态
已更改
),或报告该组已存在(状态
确定
)。执行后的状态将相同:组
hadoop
已存在


不幸的是,并不是您想要执行的每个操作都作为本机模块实现,这就是为什么
命令
模块存在的原因。但它应该作为最后手段使用。

回答不错。也许可以为幂等性添加一个简短的解释,或者添加一个解释的链接,因为它可能是devops新用户的一个新术语。回答不错。也许可以添加一个幂等性的简短解释或解释的链接,因为它可能是devops新手的新术语。