You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:43:35