我试图抑制 salt-call/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
...但这似乎有点过分了。
我缺少一些选项组合吗?
简单的方法是输出 json 并通过额外的解析步骤将其通过管道传输:
salt-call state.apply <my_state> --out=json | jq '.local[] | select(.result == false)'
更简洁的方法是实现自己的输出器,它返回您想要看到的内容:
def output(data, **kwargs):
failing = {host: {state: ret["comment"] for state, ret in r.items()
if ret["result"] is False}
for host, r in data.items()}
return json.dumps(failing, indent=4)
请注意,还应该记录错误和警告,因此您可以简单地执行:
salt-call state.apply <my_state> --out=quiet --log-level=warning