Ansible:如何使用含相同键名的vars文件及改写示例
如何将Ansible Playbook的Loop字典变量迁移到外部Vars文件
没问题,我来帮你搞定这个需求!其实核心就是把原来写在Playbook loop里的用户列表单独抽出来,放到YAML格式的vars文件中,保持每个字典的键名和原来一致就行,具体步骤如下:
1. 编写YAML格式的Vars文件
创建一个比如叫user_vars.yml的文件(名字可以自定义,只要符合YAML规范),内容如下:
# user_vars.yml managed_users: - user_name: "user1" user_id: "2000" - user_name: "user2" user_id: "2001"
这里我们定义了一个名为managed_users的列表变量,每个元素都是包含user_name和user_id的字典,和你原来loop里的结构完全一致。
2. 修改原Playbook引入Vars文件
接下来修改你的Playbook,通过vars_files指令引入刚才的vars文件,然后loop直接使用这个变量:
- name: Create real users hosts: your_target_hosts # 记得替换成你的目标主机组/主机 vars_files: - ./user_vars.yml # 这里是vars文件的路径,根据实际位置调整 tasks: - name: Create system users user: name: "{{ item.user_name }}" shell: "/bin/bash" uid: "{{ item.user_id }}" loop: "{{ managed_users }}"
这样Playbook就会从外部vars文件读取用户列表,逻辑和原来完全一致,但结构更清晰,也方便后续维护用户列表。
额外的灵活用法
如果你不想单独用文件,也可以直接把变量写在Playbook的vars区块里,比如:
- name: Create real users hosts: your_target_hosts vars: managed_users: - user_name: "user1" user_id: "2000" - user_name: "user2" user_id: "2001" tasks: - name: Create system users user: name: "{{ item.user_name }}" shell: "/bin/bash" uid: "{{ item.user_id }}" loop: "{{ managed_users }}"
另外,如果你是管理多组主机,还可以把这个变量放到group_vars/或者host_vars/目录下的对应文件里,Ansible会自动加载,这也是Ansible最佳实践里推荐的变量管理方式哦~
内容的提问来源于stack exchange,提问作者Maria628
相关产品推荐
相关产品推荐

