如何让salt-call仅输出错误/警告,屏蔽摘要等其他输出?
问题
执行salt-call state.apply或salt state.apply时,希望仅在出现错误或警告时输出内容,完全屏蔽摘要等所有其他输出。
- 尝试过
--state-verbose、--state-output的组合,无法屏蔽摘要; - 使用
--out=quiet虽能屏蔽摘要,但会同时移除警告和错误,仅返回状态码; - 当前通过临时文件的方式处理,但步骤繁琐,想找更简洁的参数组合实现需求。
当前使用的命令:
salt-call state.apply <my_state> --state_output=mixed --state_verbose=false --out-file=/tmp/state-out-tmp-$$.txt (($?)) && cat /tmp/state-out-tmp-$$.txt rm /tmp/state-out-tmp-$$.txt
可行参数组合方案
无需临时文件,可通过以下几种参数组合实现需求:
方案1:基础参数+文本过滤
直接用Salt自带参数配合grep过滤关键内容,命令如下:
salt-call state.apply <my_state> --state-output=terse --state-verbose=false 2>&1 | grep -E "(ERROR|WARNING|Failed)"
--state-output=terse:跳过冗余摘要,仅输出状态执行的核心结果;--state-verbose=false:关闭详细执行日志,只保留关键级别的信息;grep部分:精准过滤包含错误、警告关键词的行,只输出需要的内容。
方案2:JSON输出+精准筛选
如果需要更严格的内容控制,可结合--out=json和jq工具提取目标条目:
salt-call state.apply <my_state> --state-output=terse --state-verbose=false --out=json | jq '.[] | select(.result == false or .comment | test("WARNING"))'
--out=json:让Salt以JSON格式输出结果,方便结构化处理;jq部分:筛选出执行结果失败(result == false)或注释含警告的条目,仅输出这类内容。
方案3:quiet输出+错误流重定向
利用Salt的错误/警告信息默认输出到标准错误流的特性,配合--out=quiet屏蔽标准输出:
salt-call state.apply <my_state> --out=quiet 2>&1
--out=quiet:完全屏蔽标准输出的摘要内容;2>&1:将标准错误流(包含错误、警告信息)重定向到标准输出,最终只显示需要的内容。
内容的提问来源于stack exchange,提问作者bchill
相关产品推荐
相关产品推荐

