2016-04-14 18 views
3

Das folgende ist ein einfaches Textbuch, die dynamisch Variablen geladen werden versucht:Dynamische Dateinamen in vars_files

site.yml 
--- 
- hosts: localhost 
    vars_files: 
    - "{{ name }}.yml" 
    tasks: 
    - debug: var={{ foo }} 

Variable foo werden in dieser Datei definiert:

vars/myvars.yml 
--- 
foo: "Hello" 

Dann Textbuch wie folgt ausgeführt wird:

ansible-playbook test.yml -e "name=myvars" 

jedoch führt dies zu diesem Fehler:

ERROR! vars file {{ name }}.yml was not found

Von dem, was ich aus mehrere Code-Schnipsel verstand dies sollte möglich sein, und die Variablen aus myvars.yml importieren. Beim Versuch mit ansible 1.7.x schien es tatsächlich zu funktionieren (obwohl ich einen anderen Fehler gefunden habe, wurde der Dateiname korrekt aufgelöst).

Wurde dieses Verhalten geändert (möglicherweise wurde die Unterstützung für dynamische Variablendateien entfernt?). Gibt es einen anderen Weg, um dieses Verhalten zu erreichen (Ich kann include_vars Aufgaben verwenden, aber es ist nicht ganz geeignet)?

EDIT: Zu meinem Textbuch Struktur korrekt ist sicher, hier ist ein Github-Repository: https://github.com/jcechace/ansible_sinppets/tree/master/dynamic_vars

+0

es funktioniert für mich auf ansible 2.0.1.0, welche Version verwenden Sie? –

+0

2.0.1 also ist vielleicht die Tatsache, dass ich von OSX läuft, das Problem? Ich werde versuchen mit Linux – pseudo

+0

@arbabnazar hier ist ein Git Repo mit dem Beispiel - nur um sicherzustellen, dass die Struktur in Ordnung ist. https://github.com/jcechace/ansible_sinppets/tree/master/dynamic_vars – pseudo

Antwort

2

einfach Ihre site.yml wie folgt ändern:

- hosts: localhost 
    vars_files: 
    - "vars/{{ name }}.yml" 
    tasks: 
    - debug: var={{ foo }} 

Dann den Befehl wie folgt ausführen:

ansible-playbook site.yml -e "name=myvars" -c local 

Hoffe, das wird Ihnen helfen.

+0

Danke. Ich habe es inzwischen selbst herausgefunden - was mich verwirrt hat ist, dass im Gegensatz zu include_vars task das Verzeichnis "vars" im Pfad benötigt wird. Ich schätze, das liegt daran, dass man Variablen aus nicht standardmäßigen Speicherorten in der Playbook-Datei verwenden könnte. Trotzdem habe ich deine Antwort akzeptiert. – pseudo