我有一些不同名字的小组,比如" 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 - ')"'但它不起作用。 有什么想法吗?
答案 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
进行测试。