我们有2个剧本Basic-env
和Upgrade-env
来管理我们的主持人。
ansible-playbook Basic-env
正在进行基本环境设置(yum,生成密钥,安全任务)并注册服务。
ansible-playbook Upgrade-env
正在为软件和配置进行无中断升级(NDU)。
我们会动态将新主机放入广告资源,并每10分钟运行一次Basic-env
。
问题:是否可以让ansible跳过执行旧主机Basic-env
中的任务并仅在新主机中运行它们?
注意:我们不希望单独为每个新主机运行playbook
,而是为所有主机每10分钟运行一次Basic-env
。
答案 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