没有主机匹配时,如何避免剧本运行?

MBu*_*eld 2 bamboo ansible

用例:用户可以提供一个主机名,并会触发一本剧本的运行。如果主机名有错字,当“没有主机匹配”时,我想使完整剧本无法运行。我想使它失败,因为我想检测出Bamboo失败(我用于CD / CI)来运行剧本。

我已经做了相当广泛的研究。当没有主机匹配时,存在退出代码= 0的剧本似乎是一种需要的行为。这是我发现的一种迹象。我同意一般行为应该是这样的。

因此,对于我的用例,需要额外检查。我尝试了以下方法:

- 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
Run Code Online (Sandbox Code Playgroud)

但是由于没有主机匹配,因此剧本不会运行,这没关系,但它也以退出代码0结尾。这样,我就不会在自动化系统(Bamboo)中使运行失败。

因此,我正在寻找一种解决方案,以在没有主机匹配时抛出退出代码!= 0。

tec*_*raf 5

添加一个将在主机匹配的情况下设置事实的播放,然后在第二个播放中检查该事实:

- 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 }}"
  # ...
Run Code Online (Sandbox Code Playgroud)