Ansible 2.9.6无法从vars_files加载变量报错如何解决?
问题原因
Ansible 中vars_files参数要求传入列表类型值,你当前playbook中该参数填写的是单个字符串,导致变量文件没有被正确加载,grp、user、id等变量均未定义,Jinja模板不会被渲染,直接把{{ grp }}作为原始字符串传给了group模块,因此触发了组名不合法的报错。
解决方法
- 修改playbook中的
vars_files配置,将字符串改为列表格式,以下两种写法均可:- 单行列表写法:
vars_files: ["vars/users.yaml"] - 多行列表写法(可读性更高):
vars_files: - "vars/users.yaml"
- 单行列表写法:
修改后的完整playbook示例:
- name: play create users from var file hosts: all become: yes vars_files: - "vars/users.yaml" tasks: - name: group exists group: name: "{{ grp }}" state: present - name: user exists user: name: "{{ user }}" uid: "{{ id }}" state: present groups: "{{ grp }}" append: yes
(可选)添加调试任务验证变量加载状态,可在
group exists任务前添加如下内容,运行playbook如果能正常打印变量值,说明已加载成功:- name: 验证变量加载结果 debug: msg: "组名:{{ grp }},用户名:{{ user }},UID:{{ id }}"额外排查点:
- 确认
vars/users.yaml文件的读取权限正常,Ansible执行用户可访问该文件 - 确认
users.yaml文件语法正确,无缩进错误、键名拼写错误
- 确认
内容的提问来源于stack exchange,提问作者Youssef CH
相关产品推荐
相关产品推荐

