在Ansible中,如何对列表应用标量筛选器
我想对列表中的每个元素应用ansible筛选器,然后从中创建一个字符串。假设我有一张清单在Ansible中,如何对列表应用标量筛选器,ansible,jinja2,Ansible,Jinja2,我想对列表中的每个元素应用ansible筛选器,然后从中创建一个字符串。假设我有一张清单 my_files: - /etc/passwd - /etc/group 然后在ansible任务中,我想创建一个字符串,比如“passwd,group”。如果没有过滤,这可以通过jinja语法完成 {{ ",".join(my_files) }} 这将创建一个字符串“/etc/passwd,/etc/group”。但是现在我想对每个元素应用ansible basename过滤器。对于标
my_files:
- /etc/passwd
- /etc/group
然后在ansible任务中,我想创建一个字符串,比如“passwd,group”。如果没有过滤,这可以通过jinja语法完成
{{ ",".join(my_files) }}
这将创建一个字符串“/etc/passwd,/etc/group”。但是现在我想对每个元素应用ansible basename过滤器。对于标量,这就像
{{ /etc/passwd | basename }}
这将生成字符串“passwd”。所以问题是,如何结合这两个操作从列表my_文件生成字符串“passwd,group”?您可以使用map reduce模式来实现这一点。首先使用
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
您可以使用map-reduce模式来实现这一点。首先使用
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
谢谢,正是我想要的!谢谢,正是我想要的!