2016-09-30 1 views
0

Ich habe Ansible Aufgabe, wo Ausgang registriert werden.
Es ist die Antwort der elastisearch Anfrage von curl/uri Modul aufgerufen.Json-Knoten in Ansible extrahieren und verbinden

Ein Beispiel: { "changed": false, "msg": "All items completed", "results": [ { "_ansible_item_result": true, "_ansible_no_log": false, "changed": false, "content_length": "747", "content_type": "application/json; charset=UTF-8", "invocation": {...}, "item": "content", "json": { "snapshots": [ { "duration_in_millis": 2863, "end_time": "2016-09-25T16:00:05.357Z", "end_time_in_millis": 1474819205357, "failures": [], "indices": [ "content_h_20160817_1155", "content_s_20160817_1159", "content_p_20160817_1158", "content_t_20160909_0451", "content_v_20160909_0454", "content_h_20160909_0431", "content_v_20160817_1201", "content_m_20160817_1157", "content_m_20160909_0438", "content_p_20160909_0443", "content_t_20160817_1200", "content_i_20160817_1156", "content_i_20160909_0434", "content_s_20160909_0447" ], "shards": { "failed": 0, "successful": 28, "total": 28 }, "snapshot": "snapshot_content_20160925_1600", "start_time": "2016-09-25T16:00:02.494Z", "start_time_in_millis": 1474819202494, "state": "SUCCESS", "version": "2.3.3", "version_id": 2030399 } ] }, "msg": "OK (747 bytes)", "redirected": false, "status": 200, "url": "url" }, { "_ansible_item_result": true, "_ansible_no_log": false, "changed": false, "content_length": "526", "content_type": "application/json; charset=UTF-8", "invocation": {...}, "item": "log", "json": { "snapshots": [ { "duration_in_millis": 5002, "end_time": "2016-09-25T16:01:24.174Z", "end_time_in_millis": 1474819284174, "failures": [], "indices": [ "log_i_20160804_0749", "log_p_20160804_0811", "log_v_20160804_0847", "log_m_20160804_0758", "log_h_20160804_0746", "log_t_20160804_0829", "log_s_20160804_0825" ], "shards": { "failed": 0, "successful": 14, "total": 14 }, "snapshot": "snapshot_log_20160925_1600", "start_time": "2016-09-25T16:01:19.172Z", "start_time_in_millis": 1474819279172, "state": "SUCCESS", "version": "2.3.3", "version_id": 2030399 } ] }, "msg": "OK (526 bytes)", "redirected": false, "status": 200, "url": "url" } ] } Als nächstes muss ich nur Indizes [] von jedem Element im Ergebnis erhalten.
Wie kann ich indices[] Array aus allen result[] Knoten in eine Variable extrahieren, um später with_items verwenden zu können?
Danke.

PS. Ich habe invocation Elemente weggelassen, sie sind zu lang.

Antwort

1

Sie möchten vielleicht über map und sum lesen.
Antwort auf Ihre Frage:

curl_res.results | map(attribute='json.snapshots') | sum(start=[]) | map(attribute='indices') | sum(start=[]) 

Sie müssen Listen mit sum zweimal glätten, weil snapshots auch eine Liste ist.

+0

Das, was ich @Konstantin genau gemacht habe, aber nicht eine Idee, die Summe zu verwenden. Danke, lass es mich morgen testen und antworte dir. – antonbormotov

+0

Ohne 'sum' enden Sie mit einer Liste von Listen und können' map' nicht verwenden, um Attribute zu extrahieren. 'sum (start = [])' verkettet innere Listen zu einer flachen Liste. –

+0

Vielen Dank, ich wusste, wie man in Ansible verkettet, funktioniert wie erwartet. – antonbormotov