【问题标题】:ansible json_query How to define default value to missing keyansible json_query 如何定义缺失键的默认值
【发布时间】:2020-06-26 17:03:29
【问题描述】:

我有一些变量:

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

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

我想要的结果是

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

json_query 中是否有可能在 key 未定义时定义默认值?

谢谢, 拉乌尔

【问题讨论】:

  • 您可以在代码部分使用默认值来定义它,而不是在变量部分定义默认值。但取决于用例,这里没有完全解释。如果您想要具体答案,请编辑问题并提供更多信息。最佳

标签: ansible json-query


【解决方案1】:

如果使用merge jmespath function 重新定义,以下内容会将列表中的每个元素与覆盖现有值的默认哈希映射合并。这适用于示例中的 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  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2020-10-07
    • 2011-08-05
    • 2016-05-08
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多