如何确保每个主机只执行一次Ansible shell命令?
我希望能够保证在给定主机上成功执行长时间运行的
shell命令后,它不会在该主机上的后续playbook中执行.
我很高兴得知Ansible shell任务的创建选项(见http://docs.ansible.com/ansible/shell_module.html);使用这个我可以在shell命令成功后创建一个文件,并且在将来的运行中不执行该命令: - name: Install Jupiter theme shell: wp theme install ~/downloads/jupiter-theme.zip --activate && touch ~/ansible-flags/install-jupiter-theme args: creates: ~/ansible-flags/install-jupiter-theme 如您所见,我在活动用户(deploy)的主目录中有这些控制文件的目录ansible-flags. 然而,这是一个很大的问题.有一个更好的方法吗? 此外,当我需要以不同的用户身份运行步骤时,情况变得更加复杂;在这种情况下,我无权访问部署主目录及其子目录.当然,我可以授予访问权限,但这会增加更多的复杂性.你会怎么建议我处理这个? 解决方法
Ansible本身是无状态的,所以无论你使用什么技术都需要自己实现.没有比告诉Ansible只运行一次任务更简单的方法了.
我认为你已经很直接了.也许用另一条路来检查.我很确定wp主题安装会将该zip实际提取到某个位置,然后您可以将其与c??reated选项一起使用. 有其他选择,但没有什么比这更容易了: >使用您喜欢的任何语言创建脚本,检查主题,如果未安装,请安装它.而不是shell任务,那么你将使用script module执行脚本. 它变得更加复杂.创建选项非常适合这种情况,如果您使用wp命令提取zip的位置,它也非常干净. 当然,如果您需要从其他用户帐户访问该文件,则需要授予对该文件的访问权限.将内容存储在用户主目录中,权限设置为只能由所有者读取,这确实不是理想的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |