我搜索、扫描并尝试了多种解决方案,但没有找到合适的解决方案。这看起来是一个简单的操作。给定(例如)用户名和权限的 Ansible 变量,我想派生文件名(用于模板)以应用于每个组合。
过于简单的例子:
- task: user printing access
vars:
useraccess:
superdude:
- lpr
- lpc
- lpadmin
nonprivuser:
- lpr
loop: # I'm at a loss
debug:
msg: "{{ some jinja2 expression using item transform }}""
我想要的结果
loop
以及任何转换/过滤器都应该像我指定的那样:
- task: user printing access
vars:
useraccess:
- superdude/lpr
- superdude/lpc
- superdude/lpadmin
- nonprivuser/lpr
loop: "{{ useraccess }}"
debug:
msg: "{{ item }}"
我尝试过
map
、product
、dictitem
和其他一些,但尚未成功。
一旦您在字典上使用
dict2items
,您就有了 key
和 value
属性。由于您的 value
是一个列表,因此您现在可以在其上使用 subelements
过滤器。
给定任务:
- set_fact:
folders: "{{ folders | default([]) + [item.0.key ~ '/' ~ item.1] }}"
loop: "{{ useraccess | dict2items | subelements('value') }}"
loop_control:
label: "{{ item.0.key }}/{{ item.1 }}"
vars:
useraccess:
superdude:
- lpr
- lpc
- lpadmin
nonprivuser:
- lpr
这将为您提供列表:
folders:
- superdude/lpr
- superdude/lpc
- superdude/lpadmin
- nonprivuser/lpr