Ansible实操:如何为现有用户列表批量添加新键值对?
Ansible 为CSV读取的用户列表添加额外字段
你可以通过set_fact结合loop遍历用户列表,使用combine过滤器将原用户条目与新增字段的字典合并,实现需求。以下是完整的Playbook:
- hosts: localhost tasks: - read_csv: path: /var/lib/awx/projects/file/creation.csv fieldnames: FirstName,LastName,ClassType delimiter: ',' register: userdata # 遍历每个用户条目,合并新增字段 - set_fact: updated_userdata: "{{ updated_userdata | default([]) + [item | combine(new_fields)] }}" loop: "{{ userdata.list }}" vars: new_fields: EmailAddress: "{{ item.Username }}@gmail.com" OtherAddresses: "primary:{{ item.Username }}@gmail.com,secondary:{{ item.Username }}@outlook.com" Registered: "Yes" # 输出处理后的用户列表 - debug: var: updated_userdata
关键步骤说明:
- 读取CSV数据:
read_csv模块读取指定路径的CSV文件,结果注册到userdata变量,其中userdata.list是包含所有用户条目的列表。 - 生成新增字段字典:在
vars中定义new_fields,根据当前循环的用户条目item的Username字段,动态生成EmailAddress、OtherAddresses的值,固定设置Registered为Yes。 - 合并字典并构建新列表:使用
combine过滤器将原用户条目item与new_fields合并,得到包含完整字段的用户字典;通过updated_userdata | default([]) + [...]将合并后的字典逐步添加到新列表中。 - 验证结果:
debug模块输出处理后的updated_userdata,确认新增字段是否正确添加。
如果你希望直接修改原userdata.list,可以将set_fact的目标变量改为userdata.list,但建议保留原数据,使用新变量存储处理后的结果,便于后续对比或复用。
内容的提问来源于stack exchange,提问作者Blitzden
相关产品推荐
相关产品推荐

