我有一些群体,有不同的名称,例如" 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
。