Ansible无法遍历变量文件子元素 批量创建用户报错求助
问题根源
你当前的循环逻辑仅遍历了userlist-os、userlist-zos两个顶层组对象,每个对象下的users字段是包含多个用户的数组,你没有对该数组做二次遍历,直接从数组整体调用username属性必然报错。手动指定索引0能拿到第一个用户,是因为你硬编码指定了数组下标,无法实现批量遍历所有用户的需求。
解决方案
使用Ansible的subelements过滤器实现嵌套遍历,同时保留父级的group属性,修改后的完整playbook如下:
- name: test hosts: all user: root vars_files: - userlist-zos.yml - userlist-os.yml tasks: - name: Create user accounts user: name: "{{ item.1.username }}" update_password: on_create uid: "{{ item.1.user_id }}" shell: /bin/bash create_home: yes group: "{{ item.0.group }}" state: present comment: "{{ item.1.comment }}" when: item.1.user_state == 'present' loop: "{{ [userlist-os, userlist-zos] | subelements('users') }}"
subelements过滤器会把父级对象(包含group属性的组配置)和子级users数组的每一项绑定为二元组,item.0对应父级组配置,item.1对应当前遍历的单个用户配置,即可正常读取所有用户属性。
内容的提问来源于stack exchange,提问作者Khaled
相关产品推荐
相关产品推荐

