我在经营红宝石1.9。我有一段代码,它从这两个Status & /usr/sbin/storcli /c0/cv show j命令中提取/usr/sbin/storcli /c0/bbu show j和/usr/sbin/storcli /c0/cv show j的值。
#!/usr/bin/ruby
require 'json'
output_bbu = %x{/usr/sbin/storcli /c0/bbu show j}
output_cv = %x{/usr/sbin/storcli /c0/cv show j}
begin
j = JSON.parse(output_bbu)
k = JSON.parse(output_cv)
result = j["Controllers"][0]["Command Status"]["Status"]
### I'm not sure how to get the value of "State" and store it in "status" variable.
status = k["Controllers"][0]["Response Data"]["Cachevault_Info"][0]["State"]
status = j["Controllers"][0]["Response Data"]["BBU_Info"][0]["State"]
###
rescue Exception => e
puts "CRITICAL: error reading BBU status: #{e}"
exit 2
end
if result != 'Success'
puts "CRITICAL: command not successful, result: #{result}"
exit 2
end问题:
storcli /c0/cv show j或storcli /c0/bbu show j的两个命令之一是在“状态”变量中返回空值,脚本出现错误时失败。
零的未定义方法‘[]:NilClass
storcli /c0/cv show j可以返回"State“的零值,或者storcli /c0/bbu show j可以返回零。因此,我想要做的是将"State“的值存储在可变的”状态“中。
命令输出样本,
$ storcli /c0/cv show j
{
"Controllers":[
{
"Command Status" : {
"Controller" : 0,
"Status" : "Success",
"Description" : "None"
},
"Response Data" : {
"Cachevault_Info" : [
{
"Model" : "CVPM02",
"State" : "Optimal",
"Temp" : "35C",
"Mode" : "-",
"MfgDate" : "2013/09/17"
}
]
}
}
]
}参见,这里它将"State“的值返回为”最优“,因此我想将它的值存储在变量”状态“中。
样品输出为零,
$ storcli /c0/bbu show j
{
"Controllers":[
{
"Command Status" : {
"Controller" : 0,
"Status" : "Failure",
"Description" : "None",
"Detailed Status" : [
{
"Ctrl" : 0,
"Status" : "Failed",
"Property" : "-",
"ErrMsg" : "use /cx/cv",
"ErrCd" : 1001
}
]
}
}
]
}发布于 2016-11-08 07:52:16
由于您没有从一个命令中获得“响应数据”,所以可以使用以下命令
status = k["Controllers"][0]
.fetch(["Response Data"], {})
.fetch(["Cachevault_Info"], {})
.fetch([0], {})["Status"]
status ||= j["Controllers"][0]["Response Data"]["BBU_Info"][0]["State"]对于||=,如果来自status = k的结果是nil,它将设置status = j
https://stackoverflow.com/questions/40481052
复制相似问题