Pe scurt, puteți obține rezultatul cu o singură expresie fără bucle.
Următorul manual de joc:
---
- gazde: localhost
gather_facts: false
vars:
# Datele dvs. originale pe o singură linie pentru lizibilitate
result_clusters:
stdout: >-
{"clusters":{"Cluster_1":{"hosts":[{"folder":"/path","name":"host1.domain.com"},{"folder":"/path"," name":"host2.domain.com"}]},"Cluster_2":{"hosts":[{"folder":"/path","name":"host3.domain.com"},{"folder ":"/path","name":"host4.domain.com"}]}}}
sarcini:
- nume: obține rezultatul așteptat din datele json într-o singură sarcină
vars:
interogare: >-
[].{nume: cheie, gazde: join(', ', value.hosts[].name)}
clustere: „{{ (result_clusters.stdout | from_json).clusters }}”
depanare:
msg: „{{ clustere | dict2items | json_query(interogare) }}”
Oferă:
PLAY [localhost] ************************************************ ********
SARCINA [obține rezultatul așteptat din datele json într-o singură sarcină] *********
ok: [localhost] => {
"msg": [
{
„hosts”: „host1.domain.com, host2.domain.com”,
"name": "Cluster_1"
},
{
„hosts”: „host3.domain.com, host4.domain.com”,
"name": "Cluster_2"
}
]
}
JOACĂ RECAPITULARE ************************************************ ************
localhost: ok=1 schimbat=0 inaccesibil=0 eșuat=0 omis=0 salvat=0 ignorat=0
Notă: deși cele de mai sus oferă foarte precis rezultatul pe care l-ați cerut, bănuiesc puternic că căutați un rezultat ușor diferit. Înlocuirea interogării de mai sus cu:
interogare: >-
[].{nume: cheie, gazde: value.hosts[].name}
va da asta in schimb:
SARCINA [obține rezultatul așteptat din datele json într-o singură sarcină] ************************************ **************************************************** **************************************************** **********************************
ok: [localhost] => {
"msg": [
{
„gazde”: [
„host1.domain.com”,
„host2.domain.com”
],
"name": "Cluster_1"
},
{
„gazde”: [
„host3.domain.com”,
„host4.domain.com”
],
"name": "Cluster_2"
}
]
}