ansible - Variable innerhalb der Variable

8

Ansible 1.9.2 Version.

Unterstützt Ansible die variable Erweiterung innerhalb einer Variablen, während sie ausgewertet wird.

Ich habe eine Aufgabe, um 3 Zip-Dateien von Artifactory herunterzuladen.

Anstatt 3 separate Aufgaben innerhalb der Rolle zu schreiben, habe ich die Schleife von ansible im Playbook verwendet. Im Standard / main.yml der Ansible-Rolle sind alle erforderlichen Variablen für die Rolle definiert / verfügbar, d. H. Jmeterplugins_extras_artifactory_url und andere (Standard / webdriver) sind für die Rolle perf_tests sichtbar.

%Vor%

Aber mit dem obigen Code bekomme ich einen Fehler (wie unten gezeigt):

%Vor%

Unterstützt nicht die variable Erweiterung / Auswertung, wenn eine Variable eine andere Variable enthält (besonders wenn ich eine Schleife verwende).

Ich möchte meine einfache Schleifenaufgabe nicht in drei verschiedene Aufgaben mit Namen aufteilen, um zip-Dateien für jmeterplugins_extras, jmeterplugins_standard und jmeterplugins_webdriver separat herunterzuladen. Es scheint, dass der Fehler durch Jinja verursacht wird.

Wie kann ich vars Wert giga in einer anderen Variablen verwenden, dh wenn var giga enthält, dann sollte ich den Wert der Variable "special_giga_variable" erhalten "( {{spezielle _ {{var}} Variable}} )? Dabei wurde var in defaults / main.yml wie folgt definiert:

var: Giga

    
Arun Sangal 21.09.2015, 20:44
quelle

2 Antworten

4

Nein, tut es nicht. Aber es bedeutet nicht, dass Sie es in 3 verschiedene Aufgaben erweitern müssen. Was Sie tun können, ist eigentlich erweitern Sie "Wörterbuch", um ähnlich zu sehen:

%Vor%

Dann rufen Sie in Ihrer Aufgabe einfach andere Parameter auf: {{ item.url }} and {{ item.file }}

Alternative Optionen:

  1. Schreiben Sie Ihren eigenen Filter, der Ihre Variable entsprechend dem Wert {{ jmeterplugins_url | my_custom_filter(item.plugin) }}

  2. erweitert
  3. Schreiben Sie ein benutzerdefiniertes Modul, das alle Funktionen des Abrufens von URLs in die Datei basierend auf Ihren Eingaben kapselt

  4. Schreibe benutzerdefiniertes lookup_plugin , das durch deine Liste von Variablen iteriert und korrekte Ergebnisse erzeugt.

  5. Da Sie command module verwenden, können Sie bash verwenden, um Ihre url, Datei in demselben Befehl zu verketten (dies wäre wahrscheinlich die unordentlichste Lösung)

Vor 21.09.2015, 21:05
quelle
10

Es tut es.

Sie können

verwenden %Vor%

Der einzige Nachteil dieses Ansatzes ist, dass Variablen, die den Wert einer anderen Variablen erhalten, nicht dynamisch erweitert werden. ein Beispiel:

roles/xxx/defaults/main.yml :

%Vor%

Dies funktioniert leider nicht, wenn Sie versuchen, den aufgelösten Wert in var2 zu verwenden. Daher

%Vor%

gibt {{ var1 }} statt foo aus.

Abhilfe:

Verwenden Sie in Ihrer vars-Deklaration var2: {{ var1 }} anstelle von var2: '{{ vars["var1"] }}' . Auf diese Weise wird es funktionieren.

    
karolyi 05.03.2017 20:18
quelle