如何让 Ansible 在已经配置的情况下跳过主机上的 运行 任务?
How to let Ansible to skip run tasks on a host when its already configured?
我们有 2 个剧本 Basic-env
和 Upgrade-env
来管理我们的主机。
ansible-playbook Basic-env
正在执行基本环境设置(yum、生成密钥、安全任务)并注册服务。
ansible-playbook Upgrade-env
正在对软件和配置进行无中断升级 (NDU)。
我们会动态地将新主机放入清单,运行 Basic-env
每 10 分钟。
问题:是否可以让 ansible skip 执行 Basic-env
在旧主机上的任务,而在新主机上只执行 运行 的任务?
注意:我们不想 运行 playbook
分别为每个新主机,而是 运行 运行 Basic-env
所有主机每 10 分钟.
您可以简单地检查主机上的内容。假设您的剧本生成文件 /foo/bar
。然后在你的 playbook/role 开始时有一个这样的任务:
- 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
我们有 2 个剧本 Basic-env
和 Upgrade-env
来管理我们的主机。
ansible-playbook Basic-env
正在执行基本环境设置(yum、生成密钥、安全任务)并注册服务。
ansible-playbook Upgrade-env
正在对软件和配置进行无中断升级 (NDU)。
我们会动态地将新主机放入清单,运行 Basic-env
每 10 分钟。
问题:是否可以让 ansible skip 执行 Basic-env
在旧主机上的任务,而在新主机上只执行 运行 的任务?
注意:我们不想 运行 playbook
分别为每个新主机,而是 运行 运行 Basic-env
所有主机每 10 分钟.
您可以简单地检查主机上的内容。假设您的剧本生成文件 /foo/bar
。然后在你的 playbook/role 开始时有一个这样的任务:
- 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