我在ansible中有以下词典:
finder_expand_infopane:
- { name: General , value: yes }
- { name: MetaData , value: yes }
- { name: OpenWith , value: yes }
- { name: Comments , value: no }
- { name: Preview , value: no }
- { name: Privileges , value: yes }
如何使用set_fact创建第二个dict,其中使用以下过滤器修改值键?
| bool | string() | lower
所以我需要的这个词应该是这样的:
finder_expand_infopane_parsed:
- { name: General , value: true }
- { name: MetaData , value: true }
- { name: OpenWith , value: true }
- { name: Comments , value: false }
- { name: Preview , value: false }
- { name: Privileges , value: true }
任何提示将不胜感激!感谢。
答案 0 :(得分:0)
您可以生成必需的元素作为临时事实,然后从注册变量中将它们作为单个列表提取。
以下是一个例子:
---
- hosts: localhost
gather_facts: no
vars:
finder_expand_infopane:
- { name: General , value: yes }
- { name: MetaData , value: yes }
- { name: OpenWith , value: yes }
- { name: Comments , value: no }
- { name: Preview , value: no }
- { name: Privileges , value: yes }
tasks:
- set_fact:
tmp_item:
name: "{{ item.name }}"
value: "{{ item.value | bool | string() | lower }}"
register: tmp_items
with_items: "{{ finder_expand_infopane }}"
- set_fact:
res: "{{ tmp_items.results | map(attribute='ansible_facts.tmp_item') | list }}"
- debug:
msg: "{{ res }}"
以更一般的方式,您只能生成其他值,并将原始项目与其他生成的属性合并。有关详细信息,请参阅this post。