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



我有一些群体,有不同的名称,例如" raw-webservers"," raw-db",...现在,如果服务器位于" raw-*"(Works(的组中,我想包括一本剧本,如果服务器不在" 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 | not search('raw-'("'但它不起作用。有什么想法吗?

您可以使用一些方法来执行此操作。这是一本示例剧本,显示了两种此类方法。一个使用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-')

您会在这里看到搜索在字符串上可行而不是列表,因此为什么加入。

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

[raw:children]
db

可以将其测试为'raw' in group_names

最新更新