ansible通过改变键获取值



我想从json中获得值,但其中一个键可以不同。

这里是示例json

{
"json": {
"id": "9758b1e5-442e-4545-9364-45f28477edfb",
"results": [{
"code": 200,
"host": "localhost",
"message": "no change",
"runTime": 1233,
"tenant": "http-validate-2.usa-dc.com"
}],
"traces": {
"http-validate-2.usa-dc.comCurrent": {
"/Common/10.10.100.10": {
"command": "ltm node"
},

"http-validate-2.usa-dc.comDiff": [{
"command": "ltm virtual",
"kind": "D",
"lhs": {
"default": "yes"
},
"lhsCommand": "ltm virtual",
"path": [
"/http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80",
"properties",
"persist",
"/Common/cookie"
],
"rhsCommand": "ltm virtual",
"tags": [
"tmsh"
]
}]
}
}
}

}

my sible playbook

tasks:

- name : deploy json file AS3  to F5
debug:
msg: "{{ lookup('file', 'parse.json') }}"
register: atc_AS3_status

- name: debug
debug:
msg: "{{ atc_AS3_status.msg.json['traces']['.*Diff']}}"

我想到达键"路径"但是上面的关键字"http- valide-2.usa-dc.com不同"可以是不同的,比如"http-validate-3.can-dc.com diffquot;但总是以Diff

结尾

使用json_query,如

- debug:
msg: "{{ json.traces|json_query('*.*[][].path') }}"

应该给出路径列表(可能有更多)

msg:
- - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
- properties
- persist
- /Common/cookie

Q:">我只需要以Diff结尾的键中的路径">

A: JMESPath无法搜索关键通配符,AFAIK。相反,使用select并创建匹配正则表达式的嵌套键列表,例如

- debug:
msg: "{{ json.traces|json_query('*.keys(@)')|flatten|
select('match', '^.*Diff$')|list }}"

msg:
- http-validate-2.usa-dc.comDiff

然后迭代该列表,选择path并连接列表路径,例如

- set_fact:
paths: "{{ paths|d([]) + json.traces|json_query(query) }}"
loop: "{{ json.traces|json_query('*.keys(@)')|flatten|
select('match', '^.*Diff$')|list }}"
vars:
query: '*."{{ item }}"[].path'

给出与正则表达式

匹配的键的路径列表
paths:
- - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
- properties
- persist
- /Common/cookie

最新更新