gpt4 book ai didi

ansible - 在一台主机上成功运行时如何终止 Ansible 剧本?

转载 作者:行者123 更新时间:2023-12-04 17:53:32 25 4
gpt4 key购买 nike

我有一个包含多个主机的系统以确保可用性。我只需要在一台主机上运行我的 Ansible 剧本。但是,其中一些主机可能无法访问。假设我有 host1、host2、host3 ... 如果无法访问 host1,我希望 Ansible 尝试 host2。如果可以访问 host2 并且 Ansible 成功运行了一些 bash 脚本,我希望 Ansible 跳过其余主机。有什么建议吗?

最佳答案

这可能不是最佳解决方案,但我找不到更好的解决方案。

  • (可选)设置 gather_factsFalse,完全跳过需要跳过的主机(如果您不需要收集主机信息)。
  • 设置serial到 1,因此剧本一次完全在一台主机上播放,而不是默认的 5 台主机并行播放。
  • 使用set_fact在播放结束时将主机事实(在示例中名为 done)设置为 True,或使用 register如果您需要更具体的条件(命令输出)。
  • 使用end_play meta在变量设置为 True(或具有预期值,如果您使用 register)时为任何主机执行的播放开始时。我用了Jinja2 template language以这种方式提取值(value):
    1. for 遍历所有 hostvars(Python dict 包含为 list 中所有主机设置的所有变量)。
    2. if 检查主机是否将 done 变量设置为 True 并返回字符串 True 如果是是。
    3. default 过滤器设置默认值,如果 done 没有为主机定义(这会导致错误 'dict object' has no attribute 'done ').

例如:

- hosts: all
serial: 1
gather_facts: False

tasks:
- meta: end_play
when: "{% for item in hostvars.values() %}{% if item.done|default(False) %}True{% endif %}{% endfor %}"

# The rest of the play goes here

- set_fact:
done: True

关于ansible - 在一台主机上成功运行时如何终止 Ansible 剧本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com