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

Ansible如何加载多个本地YML文件并合并其中的数组内容

Ansible拆分配置合并方案

问题原因

  • bbb、ddd任务无输出的核心原因是路径不匹配:find模块指定的搜索路径为production/configs/,但你实际存放拆分配置的目录是production/split_configs/,导致find_results.files返回空列表,遍历空列表自然没有输出。
  • 你原本的set_fact数组合并思路是可行的,只需要补充两个调整:首先初始化空的my_array数组,其次读取文件时将yaml字符串解析为Ansible变量,不要直接拼接文件内容。

最优实现代码

修改后的playbook如下:

- hosts: myservers
  pre_tasks:
    - name: merge ansible arrays
      tags: always
      delegate_to: localhost
      block:
        # 初始化空数组
        - name: init empty my_array
          set_fact:
            my_array: []

        - name: find config files
          find:
            # 修正为实际存放配置的目录路径
            paths: production/split_configs/
            patterns: '*.yml'
          register: find_results

        - name: load and merge array from all config files
          set_fact:
            my_array: "{{ my_array + (lookup('file', item.path) | from_yaml).my_array }}"
          loop: "{{ find_results.files }}"

  tasks:
    - name: eee
      debug:
        msg: "{{ my_array }}"

提示:如果还是出现路径找不到的问题,可以把路径替换为基于playbook目录的绝对路径:paths: "{{ playbook_dir }}/production/split_configs/",保证不管在哪个目录执行playbook都能正确找到配置文件。如果需要合并后去重,可以把拼接逻辑修改为{{ (my_array + (lookup('file', item.path) | from_yaml).my_array) | unique }}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:03