Ansible依赖变量文件加载至同一变量名的问题求助
解决Ansible跨目录变量文件依赖加载问题
针对你遇到的File A依赖File B变量、需合并到同一SomeVar的场景,以下是两种可行方案:
方案一:加载依赖变量后再加载目标文件
核心思路是先让File B的变量在加载File A时可用,再合并两个文件的内容:
# 1. 先加载File B到临时变量 - include_vars: file: dirB/fileB name: _temp_b # 2. 加载File A时,通过vars参数传入File B的变量,确保解析依赖 - include_vars: file: dirA/fileA name: _temp_a vars: "{{ _temp_b }}" # 3. 合并两个临时变量到目标SomeVar - set_fact: SomeVar: "{{ _temp_b | combine(_temp_a) }}" # 可选:清理临时变量避免污染全局 - set_fact: _temp_b: null _temp_a: null
方案二:先渲染依赖文件再加载
如果File A中依赖表达式较多,可先通过template渲染File A(注入File B的变量),再合并加载:
# 1. 读取File B的变量,渲染File A为可直接加载的文件 - template: src: dirA/fileA dest: /tmp/_rendered_a.yml vars: "{{ lookup('file', 'dirB/fileB') | from_yaml }}" # 2. 加载原始File B和渲染后的File A到SomeVar - include_vars: files: - dirB/fileB - /tmp/_rendered_a.yml name: SomeVar # 3. 清理临时文件 - file: path: /tmp/_rendered_a.yml state: absent
补充说明
你之前尝试的include_vars写法存在语法错误:YAML中重复的file键会被覆盖,正确的多文件加载应使用files列表,但即使修正写法,由于File A加载时依赖的变量未在上下文存在,仍会触发"未定义变量"错误,因此必须先确保依赖变量可用。
内容的提问来源于stack exchange,提问作者user2395585
相关产品推荐
相关产品推荐

