2016-05-05 7 views
4

DB接続の詳細などのいくつかの追加情報が/etc/ansible/facts.d/environment.factに保存されています。Ansibleで入れ子になった変数を更新するには

これらは、ansible_local.environment.database.nameのような変数として利用できます。データベース名を更新する最善の方法は何ですか?

set_factモジュールを試しましたが、ネストされた変数を正しく更新できませんでした。それはちょうど全体ansible_localハッシュを上書きします。

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

私はこれが[superuser](http://superuser.com/)に属していると信じています。 – Elizafox

答えて

0

これはデフォルトです。考えられる動作 - 一部の変更時にハッシュ全体をオーバーライドします。 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 

あなたはhash_behaviour = mergeにそれを変更するのであれば、それはあなたが期待通りに動作します。

+0

私はちょうどそれをチェックし、それは動作しません。これは変数ファイルでは機能しますが、 "set_fact"モジュールでは機能しません。 (v2.1.1.0) – waste

0

これは、Ansible 2.0以前のバージョンを使用していると仮定した場合に役立ちます。

- 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 

combineはJinja2フィルタである。そのような場合は、recursiveパラメータを使用していることを確認してください。

関連する問題