Ansible YAML 追加到键下的列表(?)
Ansible YAML append to list under a key (?)
我有以下名为 groceries
的角色变量:
groceries:
fruits:
- name: 'Apples'
cost: 100
- name: 'Grapes'
cost: 200
vegetables:
- name: 'Potatoes'
cost: 120
toiletries:
- name: 'Toothpaste'
cost: 20
这些在模板中使用。
根据主机 and/or 组,我想追加额外的 vegetables
:
groceries_additional:
vegetables:
- brand: 'Aubergine'
cost: 100
或追加fruits
:
groceries_additional:
fruits:
- name: 'Blackberries'
cost: 1000
我不想更新模板。有什么方法可以将 groceries_additional
附加到 groceries
中吗?这是我的目标结果:
groceries:
fruits:
- name: 'Apples'
cost: 100
- name: 'Grapes'
cost: 200
- name: 'Blackberries'
cost: 1000
vegetables:
- name: 'Potatoes'
cost: 120
- brand: 'Aubergine'
cost: 100
toiletries:
- name: 'Toothpaste'
cost: 20
我试图通过以下方式“合并”到 groceries
,但没有成功(groceries
根本没有改变)。
- name: Merge
set_fact:
groceries: '{{ groceries_additional | combine(base_groceries, recursive=True) }}'
vars:
base_groceries: '{{ groceries | default({}) }}'
when: groceries_additional is defined
使用选项 list_merge,例如
- set_fact:
groceries: "{{ groceries|combine(groceries_additional,
recursive=True,
list_merge='append') }}"
vars:
groceries_additional:
vegetables:
- brand: 'Aubergine'
cost: 100
给予
groceries:
fruits:
- cost: 100
name: Apples
- cost: 200
name: Grapes
toiletries:
- cost: 20
name: Toothpaste
vegetables:
- cost: 120
name: Potatoes
- brand: Aubergine
cost: 100
以及随之而来的
- set_fact:
groceries: "{{ groceries|combine(groceries_additional,
recursive=True,
list_merge='append') }}"
vars:
groceries_additional:
fruits:
- name: 'Blackberries'
cost: 1000
给出了预期的结果
groceries:
fruits:
- cost: 100
name: Apples
- cost: 200
name: Grapes
- cost: 1000
name: Blackberries
toiletries:
- cost: 20
name: Toothpaste
vegetables:
- cost: 120
name: Potatoes
- brand: Aubergine
cost: 100
我有以下名为 groceries
的角色变量:
groceries:
fruits:
- name: 'Apples'
cost: 100
- name: 'Grapes'
cost: 200
vegetables:
- name: 'Potatoes'
cost: 120
toiletries:
- name: 'Toothpaste'
cost: 20
这些在模板中使用。
根据主机 and/or 组,我想追加额外的 vegetables
:
groceries_additional:
vegetables:
- brand: 'Aubergine'
cost: 100
或追加fruits
:
groceries_additional:
fruits:
- name: 'Blackberries'
cost: 1000
我不想更新模板。有什么方法可以将 groceries_additional
附加到 groceries
中吗?这是我的目标结果:
groceries:
fruits:
- name: 'Apples'
cost: 100
- name: 'Grapes'
cost: 200
- name: 'Blackberries'
cost: 1000
vegetables:
- name: 'Potatoes'
cost: 120
- brand: 'Aubergine'
cost: 100
toiletries:
- name: 'Toothpaste'
cost: 20
我试图通过以下方式“合并”到 groceries
,但没有成功(groceries
根本没有改变)。
- name: Merge
set_fact:
groceries: '{{ groceries_additional | combine(base_groceries, recursive=True) }}'
vars:
base_groceries: '{{ groceries | default({}) }}'
when: groceries_additional is defined
使用选项 list_merge,例如
- set_fact:
groceries: "{{ groceries|combine(groceries_additional,
recursive=True,
list_merge='append') }}"
vars:
groceries_additional:
vegetables:
- brand: 'Aubergine'
cost: 100
给予
groceries:
fruits:
- cost: 100
name: Apples
- cost: 200
name: Grapes
toiletries:
- cost: 20
name: Toothpaste
vegetables:
- cost: 120
name: Potatoes
- brand: Aubergine
cost: 100
以及随之而来的
- set_fact:
groceries: "{{ groceries|combine(groceries_additional,
recursive=True,
list_merge='append') }}"
vars:
groceries_additional:
fruits:
- name: 'Blackberries'
cost: 1000
给出了预期的结果
groceries:
fruits:
- cost: 100
name: Apples
- cost: 200
name: Grapes
- cost: 1000
name: Blackberries
toiletries:
- cost: 20
name: Toothpaste
vegetables:
- cost: 120
name: Potatoes
- brand: Aubergine
cost: 100