2015-03-10 2 views
6

Ich habe eine spezifische ansible Variablenstruktur, die ich von der Vault in eine YAML-Datei auf meinen Hosts bekommen möchte.Ansible schreibt Variablen in die YAML-Datei

Ermöglicht eine Struktur wie folgt annehmen:

secrets: 
    psp1: 
    username: this 
    password: that 
    secret_key: 123 
    ... 

Ich brauche so etwas wie eine „generische“ Vorlage zur Ausgabe von was auch immer „Geheimnisse“ im Moment enthält, da der Inhalt fast vollständig auf der aktuellen Umgebung ändert.

Die einfachste Lösung, die ich die ganze Struktur in einer Vorlage wie diese Ausgabe ist denken kann:

# config/secrets.yml 
{{ secrets | to_yaml }} 

Aber die jinja2 to_yaml Filter nur „yamlify“ ist die erste Ebene, sind tiefer Verschachtelungen in json ausgegeben .

Kann ich dieses Problem irgendwie umgehen? Gibt es einen einfacheren Weg, um das zu erreichen, was ich will?

Danke für jede Hilfe!

+0

außer Kraft setzen kann JSON ist eine gültige Teilmenge von YAML, so dass Sie immer noch YAML bekommen. – jwodder

+0

@jwodder Arg! Natürlich hast du recht. Ich weiß nicht, warum ich diese Tatsache immer übersehe. Vielen Dank. –

Antwort

12
  1. Wie jwodder sagte, ist es gültig.
  2. Wenn Sie to_yaml (anstelle von to_nice_yaml) verwenden, haben Sie eine ziemlich alte Installation von ansible, es ist Zeit für ein Upgrade.
  3. Verwenden to_nice_yaml
  4. Es ist möglich, eigene kwargs passieren Funktionen zu filtern, die sie in der Regel zu Grunde liegenden Python-Modul Aufruf weitergeben. Wie this one für Ihren Fall. So etwas wie:

    {{ secrets | to_nice_yaml(width=50, explicit_start=True, explicit_end=True) }} 
    

    einzige Haken ist, dass Sie nicht indent=4, allow_unicode=True, default_flow_style=False

+0

das hat sich super für mein playbook für elasticsearch ausgearbeitet, die gesamte config aus einem array ausgegeben –

+1

Es ist kein Formatierungsfehler, es ist eine Abschriftenfunktion. Code in einem Listenelement muss doppelt eingerückt sein. –

+0

Beachten Sie, dass "Einzug" jetzt überschrieben werden kann, zumindest ab Ansible 2.2.0 (Ich verwende es, um 2 Leerzeichen einzufügen, um Codierungsstandards für ein Projekt zu folgen). Siehe: https://github.com/ansible/ansible/pull/17085 – geerlingguy