2015-08-26 15 views
5

Ich habe eine ansible Datei (my_file.yml), die etwa wie folgt aussieht:Wie können Variablen an eingeschlossene Aufgaben in ansible übergeben werden?

sieht wie folgt aus
--- 
- name: The name 
    hosts: all 
    tasks: 

    - include:my_tasks.yml 
     vars: 
      my_var: "{{ my_var }}" 

my_tasks.yml:

- name: Install Curl 
    apt: pkg=curl state=installed 

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 

Ich möchte passieren my_var als Befehlszeilenargument ansible so kann ich wie folgt aus:

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

Aber ich mit dem folgenden Fehler am Ende:

... Failed to template {{ my_var }}: Failed to template {{ my_var }}: recursive loop detected in template string: {{ my_var }} 

Wenn ich die vars in my_file.yml wie folgt aussehen:

- include:my_tasks.yml 
    vars: 
     my_var: "1.2.3" 

es funktioniert! Ich habe auch versucht, die Variablennamen, um etwas zu ändern, das nicht gleich my_var, zum Beispiel:

- include:my_tasks.yml 
    vars: 
     my_var: "{{ my_var0 }}" 

aber dann habe ich mit einem Fehler enden. Es scheint mir, dass die Variable nicht erweitert wird und stattdessen die Zeichenfolge "{{ my_var }}" oder {{ my_var0 }} an my_tasks.yml übergeben wird. Wie löse ich das?

Antwort

7

Sie sollten my_var nicht explizit an die include übergeben. Alle Variablen einschließlich Extra-Vars sollten überall direkt verfügbar sein. So ruft einfach

ansible-playbook my_file.yml --extra-vars "my_var=1.2.3" 

und als {{ my_var }} in den Aufgaben verwenden sollte funktionieren.

- name: My task 
    command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb" 
+2

Wie kann ich eine Variable von einer Aufgabe übergeben (anstatt die Variable im Playbook oder in der Befehlszeile zu setzen)? –

Verwandte Themen