2016-05-25 12 views
1

Ich habe ein Spiel alsansible wie Artikel in jinja2 Vorlage referenzieren

- name: create the unison preference file 
     template: 
     src: default.prf.j2 
     dest: /root/.unison/{{ item }}.prf 
     with_items: groups['ndeployslaves'] 

Der Inhalt der default.prf.j2 Datei folgt, wird wie folgt

root = /home 
    root = ssh://[email protected]{{ item }}//home 
    ignore = Path virtfs 
    ignore = Path */mail 

Die Elementvariable nicht funktioniert in der Vorlage und ich bekomme den Fehler

TASK [Unison_master: Erstellen Sie die Unison Preference-Datei] ************************ fatal: [127.0.0.1]: FEHLGESCHLAGEN! => { "Nicht bestanden": true, "msg": " 'item' ist nicht definiert"}

Wie verweisen ich ein Element innerhalb einer Vorlage in einem Spiel verwendet?

+0

Sind Sie sicher, dass 'ndeployslaves' richtig für die aktuelle Textbuch festgelegt ist? Können Sie eine Debug-Aufgabe vor der Vorlage-Rendering-Aufgabe hinzufügen und diese Variable drucken, nur um zu überprüfen, ob der Inhalt wie erwartet ist? – fishi

+0

Ich wollte den Inhalt von 'Gruppen Druck [ 'ndeployslaves']' – fishi

+0

TASK [unison_master: Debug this] *************************** ******************* [ABSCHNITTSWARNUNG]: Die Verwendung von nackten Variablen ist veraltet. Aktualisieren Sie Ihre Playbooks so, dass der Umgebungswert die vollständige Variablensyntax ('{{groups [' ndeploadslaves ']}}') verwendet. Diese Funktion wird in einer zukünftigen Version entfernt. Verfallswarnungen können durch Setzen von deprecation_warnings = False in ansible.cfg deaktiviert werden. ok: [127.0.0.1] => (item = cpanel.host.net) => { "item": "cpanel.sysally.net", "msg": "Hallo Welt!" } {"fehlgeschlagen": true, "msg": "'item' ist undefined"} –

Antwort

1

Da es nicht ist so dass Sie verwenden {{item}} in der Vorlage, können Sie dies tun:

- name: create the unison preference file 
    copy: 
    src: default.prf 
    dest: "/root/.unison/{{ item }}.prf" 
    force: no 
    with_items: "{{ groups['ndeployslaves'] }}" 

- name: edit preference file 
    lineinfile: 
    dest: "/root/.unison/{{ item }}.prf" 
    line: "root = ssh://[email protected]{{item}}//home" 
    regexp: '^root = ssh://' 
    with_items: "{{ groups['ndeployslaves'] }}" 

Der Inhalt default.prf auf Ihrem lokalen Host sein sollte:

root = /home 
root = ssh:// 
ignore = Path virtfs 
ignore = Path */mail 

Ich arbeite jedoch {{item}} in einer Vorlage. Sind Sie sicher, dass Ihr Leerzeichen korrekt ist? src und dest müssen um eine Stufe tiefer eingerückt werden als template, aber with_items muss sich auf derselben Ebene wie template befinden.

- name: create the unison preference file 
    template: 
    src: default.prf.j2 
    dest: "/root/.unison/{{ item }}.prf" 
    with_items: "{{ groups['ndeployslaves'] }}" 
+0

gleicher Fehler referenziert werden kann. Ich habe sogar versucht, Sie das Objekt als eine Variable Vars: the_host: „{{item}}“ und dann the_host in der j2 Vorlage referncing die Hilfe den Ball hielt –

+0

bearbeitet gerade meine Antwort. Ich glaube, ich hatte einen Syntaxfehler. – smiller171

+0

with_items: Gruppen [ ‚ndeployslaves‘] funktioniert gut und das Element = zeigt korrekt in Debug .Als ich die Dinge erwähnt, dass der Wert mit in der Template-Datei als Variable –

0

Der Fehler wurde durch einen Einrückungsfehler verursacht.
Die with_items: groups['ndeployslaves'] wurde um eine Stufe tiefer eingerückt, als sie sollte.

Verwandte Themen