如何修复Ansible运行书中YAMLint的大括号内空格过多错误?
解决Ansible Playbook的YAMLint循环报错问题
问题原因
YAMLint报错核心是紧凑格式字典(inline dictionary)的大括号内部空格不符合规范,同时你的Playbook存在模块使用错误:ansible.builtin.shell与command字段不能同时声明,这会导致Ansible运行失败。
修复方案
1. 修正字典格式(解决YAMLint报错)
YAMLint对inline字典的空格规则要求:
- 大括号内侧不能有空格(即
{key: value}而非{ key: value }) - 键值对之间的逗号后需保留一个空格
- 冒号后需保留一个空格
2. 修正模块使用错误
mv是系统内置简单命令,无需shell解析,直接使用ansible.builtin.command模块即可,移除多余的shell字段。
修复后的完整代码:
- name: Rename directories to be replaced by symbolic links ansible.builtin.command: "mv {{ item.original }} {{ item.new }}" args: chdir: /xx/tt/ll/ loop: - {original: 'backup', new: backupbkp} - {original: 'db', new: 'dbbkp'} - {original: "ini", new: "inibkp"} - {original: "lock", new: "lockbkp"} - {original: "log", new: "logbkp"}
可选优化:改用展开式字典(更易读,规避格式坑)
如果觉得inline字典容易触发格式问题,可换成展开式YAML字典,可读性更强且不易报错:
- name: Rename directories to be replaced by symbolic links ansible.builtin.command: "mv {{ item.original }} {{ item.new }}" args: chdir: /xx/tt/ll/ loop: - original: 'backup' new: backupbkp - original: 'db' new: 'dbbkp' - original: "ini" new: "inibkp" - original: "lock" new: "lockbkp" - original: "log" new: "logbkp"
验证修复
将修改后的代码重新用YAMLint检查,too many spaces inside braces错误会消失,同时Ansible可正常执行目录重命名操作。
内容的提问来源于stack exchange,提问作者Hazal
相关产品推荐
相关产品推荐

