Ansible,如何将字典附加到字典列表

Ansible, how to append dict to list of dicts

我有一个列表,是一个字典列表,每个字典只包含一个条目:

  - name: Create list
    set_fact:
      org_list:
        - "Version": "project_version"
        - "LastUpdate": "project_last_update"
        - "Name": "project_name"
        - "Project": "my_project"
        - "Owner": "project_owner"
        - "Purpose": "project_purpose"
        - "CreatedDate": "project_created_date"

我想附加一些将从 JSON 中动态提取的字典项,例如:

  - name: Example of extracted additional_info list
    set_fact:
      additional_info:
        - "name": "name_1"  
        - "name": "name_2"
        - "name": "name_3"
        - "name": "name_4"
        - "name": "name_5"

我开始于:

  - name: Create db list
    set_fact:
        db_list: "{{ db_list | default([]) | combine({ db_key : db_value  }) }}"
    vars:
        db_key: "{{ 'data_base_' + item.value }}"
        db_value: "{{ item.value }}"
    with_dict: "{{ additional_info }}"
    when: additional_info is defined  and item.key == 'name'
    
        
  - name: Append to org_list
    set_fact:
        org_list: "{{ org_list | default([]) + [item] }}"
    with_dict: "{{ db_list }}"

但是我得到的结果是:

    org_list:
    - Version: project_version
    - LastUpdate: project_last_update
    - Name: project_name
    - Project: my_project
    - Owner: project_owner
    - Purpose: project_purpose
    - CreatedDate: project_created_date
    - key: data_base_name_1
      value: name_1
    - key: data_base_name_2
      value: name_2
    - key: data_base_name_3
      value: name_3
    - key: data_base_name_4
      value: name_4
    - key: data_base_name_5
      value: name_5

我想要的结果是:

    org_list:
    - Version: project_version
    - LastUpdate: project_last_update
    - Name: project_name
    - Project: my_project
    - Owner: project_owner
    - Purpose: project_purpose
    - CreatedDate: project_created_date
    - data_base_name_1: name_1
    - data_base_name_2: name_2
    - data_base_name_3: name_3
    - data_base_name_4: name_4
    - data_base_name_5: name_5

我的列表中不能有 'key' 和 'value' 关键字,当我尝试格式化这些项目时,它们的类型变成了 'str',而不是我想要的 'dict' .

这部剧完成了任务,它只是将项目添加到列表中:

- name: "tips2"
  hosts: localhost
  
  tasks: 
    - name: Create list
      set_fact:
        org_list:
          - "Version": "project_version"
          - "LastUpdate": "project_last_update"
          - "Name": "project_name"
          - "Project": "my_project"
          - "Owner": "project_owner"
          - "Purpose": "project_purpose"
          - "CreatedDate": "project_created_date"  
    - name: Example of extracted additional_info list
      set_fact:
        additional_info:
          - "name": "name_1"  
          - "name": "name_2"
          - "name": "name_3"
          - "name": "name_4"
          - "name": "name_5"

    - name: Add extracted additional_info to original list
      set_fact:
        org_list: "{{ org_list | default([]) + [{_val: item.name}] }}"
      loop: "{{ additional_info }}"
      vars:
        _val: "data_base_{{ item.name }}"
  
    - debug: var=org_list

yaml 格式的结果:

org_list:
- Version: project_version
- LastUpdate: project_last_update
- Name: project_name
- Project: my_project
- Owner: project_owner
- Purpose: project_purpose
- CreatedDate: project_created_date
- data_base_name_1: name_1
- data_base_name_2: name_2
- data_base_name_3: name_3
- data_base_name_4: name_4
- data_base_name_5: name_5