2016-05-05 7 views
4

Ich habe einige zusätzliche Informationen wie DB-Verbindungsdetails usw. in /etc/ansible/facts.d/environment.fact gespeichert. Diese Werte werden als Variablen wie ansible_local.environment.database.name zur Verfügung gestellt. Was ist der beste Weg, um den Datenbanknamen zu aktualisieren?Wie verschachtelte Variablen in Ansible zu aktualisieren sind

Ich habe versucht, das Set_fact-Modul, aber konnte es nicht die verschachtelte Variable korrekt aktualisieren. Es überschreibt nur den gesamten ansible_local Hash.

- name: Update database name 
    set_fact: 
    args: 
    ansible_local: 
     environment: 
     database: 
      name: "{{ db_name }}" 
+0

Ich glaube, das gehört auf [Superuser] (http://superuser.com/). – Elizafox

Antwort

0

Das ist standardmäßig Ansible-Verhalten - überschreiben ganzen Hash, wenn Sie einen Teil davon ändern. Siehe ansible.conf:

# if inventory variables overlap, does the higher precedence one win 
# or are hash values merged together? The default is 'replace' but 
# this can also be set to 'merge'. 
#hash_behaviour = replace 

Also, wenn Sie es zu hash_behaviour = merge ändern wird es funktionieren wie erwartet.

+0

Ich habe es gerade überprüft und es funktioniert nicht. Dies funktioniert für variable Dateien, aber nicht für das Modul "set_fact". (v2.1.1.0) – waste

0

Dies sollte helfen, vorausgesetzt, Sie verwenden Ansible 2.0 oder älter.

- set_fact: 
    test: 
     app: 
     in: 1 
     out: 2 

- set_fact: 
    test_new: 
     app: 
     transform: 3 

- set_fact: 
    test: "{{test|combine(test_new,recursive=True)}}" 

- debug: var=test 

Ein combine ist Jinja2 Filter. Stellen Sie sicher, dass Sie in solchen Fällen den Parameter recursive verwenden.

Verwandte Themen