FreeBSD下Saltstack执行state.apply报Pillar渲染失败求助
问题根因
你编写的/usr/local/etc/salt/states/packages.sls状态文件语法完全正确,报错和该文件无直接关系,从日志可以定位到两个问题:
- 非核心告警:flat类型roster后端找不到配置文件
/usr/local/etc/salt/roster,这是salt-ssh功能的依赖配置,如果你不使用salt-ssh的无代理模式管理主机,该告警完全不影响常规salt master/minion架构的功能,可以直接忽略。 - 核心报错:Pillar渲染流程失败,具体是名为
config的Pillar SLS文件存在YAML语法错误。日志明确给出错误位置:解析该文件第3行第27列的带引号配置项时,读到第4行开头就遇到了意外的流结束,本质是该文件存在未闭合的引号、未写完的配置项、或者缩进格式错误。
排查步骤
- 定位出错的Pillar文件:FreeBSD系统下Salt默认的Pillar配置根目录为
/usr/local/etc/salt/pillar/,在该目录下查找config.sls文件,或者config/init.sls(如果config是目录形式的sls)。 - 定位语法错误点:打开找到的config pillar文件,直接跳转到第3行附近检查:
- 有没有单引号、双引号只写了前半部分,没有写闭合的后半部分
- 有没有键值对、列表项写了一半就换行中断,值部分缺失
- 有没有使用Tab键做缩进,Salt的YAML解析只支持空格缩进
- 快速验证配置:执行命令
salt '*' pillar.items触发全量Pillar渲染,不需要每次执行state.apply就能快速判断修复是否生效。 - 检查top.sls配置:如果上述config文件不存在,打开
/usr/local/etc/salt/pillar/top.sls检查,确认是否存在错误的sls引用,把不存在的config引用项删除即可。
修复方案
- 修复Pillar语法错误:补全config sls中缺失的闭合引号、未写完的配置项,统一使用2空格缩进。典型错误示例和修复对比如下:
错误示例(引号未闭合,会触发你遇到的报错)
common_conf: pkg_source: freebsd_repo: "https://pkg.freebsd.org/ gpg_check: True修复后(补全闭合引号)
common_conf: pkg_source: freebsd_repo: "https://pkg.freebsd.org/" gpg_check: True - 处理roster告警(可选):如果需要使用salt-ssh功能,创建
/usr/local/etc/salt/roster文件按照格式配置目标主机信息即可;如果不用salt-ssh,无需处理该告警。 - 最终验证:先执行
salt '*' pillar.items确认无Pillar渲染报错,再重新执行salt '*' state.apply packages即可正常运行软件包安装状态。
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

