Name
sn_cmdb_ci_class.OTUtils
Description
Operational Technology utility class.
Script
var OTUtils = Class.create();
OTUtils.CLASSES_TO_SYNC_IP_ADDRESS = ['cmdb_ci_nids'];
OTUtils.CLASSES_TO_SKIP_OT_ASSET = ['cmdb_ci_nids', 'cmdb_ci_ni_equipment_holder', 'cmdb_ci_ni_telco_equipment', 'cmdb_ci_interface_card'];
OTUtils.CMDB_CONTROL_MODULE_CLASS = "cmdb_ci_ot_control_module";
OTUtils.CMDB_OWNS_BY_REL_TYPE_SYSID = "25242fb2377a9200738d021a54990e88";
OTUtils.syncOTAssetReferenceOnCI = function(otID, ciID, setWorkflow) {
if (otID && ciID) {
setWorkflow = setWorkflow || false;
var grCI = new GlideRecord('cmdb_ci');
if (grCI.get('sys_id', ciID)) {
grCI.setWorkflow(setWorkflow);
grCI.setValue('cmdb_ot_entity', otID);
grCI.update();
}
}
};
OTUtils.isValidOTClass = function(className) {
return OTUtils.CLASSES_TO_SKIP_OT_ASSET.indexOf(className) < 0;
};
OTUtils._getIPfromParam = function(paramObj) {
var ip = paramObj.ip;
return !ip ? '' : ip.trim();
};
OTUtils._getCIfromParam = function(paramObj) {
var ci = new GlideRecord('cmdb_ci');
if (!ci.get(paramObj.ciSysId))
return null;
// Specifically always send back the CI for certain classes
if (OTUtils.CLASSES_TO_SYNC_IP_ADDRESS.indexOf(ci.getValue('sys_class_name')) >= 0)
return ci;
if (!ci.getValue('cmdb_ot_entity'))
return null;
return ci;
};
OTUtils._getIPArrayfromCI = function(ci) {
var ips = ci.getValue('ip_address');
ips = !ips ? '' : ips.trim();
var ipArray = [];
if (ips.length > 0)
ipArray = ips.split(',');
return ipArray;
};
OTUtils._addIPtoCI = function(ip, ci) {
var ipArray = OTUtils._getIPArrayfromCI(ci);
var index = ipArray.indexOf(ip);
if (index >= 0)
return false;
ipArray.push(ip);
ci.setValue('ip_address', ipArray.toString());
return true;
};
OTUtils._removeIPfromCI = function(ip, ci) {
var ipArray = OTUtils._getIPArrayfromCI(ci);
var index = ipArray.indexOf(ip);
if (index < 0)
return false;
ipArray.splice(index, 1);
ci.setValue('ip_address', ipArray.toString());
return true;
};
OTUtils.syncOTAssetIPAddress = function(operation, paramObjStr) {
var paramObj = new global.JSON().decode(paramObjStr);
if (gs.nil(paramObj)) {
gs.error("[OTUtils - syncOTAssetIPAddress]: param object parsing failed for " + paramObjStr);
return;
}
var currIP = OTUtils._getIPfromParam(paramObj.current);
var currCI = OTUtils._getCIfromParam(paramObj.current);
var prevIP;
var prevCI;
if (operation === 'insert' && currCI && OTUtils._addIPtoCI(currIP, currCI) || operation === 'delete' && currCI && OTUtils._removeIPfromCI(currIP, currCI)) {
currCI.setWorkflow(false);
currCI.update();
} else if (operation === 'update') {
prevIP = OTUtils._getIPfromParam(paramObj.previous);
if (currCI && paramObj.previous.ciSysId === paramObj.current.ciSysId) {
OTUtils._removeIPfromCI(prevIP, currCI);
OTUtils._addIPtoCI(currIP, currCI);
currCI.setWorkflow(false);
currCI.update();
} else {
prevCI = OTUtils._getCIfromParam(paramObj.previous);
if (prevCI && OTUtils._removeIPfromCI(prevIP, prevCI)) {
prevCI.setWorkflow(false);
prevCI.update();
}
if (currCI && OTUtils._addIPtoCI(currIP, currCI)) {
currCI.setWorkflow(false);
currCI.update();
}
}
}
};
OTUtils._fetchParentCI = function(ci) {
var gr = new GlideRecord("cmdb_rel_ci");
gr.addQuery("type", OTUtils.CMDB_OWNS_BY_REL_TYPE_SYSID);
gr.addQuery("child", ci);
gr.orderByDesc("sys_updated_on");
gr.setLimit(1);
gr.query();
if (gr.next())
return gr.getValue("parent");
return null;
};
OTUtils.prototype = {
initialize: function() {},
isOTAsset: function(cmdb_ci_id) {
var grOT = new GlideRecord('cmdb_ot_entity');
grOT.addQuery('ot_asset', cmdb_ci_id);
grOT.query();
return grOT.hasNext();
},
type: 'OTUtils'
};
Sys ID
21015bba734620100fe565a80ff6a721