How to Consider Private IP along with Public IP for Cloud DiscoveryIssue As per OOB If 'Discover VMs by IP' checkbox is selected while creating a new Cloud Discovery schedule from Discovery Manager interface, there is a generated IP-Based discovery schedule 'Cloud Resource Discovery Schedule Name - VM Schedule' created and has no IP Ranges configured that runs after the completion of the Cloud Discovery schedule"Cloud Resource Discovery Name - VM Schedule" Configuration Items discovery schedule unexpectedly does not discover the running virtual machines with 2 network interfaces, one public and the other private.For the virtual machines that have 2 network interfaces one private and the other is public, as per the OOB the public IP Addresses can only be discovered but not the private IPReleaseOrlando or ParisCauseFor the IP Discovery, post cloud discovery, it is considering only Public IP but we need to consider Private IPs as well because the customer(s) usually have their MID server deployed in there respective Clouds, that can reach/ping the VMs via the Private IP rather than the Public IP.ResolutionFor schedule discovery to be able to discover Private Ip's during the "Cloud Resource Discovery Name - VM ScheduleIt require CloudDiscoveryScheduleConfig script include to be updatedAs per OOB script if (nicGR.get('object_id', nicId) || nicGR.get('cmdb_ci', vmGR.getUniqueValue())) { if (JSUtil.notNil(nicGR.public_ip)) ipAddressList.push(nicGR.getValue('public_ip')); } } } } return ipAddressList; }, fetchIPAddressesForVMWare: function(ldcId, ipAddressList) { var datastoreGR = new GlideRecord('cmdb_ci_vcenter_datastore'); this.CLOUD_DISCOVERY_UTIL.queryRelCIBasedOnParent(ldcId, 'Contains::Contained by', datastoreGR); datastoreGR.query(); while (datastoreGR.next()) { var vmGR = new GlideRecord('cmdb_ci_vm_instance'); this.CLOUD_DISCOVERY_UTIL.queryRelCIBasedOnParent(datastoreGR.sys_id, 'Provides storage for::Stored on', vmGR); vmGR.query(); while (vmGR.next()) { var nicGR = new GlideRecord('cmdb_ci_nic'); nicGR.get('cmdb_ci', vmGR.getUniqueValue()); if (JSUtil.notNil(nicGR.ip_address)) ipAddressList.push(nicGR.getValue('ip_address')); } } Update Script var nicGR = new GlideRecord('cmdb_ci_nic');var nicGROR = nicGR.addQuery('object_id', nicId);nicGROR.addOrCondition('cmdb_ci', vmGR.getUniqueValue());nicGR.query();while (nicGR.next()) {if (JSUtil.notNil(nicGR.public_ip))ipAddressList.push(nicGR.getValue('public_ip'));if (JSUtil.notNil(nicGR.ip_address))ipAddressList.push(nicGR.getValue('ip_address'));if (JSUtil.notNil(nicGR.private_ip))ipAddressList.push(nicGR.getValue('private_ip')); }}}}// Remove the duplicatesipAddressList = ipAddressList.filter(function(ip, index){return (ipAddressList.indexOf(ip) == index);});return ipAddressList;},fetchIPAddressesForVMWare: function(ldcId, ipAddressList) {var datastoreGR = new GlideRecord('cmdb_ci_vcenter_datastore');this.CLOUD_DISCOVERY_UTIL.queryRelCIBasedOnParent(ldcId, 'Contains::Contained by', datastoreGR);datastoreGR.query();while (datastoreGR.next()) {var vmGR = new GlideRecord('cmdb_ci_vm_instance');this.CLOUD_DISCOVERY_UTIL.queryRelCIBasedOnParent(datastoreGR.sys_id, 'Provides storage for::Stored on', vmGR);vmGR.query();while (vmGR.next()) {var nicGR = new GlideRecord('cmdb_ci_nic');nicGR.addQuery('cmdb_ci', vmGR.getUniqueValue());nicGR.query();while (nicGR.next()) {if (JSUtil.notNil(nicGR.ip_address))ipAddressList.push(nicGR.getValue('ip_address'));if (JSUtil.notNil(nicGR.private_ip))ipAddressList.push(nicGR.getValue('private_ip'));if (JSUtil.notNil(nicGR.public_ip))ipAddressList.push(nicGR.getValue('public_ip'));}}}// Remove the duplicatesipAddressList = ipAddressList.filter(function(ip, index){return (ipAddressList.indexOf(ip) == index); Related LinksNOTE: SCRIPT NEEDS TO UPDATED AS PER SCREENSHOT ATTACHEDFor more information and issue related to VM schedule getting failed review the below Article.https://support.servicenow.com/kb_view.do?sysparm_article=KB0820754https://support.servicenow.com/kb_view.do?sysparm_article=KB0818856