如何在Ansible中更新嵌套变量

时间:2016-05-05 06:21:09

标签: python ansible

我有一些额外的信息,比如存储在/etc/ansible/facts.d/environment.fact中的数据库连接细节等。

这些变量可用作 public static void main(String args[]) { List<List<String>> list = new ArrayList<>(); List<String> a = new ArrayList<>(); a.add("c"); a.add("a"); List<String> b = new ArrayList<>(); b.add("h"); b.add("b"); list.add(a); list.add(b); Collections.sort(list,new Comparator<List<String>>() { @Override public int compare(List<String> o1, List<String> o2) { Collections.sort(o1); Collections.sort(o2); //Compare your list based on your criteria } }); } 之类的变量。更新数据库名称的最佳方法是什么?

我尝试了set_fact模块但无法正确更新嵌套变量。它只会覆盖整个ansible_local.environment.database.name哈希。

ansible_local

2 个答案:

答案 0 :(得分:2)

这应该有所帮助,假设您使用的是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参数。

答案 1 :(得分:0)

这是默认的Ansible行为 - 在更改部分时覆盖整个哈希。见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,它将按预期工作。