2017-12-12 5 views
0

ich eine Reihe von Ergebnissen verschmelzen, nachdem ein include_vars mit with_itemsWie eine Reihe von Objekten in jmespath

results: 
- ansible_facts: 
    tag_Cluster_A: 
     name: Thinking cluster 
     words: 
     - Honk 
     - Thonk 
- ansible_facts: 
    tag_Cluster_B: 
     name: Helloing Cluster 
     words: 
     - HOI 
     - HOI HOI 

Durchführung Ich versuche, das Objekt mit den Ergebnissen zu einem flachen Gegenstand zu erhalten, die nur enthält tag_Cluster_* Dinge.

tag_Cluster_A: 
    name: Thinking cluster 
    words: 
    - Honk 
    - Thonk 
tag_Cluster_B: 
    name: Helloing Cluster 
    words: 
    - HOI 
    - HOI HOI 

Die Abfrage results[].ansible_facts Ergebnisse in einem Array wie:
[{tag_Cluster_A:{}},{tag_Cluster_B:{}}], die sich von dem gewünschten Ergebnis Schritt 1 entfernt ist.

Wie schmilzt ich diese zusammen?

+0

@techraf nein, ich möchte tun, was normalerweise in anderen Sprachen so etwas wie "reduzieren" wäre. – Everspace

+0

Also ist es einfach nicht möglich? Ich glaube nicht, dass dies eine doppelte Frage ist, da es eine andere Transformation der Daten als die verknüpfte Frage verlangt, selbst wenn die Antwort auf beide anwendbar ist (gehe um jmespath herum). Der Unterschied zwischen den Fragen ist die Neuabbildung der Schlüssel und Werte, die ich nicht tun möchte. Mit etwas wie '[{a: 1}, {b: 2}]' möchte ich '{a: 1, b: 2}' – Everspace

+0

erzeugen. Ich verstehe nicht, wie man diese Umwandlung innerhalb von jmespath durchführt, weshalb Ich bitte um Hilfe. – Everspace

Antwort

1

Wenn mylist ist [{tag_Cluster_A:{...}},{tag_Cluster_B:{...}}], dann

mydict: "{{ dict(mylist | map('dictsort') | sum(start=[])) }}" 

{tag_Cluster_A:{...},tag_Cluster_B:{...}} sein wird.

In diesem Trick wenden wir dictsort Filter auf jedes Element der ursprünglichen Liste an, dann reduzieren Sie die Liste, um einzelne Liste der Paare zu erhalten, dann wandeln Sie sie wieder in dict um.

+0

Booo, nicht JMESpath ;-) – techraf

+0

Ja. Bis [this] (https://github.com/jmespath/jmespath.py/pull/105) zusammengeführt wird, wird JMESpath bei der Diktatbearbeitung ziemlich reduziert. Oder meine [gepatcht] (https://gist.github.com/berlic/3b733390901625092796c7871d8fc23b) json_query kann mit 'to_entries' /' from_entries' verwendet werden. –

+0

Es ist ein unglücklicher Zustand der Dinge. Ich habe mich entschieden, jetzt ein reduziertes Filter-Plugin zu schreiben, werde es aber überwachen. – Everspace

Verwandte Themen