仅当值存在时才将键值对添加到字典

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) }}"