Load Balancer Discovery Pattern Extension steps - CIs not created

Marcin Witoslaw
Tera Contributor

I have created an Extension steps for AVI Load Balancer Controller - Session based pattern. Requirement is to get markers from JSON payload for Load Balancer Services and Load Balancer pools and insert them into cmdb_key_value table. All steps in Pattern debug works ok except the insert step. Configuration Item sys id of Load Balancer Service  is needed for cmdb_key_value table. I dont know how achieve that? I have used EVAL script for configuration_item field no success . I have created a simple script include and call it from the pattern no success as well.Please refer to the attached screenshots. And also my script include which is working in background script.

**********************************************************************************************************

findByObjectId: function(objectId) {
    if (!objectId)
        return "";

 

    objectId = ("" + objectId).trim();

 

    var gr = new GlideRecord("cmdb_ci_lb_service");
    gr.addQuery("object_id", objectId);
    gr.setLimit(1);
    gr.query();

 

    if (gr.next())
        return gr.getUniqueValue();

 

    return "";
}
************************************************************************************
My EVAL script (second solution) without script include : 
var rtrn = "";
var objID = CTX.getAttribute("matched_service_markers[].u_vs_uuid");
var port = CTX.getAttribute("matched_service_markers[].port");
if (objID) {var fullLookupId = port ? (objID + "-" + port) : objID;
var gr = new GlideRecord("cmdb_ci_lb_service");
gr.addQuery("object_id", fullLookupId);
gr.setLimit(1);gr.query();
if (gr.next()) { rtrn = gr.getUniqueValue(); } }
rtrn;
 
Anyone please help .
5 REPLIES 5

Hi @Marcin Witoslaw ,

Looking at you payload try the following Script and change according to your use case 

var rtrn = {};

var payloadObj = JSON.parse(payload || "{}");

prePostNodeLogger.info(prePostLogPrefix + " POST SENSOR STARTED");

if (payloadObj && payloadObj.items) {
    var items = payloadObj.items;

    for (var i = 0; i < items.length; i++) {
        var currentItem = items[i];

        if (currentItem.className == "cmdb_ci_lb_service" || currentItem.className == "cmdb_ci_lb_pool") {
            var values = currentItem.values || {};
            var objectId = values.object_id;
            var sysId = currentItem.sys_id; // IRE populates sys_id after identification

            if (!sysId && objectId) {
                // Fallback: lookup from DB if sys_id not in result
                var targetTable = (objectId.indexOf('virtualservice-') > -1) ? "cmdb_ci_lb_service" : "cmdb_ci_lb_pool";
                var lookup = new GlideRecord(targetTable);
                lookup.addQuery("object_id", objectId);
                lookup.setLimit(1);
                lookup.query();
                if (lookup.next()) {
                    sysId = lookup.getUniqueValue();
                }
            }

            if (sysId && objectId) {
                prePostNodeLogger.info(prePostLogPrefix + " Inserting cmdb_key_value for object_id: " + objectId + " ci sys_id: " + sysId);

                var kv = new GlideRecord("cmdb_key_value");
                kv.initialize();
                kv.setValue("cmdb_ci", sysId);
                kv.setValue("key", "object_id");
                kv.setValue("value", objectId);
                kv.insert();

                // Insert additional markers if needed
                if (values.name) {
                    var kv2 = new GlideRecord("cmdb_key_value");
                    kv2.initialize();
                    kv2.setValue("cmdb_ci", sysId);
                    kv2.setValue("key", "name");
                    kv2.setValue("value", values.name);
                    kv2.insert();
                }

            } else {
                prePostNodeLogger.warn(prePostLogPrefix + " Could not resolve sys_id for object_id: " + objectId);
            }
        }
    }
}

// Post Sensor - payload return is optional but recommended
rtrn = {
    'status': {
        'message': 'AVI Post Sensor - cmdb_key_value records processed.',
        'isSuccess': true
    },
    'patternId': patternId,
    'payload': JSON.stringify(payloadObj)
};

 

If it helped you please do mark it as helpful and accept the solution

 

Thanks,

Vishnu