Ansible剧本遍历数组传值给角色执行时报item未定义如何解决
错误原因
- 第一:Ansible 2.4及以上版本不支持直接在
roles配置块下使用with_items循环调用role,这种写法无法将循环的item变量传递到role内部。 - 第二:你的role任务中写了多余的
with_items配置。创建目录的路径已经直接使用传入的VENUE变量拼接,不需要再套循环,加了with_items后Ansible会尝试查找当前任务作用域下的item变量,找不到就会触发报错。
解决方法
- 将Playbook中直接写role的方式改为用
include_role模块配合loop循环调用,即可将每次循环的item值赋值给VENUE变量传入role。 - 删除role任务中多余的
with_items配置。 - 确认代码中用到的
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
相关产品推荐
相关产品推荐

