如何操作字典的键值

时间:2018-01-24 12:33:54

标签: ansible jinja2

我在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 }

任何提示将不胜感激!感谢。

1 个答案:

答案 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