2017-12-15 4 views
0

Ich habe Probleme beim Versuch, eine Skript-Ausgabe mit Zeilen wie zu formatieren:erstellen dict aus dem Register var

"key1:val1" 

es in einem var-Register, das gibt:

"var.stdout_lines": [ "key1:val1", ] 

And I would like to set_fact from this var to a dictionary like : 
- name: 'set dict fact' 
    set_fact: 
    dict: "{{dict|combine(var.stdout_lines)}}" 

habe ich einen Ausgang wie :

Kennt jemand, wie man meine Skriptausgabe korrekt formatiert, um richtig durch mein dict zu kombinieren?

THKS

Antwort

0

Mehrere Probleme hier:

  1. dict nicht initialisiert wird, so dass es Undefined ist und wenn Sie versuchen, es mit etwas zu verbinden, funktioniert es nicht. Ein erster Schritt ein default Filter zu verwenden, wäre:

    dict: "{{ dict| default({}) | combine(var.stdout_lines) }}" 
    
  2. combine filter ist für die Kombination von Wörterbüchern, aber var.stdout_lines ist eine Liste, kein dict, so dass Sie einen anderen Fehler bekommen würde: „| kombinieren erwartet Wörterbücher, bekam [ u'key1: val1' ]“

eine Lösung, die ich sehe, ist Ihre Zeilen in eine String-Darstellung eines dict zu transformieren, verwenden Sie dann die from_json filter:

- set_fact: 
    dict: "{{ ('{' + (var.stdout_lines | map('regex_replace', '(.*):(.*)', '\"\\1\":\"\\2\"') | join(',')) + '}') | from_json }}" 

Seien Sie vorsichtig: Es behandelt nicht den Fall, wenn Schlüssel oder Werte doppelte Anführungszeichen char " enthält.

Verwandte Themen