如何让Ansible在已经配置的情况下跳过主机上的运行任务?

时间:2016-02-24 03:15:41

标签: ansible ansible-playbook

我们有2个剧本Basic-envUpgrade-env来管理我们的主持人。

ansible-playbook Basic-env正在进行基本环境设置(yum,生成密钥,安全任务)并注册服务。

ansible-playbook Upgrade-env正在为软件和配置进行无中断升级(NDU)。

我们会动态将新主机放入广告资源,并每10分钟运行一次Basic-env

问题:是否可以让ansible跳过执行旧主机Basic-env中的任务并仅在新主机中运行它们?

注意:我们不希望单独为每个新主机运行playbook,而是为所有主机每10分钟运行一次Basic-env

1 个答案:

答案 0 :(得分:3)

您只需检查主机上的内容即可。让我们说你的剧本生成文件/foo/bar。然后在你的剧本/角色的开头有一个这样的任务:

- stat:
    path: /foo/bar
  register: check

然后,对于您不想处理的任何任务,您可以应用这样的条件:

when: not p.stat.exists

另一种(也许更干净)的解决方案是使用local facts。在您的剧本的最后,创建一个文件/etc/ansible/facts.d/setup_complete.fact,内容为:

{"setup_complete": "true"}

当Ansible下次运行时,事件ansible_local.setup_complete将可用。然后你的情况看起来像

when: "setup_complete" not in ansible_local