
ruamel.yaml 默认按 80 字符宽度折行,导致长镜像名(如带 @sha256 的 OCI 引用)在 name: 后被强制换行;只需将 yaml.width 设置为足够大的值(如 1024),即可保持键值在同一行。
ruamel.yaml 默认按 80 字符宽度折行,导致长镜像名(如带 `@sha256` 的 oci 引用)在 `name:` 后被强制换行;只需将 `yaml.width` 设置为足够大的值(如 `1024`),即可保持键值在同一行。
在使用 ruamel.yaml 处理 OpenShift ImageSetConfiguration 等结构化 YAML 配置时,常遇到一个看似“格式错乱”实则源于默认排版策略的问题:当 additionalImages 列表中某项的 name 值过长(例如含完整 digest 的容器镜像地址)时,dump() 会将其从 name: xxx 拆分为两行:
- name:
quay.io/modh/cuda-notebooks@sha256:00c53599f5085beedd0debb062652a1856b19921ccf59bd76134471d24c3fa7d
这并非解析错误,而是 ruamel.yaml 的输出宽度限制(width)触发的自动折行行为。其默认 yaml.width = 80,一旦某行(含缩进)预估长度超过该阈值,就会尝试将长标量值(scalar)换行并缩进显示,以提升可读性——但在配置文件场景下,这种“友好”反而破坏了语义清晰性和工具链兼容性(如 oc apply 或 CI 解析器更倾向单行键值)。
✅ 正确解决方式是显式增大 width:
from ruamel.yaml import YAML yaml = YAML() yaml.width = 1024 # 关键:禁用因长度触发的换行 # 可选:保持其他风格一致 yaml.indent(mapping=2, sequence=4, offset=2) yaml.default_flow_style = False doc = """...""" # 你的原始 YAML 字符串 data = yaml.load(doc) yaml.dump(data, stdout)
⚠️ 注意事项:
- width 是输出端控制参数,不影响加载(load)行为;
- 不要混淆 yaml.width 与 yaml.preserve_quotes、yaml.compact() 等——后者不解决此问题;
- 若需兼顾人类可读性与机器友好性,推荐 width=1024(远超常见镜像名长度),既避免折行,又不会引入异常宽行;
- 对于超大配置文件(数百个镜像),该设置可显著提升生成 YAML 的整洁度与下游工具稳定性。
通过这一简单配置,即可确保所有 name:










