仅当值存在时才将键值对添加到字典
Add key-value pair to a dictionary only if value is present
当且仅当值之前是 declared/found 时,我想添加一个键值对。如果没有变量的声明,那么我不想在字典中添加键值对。
---
- hosts: localhost
tasks:
- name: Set fruits
set_fact:
fruits:
name: "Apple"
color: "Red"
size: "Medium"
# - name: set place
# set_fact:
# place: "Earth"
- name: Add place if present
set_fact:
fruits: "{{ fruits | combine ({ 'place' : place }) }}"
- debug:
msg: "{{ fruits }}"
以上脚本的输出如下:
ok: [localhost] => {
"msg": "{'name': 'Apple', 'color': 'Red', 'size': 'Medium', 'place': AnsibleUndefined}"
}
预期输出:
ok: [localhost] => {
"msg": "{'name': 'Apple', 'color': 'Red', 'size': 'Medium'}"
}
应该进行哪些更改才能获得预期的输出?任何帮助,将不胜感激。谢谢。
编辑:基本上,我将更新的字典('fruits')作为参数传递给另一个剧本。是否有可能实现此内联(通过在更新 'fruits' 的命令中添加一些命令)而不是使用 'when' 语句添加条件检查?
设置default to omit。如果变量place没有定义
,该操作将被省略
- name: Add place if present
set_fact:
fruits: "{{ fruits|combine({'place' : place|d(omit)}) }}"
问:“如果未定义变量 place,请不要删除已经存在的 'place' 字段。”
答:试试这个。如果另有定义,则使用默认值 fruit.place 省略
- name: Add place if present
set_fact:
fruits: "{{ fruits|combine({'place' : _place}) }}"
vars:
_place: "{{ place|d(fruit.place)|d(omit) }}"
当且仅当值之前是 declared/found 时,我想添加一个键值对。如果没有变量的声明,那么我不想在字典中添加键值对。
---
- hosts: localhost
tasks:
- name: Set fruits
set_fact:
fruits:
name: "Apple"
color: "Red"
size: "Medium"
# - name: set place
# set_fact:
# place: "Earth"
- name: Add place if present
set_fact:
fruits: "{{ fruits | combine ({ 'place' : place }) }}"
- debug:
msg: "{{ fruits }}"
以上脚本的输出如下:
ok: [localhost] => {
"msg": "{'name': 'Apple', 'color': 'Red', 'size': 'Medium', 'place': AnsibleUndefined}"
}
预期输出:
ok: [localhost] => {
"msg": "{'name': 'Apple', 'color': 'Red', 'size': 'Medium'}"
}
应该进行哪些更改才能获得预期的输出?任何帮助,将不胜感激。谢谢。
编辑:基本上,我将更新的字典('fruits')作为参数传递给另一个剧本。是否有可能实现此内联(通过在更新 'fruits' 的命令中添加一些命令)而不是使用 'when' 语句添加条件检查?
设置default to omit。如果变量place没有定义
,该操作将被省略 - name: Add place if present
set_fact:
fruits: "{{ fruits|combine({'place' : place|d(omit)}) }}"
问:“如果未定义变量 place,请不要删除已经存在的 'place' 字段。”
答:试试这个。如果另有定义,则使用默认值 fruit.place 省略
- name: Add place if present
set_fact:
fruits: "{{ fruits|combine({'place' : _place}) }}"
vars:
_place: "{{ place|d(fruit.place)|d(omit) }}"