如何操作字典的键值



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

在更一般的方式中,您可以仅生成附加值,并将原始项与其他生成的属性合并。有关详细信息,请参阅此帖子。

最新更新