如何在Ansible中创建一个idempontent shell

时间:2014-07-04 14:19:37

标签: ansible ansible-playbook

我正在使用Ansible,我在尝试使用幂等shell执行时遇到了一些问题。我要做的第一件事是安装 python-apt软件包 ,因为我需要使用apt模块来安装其他软件包。但每次我运行我的 playbook 时,shell任务总会运行,我想让它成为幂等的。这是我的shell任务:

- name: install pyton-apt
  shell: apt-get install -y python-apt

这是输出,始终运行上述任务:

$ ansible-playbook -i hosts site.yml 

PLAY [docker] ***************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [10.0.3.240]

TASK: [docker | install pyton-apt] ******************************************** 
changed: [10.0.3.240]

TASK: [docker | install unzip] ************************************************ 
ok: [10.0.3.240]

PLAY RECAP ******************************************************************** 
10.0.3.240                 : ok=3    changed=1    unreachable=0    failed=0 

1 个答案:

答案 0 :(得分:11)

您应该使用ansible apt模块来安装python-apt,它将是开箱即用的幂等词:http://docs.ansible.com/apt_module.html

E.g。

- name: install python-apt
  apt: name=python-apt state=present

(注意使用apt模块应该在远程主机上自动安装python-apt所以我不确定你为什么需要手动安装它,请参阅https://github.com/ansible/ansible/issues/4079

编辑:如果由于某种原因你不能使用内置的apt模块安装python apt,shell模块提供creates参数来帮助使其成为幂等的。

- name: install python-apt
  shell: apt-get install -y python-apt >> /home/x/output.log creates=/home/x/output.log

这意味着如果/home/x/output.log已经存在,shell模块将无法运行。