首页 文章

如何在Ansible中更新嵌套变量

提问于
浏览
5

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

它们可以作为 ansible_local.environment.database.name 等变量使用 . 更新数据库名称的最佳方法是什么?

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

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

2 回答

  • 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 参数 .

  • 2

    这是默认的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 ,它将按预期工作 .

相关问题