You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中如何合并不同vars文件定义的同名变量值?

原因说明

Ansible 默认对同名变量采用后加载覆盖规则,无论变量是字典还是列表类型,都不会自动执行合并逻辑。循环加载两个变量文件时,后加载的app2.yml中定义的dbconn会直接覆盖前序app1.yml加载的同名变量,因此debug输出仅包含app2里的两条数据。

可直接落地的实现方案

不要把两个变量文件的内容直接加载到全局根命名空间,加载时给每个文件的变量分配独立的命名前缀,避免同名覆盖,之后手动拼接两个列表即可,修改后的main.yml代码如下:

- name: 加载变量文件,通过name参数指定独立命名空间
  include_vars:
    file: "{{ playbook_dir }}/{{ item }}.yml"
    name: "vars_{{ item }}"
  loop:
    - app1
    - app2
  run_once: yes

- name: 拼接两个文件中的dbconn列表
  set_fact:
    dbconn: "{{ vars_app1.dbconn + vars_app2.dbconn }}"

- debug:
    msg: "{{ dbconn }}"

运行后就能得到预期的3条数据的结果。

注意:不建议通过修改ansible.cfg中hash_behaviour=merge的方式实现需求,一是该配置默认仅对字典类型生效,列表类型依然会直接覆盖;二是全局修改该配置会改变所有变量的加载逻辑,很容易引发不可预期的变量冲突,大幅提升问题排查成本。

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:57:23