#ansible #ansible-2.x #json-query
#ansible #ansible-2.x #json-запрос
Вопрос:
это необработанные данные, которые я хочу найти с помощью json_query в ansible с keyvalue= 65060 и распечатать соответствующего соседа, может кто-нибудь, пожалуйста, помогите.
пока я получил это:
- name: data manipulate
debug: msg="{{ msnjson | json_query(msnquery) }}"
vars:
msnquery: "[*].AS"
но это просто отображает все КАК ключи, но я ищу именно ключ со значением 65060 и соответствующий соседний ключ.
[
{
"AS": "65060",
"InQ": "0",
"MsgRcvd": "258259",
"MsgSent": "120410",
"Neighbor": "99.99.99.5",
"OutQ": "0",
"Spk": "0",
"StPfxRcd": "1",
"TblVer": "2241",
"UpDown": "2w0d"
},
{
"AS": "64600",
"InQ": "0",
"MsgRcvd": "281828",
"MsgSent": "120498",
"Neighbor": "192.168.100.1",
"OutQ": "0",
"Spk": "0",
"StPfxRcd": "33",
"TblVer": "2241",
"UpDown": "12w5d"
},
{
"AS": "64600",
"InQ": "0",
"MsgRcvd": "281867",
"MsgSent": "120498",
"Neighbor": "192.168.100.2",
"OutQ": "0",
"Spk": "0",
"StPfxRcd": "33",
"TblVer": "2241",
"UpDown": "12w5d"
},
{
"AS": "64600",
"InQ": "0",
"MsgRcvd": "258516",
"MsgSent": "120499",
"Neighbor": "192.168.100.4",
"OutQ": "0",
"Spk": "0",
"StPfxRcd": "19",
"TblVer": "2241",
"UpDown": "5w6d"
}
]
Ответ №1:
Попробуйте
- name: data manipulate
debug: msg="{{ msnjson | json_query(msnquery) }}"
vars:
msnquery: "[?AS=='65060'].Neighbor"
Обновить
Существует несколько элементов с одинаковым значением AS . Может быть целесообразно создать словарь, если вам приходится многократно искать Neighbor по AS . Например,
AS_Neighbors: "{{ [msnjson|json_query(msnquery), []]|
community.general.lists_mergeby('AS', list_merge='append')|
items2dict(key_name='AS', value_name='Neighbor') }}"
msnquery: "[].{AS: AS, Neighbor: [Neighbor]}"
дает
AS_Neighbors:
'64600':
- 192.168.100.1
- 192.168.100.2
- 192.168.100.4
'65060':
- 99.99.99.5
Пример полного сборника заданий для тестирования
- hosts: localhost
vars:
AS_Neighbors: "{{ [msnjson|json_query(msnquery), []]|
community.general.lists_mergeby('AS', list_merge='append')|
items2dict(key_name='AS', value_name='Neighbor') }}"
msnquery: "[].{AS: AS, Neighbor: [Neighbor]}"
msnjson:
- AS: '65060'
InQ: '0'
MsgRcvd: '258259'
MsgSent: '120410'
Neighbor: 99.99.99.5
OutQ: '0'
Spk: '0'
StPfxRcd: '1'
TblVer: '2241'
UpDown: 2w0d
- AS: '64600'
InQ: '0'
MsgRcvd: '281828'
MsgSent: '120498'
Neighbor: 192.168.100.1
OutQ: '0'
Spk: '0'
StPfxRcd: '33'
TblVer: '2241'
UpDown: 12w5d
- AS: '64600'
InQ: '0'
MsgRcvd: '281867'
MsgSent: '120498'
Neighbor: 192.168.100.2
OutQ: '0'
Spk: '0'
StPfxRcd: '33'
TblVer: '2241'
UpDown: 12w5d
- AS: '64600'
InQ: '0'
MsgRcvd: '258516'
MsgSent: '120499'
Neighbor: 192.168.100.4
OutQ: '0'
Spk: '0'
StPfxRcd: '19'
TblVer: '2241'
UpDown: 5w6d
tasks:
- debug:
var: AS_Neighbors
Комментарии:
1. потрясающе, это сработало. Я подумал, что сначала нам нужно исключить список, а затем сопоставить ключ. большое вам спасибо, оценили!