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

时间:2017-12-08 13:05:50

标签: 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]:失败! => {“已更改”: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'并再次尝试代码,它将会成功。但我想在代码中创建一些条件,以便如果该组已存在,则该步骤将被忽略。我对它进行了研究,发现我们可以使用when: stat_result.stat.exists == False之类的stat_result。但我不确定如何将其纳入代码中。

1 个答案:

答案 0 :(得分:6)

这是你应该如何编写Ansible代码。

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

- name: Ensure 'hadoop' group exists
  group:
    name: hadoop
    state: present

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

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