我有一个域列表:
---
domains:
- foo.bar
- baz.bar
我有任务,我需要迭代这些域,提取域尾,创建这些尾部的唯一列表,然后创建由这些尾部命名的目录。
像这样的东西,但AFAIK jinja2不支持列表理解:
---
- name: Ensure all directories exist
file:
path: "/tmp/sandbox/{{ item }}"
state: directory
with_items: "[domain.split('.')[-1] for domain in domains] | unique"
是否可以或者我是否需要创建自定义jinja2过滤器?这有用吗?
---
- name: Ensure all directories exist
file:
path: "/tmp/sandbox/{{ item }}"
state: directory
with_items: "{{ domain_tails | my_custom_filter }}"
谢谢!
答案 0 :(得分:2)
您可以使用map
和regex_search
:
- debug: msg="Ensure dir for {{ item }}"
with_items: "{{ domains | map('regex_search','\\w+$') | list | unique }}"
\w+$
匹配最后一个单词(即点后面的域尾)
请注意,斜杠是转义的,因为它在双引号内。