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

Ansible剧本遍历数组传值给角色执行时报item未定义如何解决

错误原因

  • 第一:Ansible 2.4及以上版本不支持直接在roles配置块下使用with_items循环调用role,这种写法无法将循环的item变量传递到role内部。
  • 第二:你的role任务中写了多余的with_items配置。创建目录的路径已经直接使用传入的VENUE变量拼接,不需要再套循环,加了with_items后Ansible会尝试查找当前任务作用域下的item变量,找不到就会触发报错。

解决方法

  1. 将Playbook中直接写role的方式改为用include_role模块配合loop循环调用,即可将每次循环的item值赋值给VENUE变量传入role。
  2. 删除role任务中多余的with_items配置。
  3. 确认代码中用到的dest_folder、instance_name变量已经在对应位置(比如playbook全局变量、role默认变量、inventory配置)完成赋值,避免后续出现变量未定义错误。

修正后代码

Playbook代码

---
# play book
- name: create config for instance
  hosts: all
  vars:
    LIST: [Asia, Americas, Artic, Antartic, Oceania, Europe, Africa]
  connection: local
  tasks:
    - name: 循环调用create_config role
      include_role:
        name: create_config
      vars:
        VENUE: "{{ item }}"
      loop: "{{ LIST }}"

Role(tasks/main.yml)代码

- name: create directory structure
  file:
    path: "{{ dest_folder }}/{{ instance_name }}/{{ VENUE }}"
    state: directory
    mode: '0755'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:48:01