Ansible:仅在服务器不在组中时包含任务

时间:2018-04-26 07:20:08

标签: include ansible groupname

我有一些不同名字的小组,比如" 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

我曾经尝试过:" group_names |不搜索(' raw - ')"'但它不起作用。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用几种方法完成此操作。这是一个示例剧本,展示了两种这样的方法。一个使用select而另一个使用搜索。

---
- 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-')

您在这里会看到搜索works on strings而不是列表,因此为什么要加入。

替代方案,您可以使用另一个组。例如,您的广告资源可以添加以下内容。

[raw:children]
db

这可以作为'raw' in group_names进行测试。