如果组存在,如何运行ansible playbook?

时间:2018-05-11 19:01:40

标签: ansible

我想知道是否有人找到了一个解决方案,如果库存组未定义或为空,将避免显示任何警告。

我只是想让剧本的一部分运行如果一个团体存在并且不是空的跳过而没有警告如果没有。

请阅读https://github.com/ansible/ansible/issues/35255#issuecomment-388455001并测试备选方案,因为我花了很多时间试图找到解决此问题的方法。

到目前为止,当未定义组时,我无法找到任何方法来避免警告。

2 个答案:

答案 0 :(得分:2)

我有点不确定我是否回答了正确的问题,但现在就去了。我解释"如果一个群体存在且不是空的"表示"当前正在执行的主机属于某个组"。

如果你打算问一些像#34;我可以从当前主机中找出任何其他主机是否属于当前主机不属于的组,"或者"当为某些组定义的主机无法访问时,我可以无错误地运行一个剧本,"那么我担心这不能回答你的问题:)

但是,根据当前主机是否属于某个群组来运行任务可以使用Ansible's default vars groups 之一来完成group_names

以下playbook包含两个任务,一个用于在当前主机属于组debug时运行existent任务,另一个用于在当前主机属于该组时运行调试任务{ {1}}。如输出所示,第一个任务运行,第二个任务不运行。

hosts.yml

nonexistent

playbook.yml

[existent]
localhost ansible_connection=local

输出

- hosts: all
  gather_facts: true

  tasks:
    - name: This command will run.
      debug:
        msg: "The group `existent_1` exists!"
      when:
        - "'existent_1' in groups"

    - name: This command will not run.
      debug:
        msg: "The group `existent_1` exists and this host is in it!"
      when:
        - "'existent_1' in groups"
        - "'existent_1' in group_names"

    - name: This command will run.
      debug:
        msg: "The group `existent_2` exists and this host is in it!"
      when:
        - "'existent_2' in groups"
        - "'existent_2' in group_names"

    - name: This command will not run.
      debug:
        msg: "The group `nonexistent` exists!"
      when:
        - "'nonexistent' in groups"
        - "'nonexistent' in group_names"

答案 1 :(得分:1)

不确定这是否会抑制警告,但应该完成第一部分(“如果有一个组并且不为空,则使剧本的一部分运行 ”):

- hosts: all
  gather_facts: true

  tasks:
  - name: "This command will only run if {{ group_to_test }} is a non-empty group that exists"
    debug:
      msg: The group 'existent' exists and contains hosts!
    when: group_to_test in groups and groups[group_to_test]

进行一次测试,让我知道她是否在压制警告!!

很显然,group_to_test必须替换为常量字符串或设置为变量/事实/默认值。