我想对列表中的每个元素应用ansible过滤器,然后从中创建一个字符串。所以可以说我有一个清单
my_files:
- /etc/passwd
- /etc/group
然后在一个烦人的任务中,我想创建一个像“ passwd,group”的字符串。如果不进行过滤,则可以使用jinja语法
{{ ",".join(my_files) }}
将创建一个字符串“ / etc / passwd,/ etc / group”。但是现在我想将ansible basename过滤器应用于每个元素。对于标量,它的作用类似于
{{ /etc/passwd | basename }}
将生成字符串“ passwd”。所以问题是,如何结合这两个操作以从列表my_files中生成字符串“ passwd,group”?
答案 0 :(得分:1)
您可以使用地图缩小模式来实现。您将首先使用basename
过滤器映射每个条目,然后加入结果列表。
以下剧本演示了如何实现:
- hosts: localhost
gather_facts: false
vars:
my_files:
- /etc/passwd
- /etc/group
tasks:
- name: MapReduce
debug:
msg: "{{ my_files | map('basename') | list | join(',')}}" # results in passwd,group