ansible json_query 如何定义缺失键的默认值
ansible json_query How to define default value to missing key
我有一些变量:
vars:
foo:
- {name: "bar", path: "/tmp"}
- {name: "zob" }
default: "/home"
我想让 json_query 提取名称和路径,并且在未定义路径时采用默认值。
我想要的结果是
- {name: "bar", path: "/tmp"}
- {name: "zob", path: "/home"}
是否可以在 json_query 中定义键未定义时的默认值?
谢谢,
拉乌尔
如果使用 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
我有一些变量:
vars:
foo:
- {name: "bar", path: "/tmp"}
- {name: "zob" }
default: "/home"
我想让 json_query 提取名称和路径,并且在未定义路径时采用默认值。
我想要的结果是
- {name: "bar", path: "/tmp"}
- {name: "zob", path: "/home"}
是否可以在 json_query 中定义键未定义时的默认值?
谢谢, 拉乌尔
如果使用 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