我在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 创建第二个字典,其中使用以下过滤器修改值键? | 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 }
任何提示将不胜感激!谢谢。
您可以将所需的元素生成为临时事实,然后从注册变量中提取它们作为单个列表。
下面是一个示例:
---
- 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 }}"
在更一般的方式中,您可以仅生成附加值,并将原始项与其他生成的属性合并。有关详细信息,请参阅此帖子。