我刚刚开始使用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。但我不确定如何将其纳入代码中。
答案 0 :(得分:6)
这是不你应该如何编写Ansible代码。
Ansible是一种声明性语言,您应该使用提供幂等性的本地module group
:
- name: Ensure 'hadoop' group exists
group:
name: hadoop
state: present
这样你就不必检查任何东西。同一任务将创建一个新组(状态changed
)或报告该组已存在(状态ok
)。执行后的状态将是相同的:组hadoop
存在。
不幸的是,并非您要执行的每个操作都已实现为本机模块,这就是command
模块存在的原因。但它应该作为最后的手段使用。