如何将Ansible中复杂的列表字典变量转换为简单列表
解决Ansible嵌套字典转用户/权限格式列表的问题
方案1:在Loop中直接转换
无需提前生成完整列表,通过dict2items+subelements过滤器直接展开嵌套结构,再拼接字符串:
- task: user printing access vars: useraccess: superdude: - lpr - lpc - lpadmin nonprivuser: - lpr loop: "{{ useraccess | dict2items | subelements('value') }}" debug: msg: "{{ item.0.key }}/{{ item.1 }}"
dict2items:将原字典转换为包含key(用户名)和value(权限列表)的字典列表subelements('value'):遍历每个用户的权限列表,把单个权限拆分为独立条目,此时item结构为[用户信息字典, 单个权限]item.0.key提取用户名,item.1提取对应权限,拼接成用户名/权限格式
方案2:提前生成目标列表再Loop
如果需要先得到你期望的格式列表,可通过Jinja2模板生成:
- task: user printing access vars: useraccess: superdude: - lpr - lpc - lpadmin nonprivuser: - lpr formatted_useraccess: >- {% set result = [] %} {% for username, perms in useraccess.items() %} {% for perm in perms %} {% do result.append(username ~ '/' ~ perm) %} {% endfor %} {% endfor %} {{ result }} loop: "{{ formatted_useraccess }}" debug: msg: "{{ item }}"
这段代码会先遍历原字典的每个用户和对应权限,拼接成目标格式后存入formatted_useraccess,之后直接循环该列表即可。
内容的提问来源于stack exchange,提问作者RoUS
相关产品推荐
相关产品推荐

