如何在Ansible中创建幂等的shell脚本

4

我正在使用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个回答

11
你应该使用ansible apt模块来安装python-apt,它默认是幂等的: http://docs.ansible.com/apt_module.html 例如:
- 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参数来帮助使其幂等。)

(注意使用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 模块将不会运行。


在撰写本文时,人们正在问题4079中报告apt模块仍未自动安装pyton-apt依赖项。 - Mxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接