当Ansible playbook在一台主机上运行成功时,如何终止该运行?
我有一个带有多台主机的系统,以确保可用性。我只需要在一台主机上运行我的Ansible playbook。但是,其中一些主机可能无法访问。假设我有一号,二号,三号。。。如果无法访问主机1,我希望Ansible尝试访问主机2。如果host2是可访问的,并且Ansible成功运行了一些bash脚本,那么我希望Ansible跳过其余的主机。有任何建议吗? < P> ANTILE不考虑那些无法到达的主机,在安装阶段,不可达主机列表将被删除。p>当Ansible playbook在一台主机上运行成功时,如何终止该运行?,ansible,Ansible,我有一个带有多台主机的系统,以确保可用性。我只需要在一台主机上运行我的Ansible playbook。但是,其中一些主机可能无法访问。假设我有一号,二号,三号。。。如果无法访问主机1,我希望Ansible尝试访问主机2。如果host2是可访问的,并且Ansible成功运行了一些bash脚本,那么我希望Ansible跳过其余的主机。有任何建议吗? < P> ANTILE不考虑那些无法到达的主机,在安装阶段,不可达主机列表将被删除。p> 在剩余的主机列表中,对bash脚本的特定任务使用“run_o
在剩余的主机列表中,对bash脚本的特定任务使用“run_once:yes”。它将从可用主机中选择第一个匹配的主机 这可能不是最佳解决方案,但我找不到更好的解决方案
- (可选)设置为
,以完全跳过需要跳过的主机(如果不需要收集主机事实)False
- 设置为1,则playbook一次完全在一台主机上播放,而不是默认的5台主机并行播放
- 用于在播放结束时将主机事实(示例中名为
)设置为done
,或者在需要更具体的条件(命令输出)时使用True
- 在任何主机的变量设置为
(或具有预期值,如果您使用True
)时执行的播放开始时使用。我使用以下方法提取值:register
循环所有for
(Python dict包含为清单中所有主机设置的所有变量)hostvars
检查主机是否已将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你是对的。我误解了这个问题。