首页 > 解决方案 > ansible json_query 如何为缺少的键定义默认值

问题描述

我有一些变量:

  vars:
    foo:
      - {name: "bar", path: "/tmp"}
      - {name: "zob" }
    default: "/home"

我想制作提取名称和路径的 json_query,并且在未定义路径时采用默认值。

我想要的结果是

  - {name: "bar", path: "/tmp"}
  - {name: "zob", path: "/home"}

当未定义键时,json_query 是否有可能定义默认值?

谢谢,拉乌尔

标签: ansiblejson-query

解决方案


merge如果使用jmespath 函数重新定义,以下将合并列表中的每个元素与覆盖现有值的默认哈希映射。这适用path于示例中的 ,但如果需要,您可以添加更多映射。

---
- hosts: localhost
  gather_facts: false

  vars:
    foo:
      - {name: "bar", path: "/tmp"}
      - {name: "zob" }
    foo_defaults:
      path: "/home"

  tasks:
    - debug:
        msg: "{{ foo | json_query(query) }}"
      vars:
        query: >-
          [].merge(`{{ foo_defaults | to_json }}`, @)

这使

PLAY [localhost] ***********************************************************************************************************************************************************************************************************************

TASK [debug] ***************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "name": "bar",
            "path": "/tmp"
        },
        {
            "name": "zob",
            "path": "/home"
        }
    ]
}

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

推荐阅读