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

迈克尔·霍勒

用例:用户可以提供一个主机名,并会触发一个Playbook运行。如果主机名有错字,当“没有主机匹配”时,我想使完整剧本无法运行。我想使它失败,因为我想检测出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

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

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

Techraf

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Ansible剧本返回:没有主机匹配

Ansible:没有主机匹配

没有主要方法时程序如何运行

如何在没有主机文件的情况下运行Ansible

当“匹配”没有匹配项时,如何避免破坏JavaScript?

Ansible问题:使用ansible将清单中的所有主机作为列表打印,并拒绝运行该剧本的主机IP?

Ansible-运行剧本时如何控制主机的顺序

运行Ansible剧本时缺少主机信息

如何从剧本的“任务”中排除主机,我将在运行剧本时从用户那里获取“主机名”作为参数

仅在剧本没有问题的情况下才如何运行Ansible剧本?

MapSupportFragment-IllegalStateException-没有主机

当Docker运行时,KVM客户端没有带有主机桥的dhcp

没有主方法如何运行Java程序?

docker在没有主机卷的情况下运行本地脚本

在没有主机操作系统的情况下运行docker?

PostgreSQL +如何打印所有主机

如何从所有主机访问入口?

运行仅影响主机之一的剧本时出错

如何在没有主机编译器的情况下创建Cuda模块

如何在组中包含所有主机的所有主机密钥

没有主机服务器的端口转发

没有主机名的SSL证书

kube-dns getsockopt没有主机路由

在没有主机文件的Windows上阻止网站

如果没有主机名出现错误

连接到 Redshift 集群时出错 - Npgsql.PostgresException: 28000: 没有主机的 pg_hba.conf 条目

具有网络接口但没有主机的容器,如何将eth0暴露给容器

如果一次播放中的所有主机都失败,Ansible 会停止整个剧本

没有主要功能的情况下,该cpp代码如何运行?