如果没有主机匹配,如何避免播放剧本?

时间:2018-02-21 08:28:06

标签: ansible bamboo

用例:用户可以提供主机名并触发Playbook运行。如果主机名有拼写错误,我想在#34;没有主机匹配"时失败完整的剧本。我想失败,因为我想检测一下我的竹子(我用于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

但由于没有主机匹配,Playbook将无法运行,这是可以的,但它也以退出代码0结束。这样我就不能在自动化系统(Bamboo)中运行失败。

由于这个原因,我正在寻找一个退出代码的解决方案!当没有主机匹配时,= 0。

1 个答案:

答案 0 :(得分:4)

添加一个可以在主机匹配时设置事实的播放,然后在第二个播放中检查该事实:

- 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 }}"
  # ...