The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Pradyumna Das
Tera Expert

Hi Folks,

 

Please use the below script in scripted rest API if you wanted to automate CI Discovery Process.

 

Note: Create one query parameter named as IPAddress so that while calling the endpoint the requester has to pass the IP of the CI in the url parameter. 

 

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    function availableMidServer() {
        var ecc = new GlideRecord('ecc_agent');
        ecc.addQuery('status', 'up');
        ecc.query();
        while (ecc.next()) {
            return ecc.name;
        }
        return 0;
    }

    function validIP(target) {
        if (!target)
            return false;

        // Only matches IPV4 dot decimal notation 255.255.255.255
        var regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
        return target.match(regex) != null;
    }
    var jsonObject = {
        "Discovery": {}
    };
    var message = '';
    var mid = '';
    var result;
    var dis = new Discovery();
    var ip = request.queryParams.IPAddress.toString(); // Please create one query parameter named as IPAddress
    var status = '';
    jsonObject.Discovery['IP'] = ip;
    if (!validIP(ip)) {
        status = 'Fail';
        message = 'IP is not Valid';
    } else {
        var ips = [];
        ips.push(ip);
        try {
            var params = dis.getScheduleContainingAnyIP(ips);
            if (params == null) {
                message = 'No Discovery schedule configured for the IP Address provided.';
                result = availableMidServer();
                if (result == 0) {
                    status = 'Fail';
                    message += 'No MID Servers are running currently. Contact ServiceNow Administrator.';
                } else {
                    mid = result;
                }
            } else {
                var mid_type = params.schedule.midSelMethod;
                if (mid_type == 'specific_mid') {
                    var ecc = new GlideRecord('ecc_agent');
                    if (ecc.get(params.schedule.midServerID)) {
                        if (ecc.status.toLowerCase() == 'up') {
                            mid = ecc.name;
                        } else {
                            message = 'The MID server assosiated with the schedule is not running. ';
                            result = availableMidServer();
                            if (result == 0) {
                                status = 'Fail';
                                message += 'No other MID Servers are running currently. Contact ServiceNow Administrator.';
                            } else {
                                mid = result;
                            }
                        }
                    }
                } else if (mid_type == 'specific_cluster') {
                    var ecc_cluster = new GlideRecord('ecc_agent_cluster');
                    if (ecc_cluster.get(params.schedule.midClusterID)) {
                        var ecc_cluster_mid = new GlideRecord('ecc_agent_cluster_member_m2m');
                        ecc_cluster_mid.addQuery('cluster', ecc_cluster.sys_id);
                        ecc_cluster_mid.addQuery('agent.status', 'up');
                        ecc_cluster_mid.query();
                        if (ecc_cluster_mid.next()) {
                            mid = ecc_cluster_mid.agent.name;
                        } else {
                            message = 'None of the MID Servers assosiated with the scheduled cluster are running.';
                            result = availableMidServer();
                            if (result == 0) {
                                status = 'Fail';
                                message += 'No other MID Servers are running currently. Contact ServiceNow Administrator.';
                            } else {
                                mid = result;
                            }
                        }
                    }
                } else {
                    result = availableMidServer();
                    if (result == 0) {
                        message += 'No MID Servers are running currently. Contact ServiceNow Administrator.';
                    } else {
                        mid = result;
                    }
                }
            }
            if (mid != '') {
                var statusID = dis.discoveryFromIP(ip, mid, 'Quick_Discovery');
                status = 'Success';
                jsonObject.Discovery["Mid Server"] = mid;
                if (statusID != '') {
                    var dis_sta = new GlideRecord('discovery_status');
                    dis_sta.addQuery('sys_id', statusID.toString());
                    dis_sta.query();
                    if (dis_sta.next()) {
                        jsonObject.Discovery["StatusID"] = dis_sta.number;
                    }
                }
                message += ' Discovery has been triggred successfully.';
            }
        } catch (error) {
            status = 'Fail';
            message = error;
        }
    }
    jsonObject.Discovery['Status'] = status;
    jsonObject.Discovery['Message'] = message;
    return jsonObject;

})(request, response);

 

Please mark it helpful if it helps you in any manner. 

 

Thank You, 

Pradyumna Das

Version history
Last update:
‎04-16-2023 10:29 PM
Updated by:
Contributors