Ansible遍历字典创建用户组报错:'list object'无state属性
问题原因与解决方案
问题根源
你遇到的报错核心是自定义变量名与Ansible内置变量冲突:
Ansible核心内置了一个名为groups的变量,用于存储Inventory中的主机分组信息,其结构为{组名: [主机名列表]}。你在vars.yaml中自定义的groups变量优先级低于内置变量,导致lookup('dict', groups)遍历的是内置主机组数据,而非你定义的用户组配置。此时item.value是主机列表(list类型),自然不存在state属性,触发报错。
修复方案
修改自定义变量名,避开内置变量名即可:
- 更新vars.yaml,将自定义变量名改为
user_groups(或其他不冲突的名称):user_groups: my_group: state: present gid: 1004 - 更新main.yaml,调整loop和变量引用:
- name: 'Linux | Adding groups' ansible.builtin.group: name: "{{ item.key }}" state: "{{ item.value.state }}" gid: "{{ item.value.gid }}" system: False loop: "{{ lookup('dict', user_groups) }}"
验证说明
修改后,lookup('dict', user_groups)会正确遍历你自定义的用户组字典,每个item.value都是包含state和gid的字典结构,符合group模块的参数要求,即可正常创建用户组。
内容的提问来源于stack exchange,提问作者Hutger Hauer
相关产品推荐
相关产品推荐

