当Ansible playbook在一台主机上运行成功时,如何终止该运行?

当Ansible playbook在一台主机上运行成功时,如何终止该运行?,ansible,Ansible,我有一个带有多台主机的系统,以确保可用性。我只需要在一台主机上运行我的Ansible playbook。但是,其中一些主机可能无法访问。假设我有一号,二号,三号。。。如果无法访问主机1,我希望Ansible尝试访问主机2。如果host2是可访问的,并且Ansible成功运行了一些bash脚本,那么我希望Ansible跳过其余的主机。有任何建议吗? < P> ANTILE不考虑那些无法到达的主机,在安装阶段,不可达主机列表将被删除。p> 在剩余的主机列表中,对bash脚本的特定任务使用“run_o

我有一个带有多台主机的系统,以确保可用性。我只需要在一台主机上运行我的Ansible playbook。但是,其中一些主机可能无法访问。假设我有一号,二号,三号。。。如果无法访问主机1,我希望Ansible尝试访问主机2。如果host2是可访问的,并且Ansible成功运行了一些bash脚本,那么我希望Ansible跳过其余的主机。有任何建议吗?

< P> ANTILE不考虑那些无法到达的主机,在安装阶段,不可达主机列表将被删除。p>
在剩余的主机列表中,对bash脚本的特定任务使用“run_once:yes”。它将从可用主机中选择第一个匹配的主机

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

  • (可选)设置为
    False
    ,以完全跳过需要跳过的主机(如果不需要收集主机事实)
  • 设置为1,则playbook一次完全在一台主机上播放,而不是默认的5台主机并行播放
  • 用于在播放结束时将主机事实(示例中名为
    done
    )设置为
    True
    ,或者在需要更具体的条件(命令输出)时使用
  • 在任何主机的变量设置为
    True
    (或具有预期值,如果您使用
    register
    )时执行的播放开始时使用。我使用以下方法提取值:
  • for
    循环所有
    hostvars
    (Python dict包含为清单中所有主机设置的所有变量)
  • if
    检查主机是否已将
    done
    变量设置为
    True
    并返回字符串
    True
  • default
    过滤器,用于在主机未定义
    done
    时设置默认值(这将导致错误
    “dict对象”没有属性“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

如何在“成功运行某些bash脚本”中定义“某些”?如何定义“不可访问”?Ansible自动跳过ssh无法访问的主机。@sm4rk0我很好奇它会如何影响答案?是否继续尝试或停止的唯一决定因素是成功执行(神秘的“某些”脚本)。在你看来,“遥不可及”的定义对答案起到了什么作用?@techraf你是对的。我误解了这个问题。