当没有主机匹配时,如何避免 运行 的剧本?
How to avoid a playbook to run when no host matches?
用例: 用户可以提供主机名并触发剧本 运行。如果主机名有错字,我想在 "no hosts matched" 时使完整的剧本 运行 失败。我想让它失败,因为我喜欢检测 Bamboo(我用于 CD/CI)到 运行 剧本的失败。
我做了相当广泛的研究。当没有主机匹配时,剧本存在且退出代码 = 0 似乎是一种想要的行为。 Here is one indication我找到了。我同意一般的行为应该是这样的。
所以我需要对我的用例进行额外检查。我尝试了以下方法:
- name: Deploy product
hosts: "{{ target_hosts }}"
gather_facts: no
any_errors_fatal: true
pre_tasks:
- name: Check for a valid target host
fail:
msg: "The provided host is not knwon"
when: target_hosts not in groups.tomcat_servers
但由于没有主机匹配,剧本不会 运行,没关系,但它也以退出代码 0 结束。这样我就不会在我的自动化系统中使 运行 失败(竹子)。
因此,我正在寻找一种解决方案,以便在没有主机匹配时抛出退出代码 != 0。
如果主机匹配,添加一个设置事实的播放,然后在第二个播放中检查该事实:
- name: Check hosts
hosts: "{{ target_hosts }}"
gather_facts: no
tasks:
- set_fact:
hosts_confirmed: true
delegate_to: localhost
delegate_facts: true
- name: Verify hosts
hosts: localhost
gather_facts: no
tasks:
- assert:
that: hosts_confirmed | default(false)
- name: The real play
hosts: "{{ target_hosts }}"
# ...
用例: 用户可以提供主机名并触发剧本 运行。如果主机名有错字,我想在 "no hosts matched" 时使完整的剧本 运行 失败。我想让它失败,因为我喜欢检测 Bamboo(我用于 CD/CI)到 运行 剧本的失败。
我做了相当广泛的研究。当没有主机匹配时,剧本存在且退出代码 = 0 似乎是一种想要的行为。 Here is one indication我找到了。我同意一般的行为应该是这样的。
所以我需要对我的用例进行额外检查。我尝试了以下方法:
- name: Deploy product
hosts: "{{ target_hosts }}"
gather_facts: no
any_errors_fatal: true
pre_tasks:
- name: Check for a valid target host
fail:
msg: "The provided host is not knwon"
when: target_hosts not in groups.tomcat_servers
但由于没有主机匹配,剧本不会 运行,没关系,但它也以退出代码 0 结束。这样我就不会在我的自动化系统中使 运行 失败(竹子)。
因此,我正在寻找一种解决方案,以便在没有主机匹配时抛出退出代码 != 0。
如果主机匹配,添加一个设置事实的播放,然后在第二个播放中检查该事实:
- name: Check hosts
hosts: "{{ target_hosts }}"
gather_facts: no
tasks:
- set_fact:
hosts_confirmed: true
delegate_to: localhost
delegate_facts: true
- name: Verify hosts
hosts: localhost
gather_facts: no
tasks:
- assert:
that: hosts_confirmed | default(false)
- name: The real play
hosts: "{{ target_hosts }}"
# ...