2017-03-06 3 views
1

Also verwende ich ein Playbook basierend auf group_vars, die für IIS-Einstellungen für eine Vielzahl von Websites verwendet werden.Ansible: Jinja-Referenz in einem dynamischen Inventar

Die group_vars bestehen aus 2 Haupt dicts (einer von ihnen komplexe Listen von dicts von Listen von dicts enthält.)

Der Komplex eine Referenzen von firstdict in Jinja2 Vars hat (zB {{}} firstdic.sitename)

Dies funktioniert perfekt mit group_vars, Referenzen werden von der jinja2 Engine in Ansible aufgelöst. Wenn es jedoch um eine dynamische Bestandsaufnahme geht, ist das gesamte Diktat beim Verweisen auf vars aus dem ersten Diktat nicht definiert.

Hier kommt eine JSON (wie von meinem dynamischen Inventar):

"firstdict": { "sitename": "mysitename" } 

"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}} 

Wenn diese JSON verwendet, würde die Debug-Modul, dass complexdict zu finden ist nicht definiert.

Der jinja2-Teil wird jedoch korrekt analysiert und ausgeführt, da dies funktionieren würde.

Dynamische Bestandsaufnahme:

"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}} 

Debug-Modul Rückkehr:

"complexdict": { 
     "someotherdict": { 
      "sitepath": "foo" 
     } 
    } 

Gibt es eine Variable Vorrang Problem? Sonst sollte ich wissen, warum es so nicht funktionieren könnte?

Danke für Ihre Hilfe, ansible Meister :)

PS: Ich habe empiric bereits versucht, eine Menge zu entkommen, geschweifte Klammern, doppelte Anführungszeichen zu entkommen, und so weiter.

Antwort

1

Werke für mich:

./inventory/test.sh:

#!/bin/bash 

cat << EndOfJSON 
{ 
    "test" : { 
    "hosts" : [ "localhost" ], 
    "vars" : { 
     "firstdict": { "sitename": "mysitename" }, 
     "complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}} 
     } 
    } 
} 
EndOfJSON 

./playbook.yml

--- 
- hosts: test 
    connection: local 
    gather_facts: no 
    tasks: 
    - debug: 
     var: complexdict 

Ausgang:

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "complexdict": { 
     "someotherdict": { 
      "sitepath": "mysitename" 
     } 
    } 
} 

Wenn diese ist nicht der Fall, bitte aktualisieren Sie Ihre Frage mit vollständigMCVE.

+0

Ja, Sie haben Recht. Das funktioniert perfekt. Das Problem war mit einigen fliehenden Charakteren im JSON. Vielen Dank für Ihre Hilfe! – pschaeffer

Verwandte Themen