it-swarm.com.de

Wie spezifiziere ich einen Listenwert als Variable in einer sichtbaren Inventardatei?

Ich brauche so etwas wie (ansible Inventardatei):

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

Ansible erkennt jedoch 'locales' nicht als Liste.

40
rmuller

Sie können eine Liste oder ein Objekt wie folgt übergeben:

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'
81

Bei komplexen Variablen ist es am besten, sie in einer Host_vars-Datei und nicht in der Inventardatei zu definieren, da Host_vars-Dateien die YAML-Syntax unterstützen.

Erstellen Sie ein Host_vars/127.0.0.1 Datei mit folgendem Inhalt:

timezone: Europe/Amsterdam
locales:
    - en_US
    - nl_NL
23
Lorin Hochstein

Rylers Antwort ist in diesem speziellen Fall gut, aber ich hatte Probleme mit anderen Variationen des Vorlagenmoduls.

[example]
127.0.0.1 timezone="Europe/Amsterdam" locales='["en_US", "nl_NL"]'

Ist sein ursprüngliches Beispiel und funktioniert gut.

Die folgenden Varianten funktionieren mit Vorlage. Wenn es sich um eine Zeichenfolge handelt, müssen Sie grundsätzlich daran denken, die internen Anführungszeichen zu verwenden, da sonst die gesamte Struktur als einzelne Zeichenfolge analysiert wird. Wenn es nur Zahlen oder "Wahr" oder "Falsch" sind (nicht "Ja"), ist alles in Ordnung. In dieser Variante könnte ich nicht mit Vorlage arbeiten, wenn es externe Anführungszeichen hätte.

Ich habe nicht ausführlich geprüft, welche internen Use Cases sie ausführen und welche nicht, außer dem Vorlagenmodul.

Ich verwende Ansible 2.2.1.

[example:vars]
# these work
myvar1=["foo", "bar"]
myvar2=[1,2]
myvar3=[True,False]

# These fail, they get interpreted as a single string.
myvar4=[yes, no]
myvar5=[foo,bar]
myvar6='["foo", "bar"]'
10
Sparky

sie können Split versuchen

#inventory file
[example]
127.0.0.1 timezone="Europe/Amsterdam" locales="en_US","nl_NL"

#role file
---
- debug: msg="{{ item }}"
  with_items: locales.split(',')
6
jollychang