Verwenden Sie mehrere var-Dateien in ansible-Rolle

8

Eine meiner Rollen hat zwei verschiedene Variablentypen. Man ist öffentlich (Dinge wie Paketversionen und andere gutartige Informationen). Diese können ohne Bedenken an SCM übergeben werden. Es erfordert auch einige private Informationen (wie API-Schlüssel und andere geheime Informationen). Ich verwende ansible-vault , um geheime Informationen zu verschlüsseln. Meine Lösung war vars/main.yaml für pulic und vars/vault.yml für die verschlüsselten privaten Informationen.

Ich bin auf ein Problem gestoßen und bin nicht sicher, was hier die beste Methode oder die beste Lösung ist. Es scheint, dass ansible nur die Datei vars/main.yml lädt. Natürlich möchte ich die öffentlichen Informationen nicht verschlüsseln, also suchte ich nach einer Lösung. Bisher war die einzige Lösung (die ich im IRC vorgeschlagen habe), group_vars/all/vault.yml zu erstellen und alle Variablen mit dem Rollennamen zu versehen. Das funktioniert, weil ansible scheinbar alles unter group_vars rekursiv lädt. Dies funktioniert, scheint aber organisatorisch falsch zu sein, da die Variablen für eine spezifische Rolle und nicht "global universell wahr" sind. Ich habe auch versucht, include: vars/vault.yml in vars/main.yml zu setzen, aber das hat nicht funktioniert.

Gibt es einen richtigen Weg, dies zu tun?

    
ahawkins 21.03.2016, 15:01
quelle

2 Antworten

4

Als allererste Aufgabe in Ihrer Rolle könnten Sie eine include_vars Aufgabe haben.

%Vor%

Ich habe es noch nie probiert, aber laut den Dokumenten verschlüsselte Dateien können mit dem include_vars Modul verwendet werden.

  

Die Tresor-Funktion kann alle von Ansible verwendeten strukturierten Datendateien verschlüsseln. Dies kann Inventarvariablen "group_vars /" oder "host_vars /", Variablen, die von "include_vars" geladen werden, oder "vars_files" [...]

sein
    
udondan 21.03.2016 15:18
quelle
4

Die Verwendung von Vault ist eine gute Idee. Aber du solltest das nicht in einer Rolle machen.

Der Grund ist, dass Ihre Rolle nur eine Variable und ihren Standardwert deklariert. Ein Playbook verwendet dies oder legt einen Wert fest. Wenn eine Variable privat ist, sollten Sie die Variable wie erforderlich deklarieren, jedoch ohne einen Standardwert. Wenn also jemand Ihre Rolle benutzt, muss er die Variable deklarieren, damit sie ausgeführt wird.

Eine Lösung, nach einer erforderlichen Variable zu fragen, ist eine einfache Bedingung:

%Vor%

Die Handhabung der verschlüsselten Vault-Variablen erfolgt also auf Playbook-Ebene. Es ist ein Implementierungsdetail, das keine Rolle spielen sollte.

    
el_wichtel 21.03.2016 19:35
quelle

Tags und Links