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

如何通过include_vars实现同名不同值变量的循环任务执行?

解决方法

要实现动态遍历vars/all/下的所有变量文件,并用每个文件的变量重复执行任务,核心是先动态获取文件列表,再循环加载变量并执行任务,具体步骤如下:

1. 动态收集变量文件列表

先用find模块扫描vars/all/目录,自动收集所有变量文件的路径,后续新增文件会自动被纳入范围,无需手动修改配置:

- name: 遍历变量文件执行任务
  hosts: your_target_hosts
  tasks:
    - name: 获取vars/all下的变量文件路径列表
      find:
        paths: "{{ playbook_dir }}/vars/all"
        file_type: file
        patterns: "*.yml,*.yaml"  # 可按需添加其他后缀,比如*.json
      register: var_files_list

2. 循环加载变量并执行任务

遍历刚才拿到的文件列表,每次循环加载一个变量文件,然后执行你的任务集合。建议把需要重复执行的任务单独放到子任务文件中,让结构更清晰:

主Playbook示例

- name: 遍历变量文件执行任务
  hosts: your_target_hosts
  tasks:
    - name: 获取变量文件路径列表
      find:
        paths: "{{ playbook_dir }}/vars/all"
        file_type: file
        patterns: "*.yml,*.yaml"
      register: var_files_list

    - name: 逐个加载变量并执行任务
      include_tasks: repeatable_tasks.yml
      loop: "{{ var_files_list.files | map(attribute='path') | list }}"
      loop_control:
        loop_var: current_var_file  # 指定循环变量名,避免和任务内变量冲突

子任务文件repeatable_tasks.yml示例

- name: 加载当前循环的变量文件
  include_vars: "{{ current_var_file }}"

# 这里写你需要重复执行的任务,比如:
- name: 示例任务 - 打印当前变量值
  debug:
    msg: "当前使用的变量值: {{ your_shared_var_name }}"  # 替换为你实际的变量名

# 其他需要重复执行的任务...

关键细节说明

  • {{ playbook_dir }}是Ansible内置变量,指向当前Playbook所在目录,确保文件路径准确。
  • loop_control中的loop_var必须指定,避免循环变量与任务内的变量重名导致冲突。
  • 如果变量文件有其他格式(如.json),直接修改patterns参数即可,比如patterns: "*.yml,*.yaml,*.json"。
  • 这种方式完全不需要硬编码文件列表,新增变量文件后无需修改Playbook,直接运行即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:18:27