1.北向接口调试
北向接口的Statements块中常会做一些数据处理,而这里数据处理的输入和输出都非常不直观,比如下面的情况:Statements/Members()
"Members": {
"Input": "${ProcessingFlow[1]/Destination/Members}",
"Steps": [
{
"Type": "Prefix-Trim",
"Formula": "/bmc/kepler/"
},
{
"Type": "Prefix-Add",
"Formula": "/redfish/v1/"
},
{
"Type": "L-Pair",
"Formula": "@odata.id"
}
]
}
这里每一个step的输入和输出都很难看出来是什么,这个时候可以使用"Type": “Plugin”,,plugin的lua脚本中可以require ‘mc.logging’,我们可以plugin脚本中加打印来查看具体的入参,以便我们进行定制化处理。像下面那样添加:
{
"Type": "Plugin",
"Formula": "utils.printInput(Input))"
}
在steps中,每一步的入参都是Input,返回值也是Input,在plugin目录下的utils.lua中实现如下函数:
function m.printInput(objs)
if objs == nil then
return 0
end
for _, obj in pairs(objs) do
for key, val in pairs(obj) do
log:debug('key:%s =======', tostring(key))
log:debug('val:%s =======', tostring(val))
obj[key], _ = string.gsub(val,"EventLog","SEL")
end
end
return objs
end
如此即可完成对北向接口的打印调试。在完成调试后,对于比较简单的代码,我们可以使用"Type": "Script"来做:
{
"Type": "Script",
"Formula": "if Input ~= nil then for _, obj in pairs(Input) do for key, val in pairs(obj) do obj[key], _ = string.gsub(val,'EventLog','SEL') end end end return Input"
}
PS:在printInput函数的for循环中,想要修改obj中的属性值,不能直接修改val,需要用obj[key]的方式来修改。
2.属性定制Modify
在属性定制化中,modify修改基础类型的属性,为替换值,比如字符串、数值类型的属性,通过modify配置同名属性,则会覆盖原本的值。而对于对象、数组类型的属性,则会进行附加。steps便属于会附加的类型,若对Statements/Members()进行modify:
"Modify": {
"Statements": {
"Members": {
"Steps": [
{
"Type": "Script",
"Formula": "if Input ~= nil then for _, obj in pairs(Input) do for key, val in pairs(obj) do obj[key], _ = string.gsub(val,'EventLog','SEL') end end end return Input"
}
]
}
}
}
最后生成的Statements/Members()则是:
"Members": {
"Input": "${ProcessingFlow[1]/Destination/Members}",
"Steps": [
{
"Type": "Prefix-Trim",
"Formula": "/bmc/kepler/"
},
{
"Type": "Prefix-Add",
"Formula": "/redfish/v1/"
},
{
"Type": "L-Pair",
"Formula": "@odata.id"
},
{
"Type": "Script",
"Formula": "if Input ~= nil then for _, obj in pairs(Input) do for key, val in pairs(obj) do obj[key], _ = string.gsub(val,'EventLog','SEL') end end end return Input"
}
]
}