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
我有一个列表,是一个字典列表,每个字典只包含一个条目:
- 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