Ansible的copy模块如何正确引用变量实现批量下发用户配置文件任务
你当前的写法存在逻辑错误:with_items会把你传入的三个列表全部拉平合并,最终会生成包含9个元素的遍历列表,完全无法实现对应用户匹配对应家目录推送配置的需求。
以下是两种可直接使用的优化方案:
方案1:不改动现有变量定义,用zip过滤器配对列表
直接修改task写法即可,利用Ansible的zip过滤器将两个列表对应位置的元素配对:
- name: push user profile copy: src: conf/.bashrc dest: "{{ item.0 }}/.bashrc" owner: "{{ item.1 }}" group: "{{ item.1 }}" loop: "{{ userhomedir | zip(user) | list }}"
说明:zip过滤器会按顺序匹配userhomedir和user的元素,每个遍历项的第0位是家目录路径,第1位是用户名。
方案2:更推荐的优化方式,调整变量结构
建议将用户信息统一存为字典列表,避免后续维护时两个列表顺序错位的问题,可读性和可维护性更高:
调整后的vars定义
user_list: - name: root homedir: /root - name: admin homedir: /home/admin - name: demo homedir: /home/demo
对应task写法
- name: push user profile copy: src: conf/.bashrc dest: "{{ item.homedir }}/.bashrc" owner: "{{ item.name }}" group: "{{ item.name }}" loop: "{{ user_list }}"
内容的提问来源于stack exchange,提问作者Pokeya
相关产品推荐
相关产品推荐

