0

我有一些名称不同的组,例如“raw-webservers”、“raw-db”……现在,如果服务器位于以“raw-*”开头的组中,我想包含一个剧本(有效)如果服务器不在以“raw-”开头的组中,则包括另一个剧本。通过仅指定组的一个子集,我无法弄清楚如何做最后一件事。

- include_tasks: change_password.yml
  when: "'raw-' not in group_names"   # works only with complete group names


- include_tasks: change_password_raw.yml
  when: "group_names | search('raw-')"   # works

我试过'when:“group_names | not search('raw-')”',但它不起作用。有任何想法吗?

4

1 回答 1

0

您可以使用几种方法来做到这一点。这是一个示例剧本,展示了两种这样的方法。一个使用选择,另一个使用搜索。

---
- hosts: all
  gather_facts: no
  tasks:
    - debug:
        msg: "hello world using select"
      delegate_to: 127.0.0.1
      when: group_names | select('match','raw-*') | list | length  > 0

    - debug:
        msg: "hello world using search"
      delegate_to: 127.0.0.1
      when: group_names | join(" ") is search('raw-')

您将在此处看到搜索适用于字符串而不是列表,因此为什么要加入。

作为替代方案,您可以为此使用另一个组。例如,您的库存可以添加以下内容。

[raw:children]
db

这可以测试为'raw' in group_names.

于 2018-04-26T13:30:23.347 回答