加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何确保每个主机只执行一次Ansible shell命令?

发布时间:2020-12-15 21:49:12 所属栏目:安全 来源:网络整理
导读:我希望能够保证在给定主机上成功执行长时间运行的 shell命令后,它不会在该主机上的后续playbook中执行. 我很高兴得知Ansible shell任务的创建选项(见http://docs.ansible.com/ansible/shell_module.html);使用这个我可以在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执行脚本.
>在/etc/ansible/facts.d中安装local fact,检查是否已安装主题.然后,您可以简单地将基于该事实的条件应用于shell任务.
>设置fact caching,然后注册shell任务的结果并将其存储为事实.启用事实缓存后,您可以在以后的playbook运行中访问存储的结果.

它变得更加复杂.创建选项非常适合这种情况,如果您使用wp命令提取zip的位置,它也非常干净.

当然,如果您需要从其他用户帐户访问该文件,则需要授予对该文件的访问权限.将内容存储在用户主目录中,权限设置为只能由所有者读取,这确实不是理想的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读