2017-12-15 4 views
0

Ich versuche, Vorlagen mit verschiedenen Gruppen von Variablen für jede Iteration einer bestimmten Gruppe von Aufgaben zu verwenden. Zum Beispiel in einer der Aufgaben würde ich bestimmte Werte für Postgres setzen wollen:Verwenden Sie Dict in Vars mit Vorlagen in Ansible

- name: Define values for postgres-ds 
    template: 
    src: postgres-ds.xml.j2 
    dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml 
    vars: "{{ postgres_desenv }}" 
    notify: Restart Service 

In Rolle/Vars/main.yaml, I definiert:

postgres_desenv: 
    var1: somevalue 
    var2: someothervalue 
    ... 

Trotzdem bekomme ich die folgende Fehlermeldung:

fatal: [rmt]: FAILED! => { 
    "failed": true, 
    "reason": "Vars in a Task must be specified as a dictionary, or a list of dictionaries 
    ... 

Wenn ich versuche, die gleiche Variable in einem anderen Kontext zu verwenden, es funktioniert gut:

- debug: 
    msg: "{{ item.key }} - {{ item.value }}" 
    with_dict: "{{ postgres_desenv }}" 

Ich versuchte, die Antworten auf diese question zu folgen, aber ich bin immer noch fest.


Mein nächster Schritt ist eine Variable verwendet die Variable in Vars zu nennen, so etwas wie:

- name: Define values for postgres-ds 
    template: 
    src: postgres-ds.xml.j2 
    dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml 
    vars: postgres_{{ another_var }} 
    notify: Restart Service 

Antwort

1

Sie etwas tun können:

- name: Define values for postgres-ds 
    template: 
    src: postgres-ds.xml.j2 
    dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml 
    vars: 
    settings: "{{ postgres_desenv }}" 
    notify: Restart Service 

dann in der Vorlage B.

{{ settings.var1 }} 
+0

Ihre Antwort hat mir geholfen, ich habe andere Felder im Dict erstellt, die es einfacher gemacht haben, später im Code auf die Variable zu verweisen. Statt eines Diktats habe ich jetzt ein Diktatdiktat. Vielen Dank. –

-1

Wenn postgres_desenv in vars/main.yml definiert ist, wird es automatisch geladen und steht für die Rolle und den Rest des Playbooks zur Verfügung. Warum müssen Sie dies erneut angeben, indem Sie die Option "vars" in der Vorlagenmodulaufgabe verwenden?

+0

Das würde für mich nicht funktionieren, weil ich in der Lage sein muss, die Variablen dynamisch zu ändern. Die Aufgabe wird zweimal iteriert, wenn ich zwei Datenquellen habe. Ich müsste eine Möglichkeit haben, die Postgres-Variable (postgres_INSTANCENAME) zu ändern. –