我正在使用一个简单的盐状态来发送(file.managed)并执行(cmd.run)在小兵/目标上的shell脚本。无论shell脚本发送什么退出值或返回值,盐主程序都会将结果解释为成功。
我尝试使用cmd.script,但在/ tmp下的文件的临时版本上始终出现权限拒绝错误。文件系统未使用noexec挂载,因此我们无法弄清为什么它不起作用。
对于cmd.run,作业输出中的stdout显示失败的返回码和消息,但Salt仍然表示成功。在小兵本地运行脚本会报告返回/退出代码。
我尝试将有状态:True添加到cmd.run块中,并按照文档中的说明在shell脚本末尾格式化了键值对。
针对2个小兵目标奔跑,失败1次成功。两者都将Result报告为True,但正确地用我的键值对填充了Comment。
我尝试了YES / NO,TRUE / FALSE,0/1-无效。
我的shell脚本的结尾,其格式设置如文档中所示。
echo Return_Code=${STATUS}
# exit ${STATUS}
if [[ ${STATUS} -ne 0 ]]
then
echo ""
echo "changed=False comment='Failed'"
else
echo ""
echo "changed=True comment='Success'"
fi
SLS块:
stop_oracle:
cmd.run:
- name: {{scriptDir}}/{{scriptName}}{{scriptArg}}
- stateful: True
- failhard: True
成功小兵的SLS输出:
----------
ID: stop_oracle
Function: cmd.run
Name: /u01/orastage/oraclepsu/scripts/oracle_ss_wrapper.ksh stop
Result: True
Comment: Success
Started: 14:37:44.519131
Duration: 18930.344 ms
Changes:
----------
changed:
True
pid:
26195
retcode:
0
stderr:
stty: standard input: Inappropriate ioctl for device
stdout:
Script running under ROOT
Mon Jul 1 14:38:03 EDT 2019 : Successful
Return_Code=0
失败的奴才的SLS输出:
----------
ID: stop_oracle
Function: cmd.run
Name: /u01/orastage/oraclepsu/scripts/oracle_ss_wrapper.ksh stop
Result: True
Comment: Failed
Started: 14:07:14.153940
Duration: 38116.134 ms
Changes:
shell脚本的输出在失败目标上本地运行:
[oracle@a9tvdb102]:/home/oracle:>>
/u01/orastage/oraclepsu/scripts/oracle_ss_wrapper.ksh stop
Mon Jul 1 15:29:18 EDT 2019 : There are errors in the process
Return_Code=1
changed=False comment='Failed'
shell脚本的输出在成功目标上本地运行:
[ /home/oracle ]
oracle@r9tvdo1004.giolab.local >
/u01/orastage/oraclepsu/scripts/oracle_ss_wrapper.ksh stop
Mon Jul 1 16:03:18 EDT 2019 : Successful
Return_Code=0
changed=True comment='Success'