迭代从字符串拆分创建的唯一列表

时间:2016-10-26 21:34:08

标签: ansible jinja2

我有一个域列表:

---
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 }}"

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用mapregex_search

来实现这一目标
- debug: msg="Ensure dir for {{ item }}"
  with_items: "{{ domains | map('regex_search','\\w+$') | list | unique }}"

\w+$匹配最后一个单词(即点后面的域尾) 请注意,斜杠是转义的,因为它在双引号内。