IBM Cloud Platform discovery

reference australia Updated Sep 10, 2026 25 min read ibm-cloud-platform-discovery.md
Raw file servicenow.com

The ServiceNow Discovery application finds IBM Cloud Platform components (Softlayer API v3 and v3.1 and Bluemix API v2) using the IBM Cloud Platform patterns. Discovering some of these resources might require updating to the latest version of the Discovery and Service Mapping Patterns application from the ServiceNow Store.

You can use the patterns on the ServiceNow AI Platform using London Patch 7, Madrid Patch 2, or later releases.

Request apps on the Store

Visit the ServiceNow Store to view all the available apps, and for information about submitting requests to the store. For cumulative release notes information for all released apps, see the ServiceNow Store version history release notes.

Prerequisites

  • MID Server

    Use a dedicated MID Server for cloud discovery. The MID Server must have 16 Cores, 8 GB with 4 GB Java Memory Model (JVM) memory allocation.

    Deploy and connect the dedicated MID Server with internet access.

  • Credentials

    The cloud resources are in an IBM cloud. Create the IBM Credentials for accessing your IBM account.

    1. Navigate to Discovery > Credentials.

    2. Click New.

    3. Click IBM Credentials and then fill in the form:

      Field Description
      Name Credential name. An example is ibm-cred.
      Order Order in which the platform tries this credential as it attempts to log on to devices. A smaller number indicates that the credential appears higher in the list. Establish the credential order when using large numbers of credentials or when security locks out users after three failed login attempts. If all the credentials have the same order number, or none, the instance tries the credentials in a random order. The default value is 100.
      Softlayer API User Username for the Softlayer API. Use the Softlayer API Username defined in the Softlayer console.
      Softlayer API Key Key for the Softlayer API. Use the Softlayer API Key that is defined in the Softlayer console.
      Bluemix API Key Key for the Bluemix API. Use the Bluemix API Key defined in the IBM Cloud console.
    4. Click Submit.

  • Create an IBM cloud service account

    Use the credentials defined in the preceding procedure to create the IBM cloud service account.

  1. Navigate to Cloud Provisioning and Governance > Service Accounts.

  2. Click New.

  3. On the form, fill in the fields:

    Field Description
    Name Credential name. An example is ibm-snow
    Account Id IBM account ID name. Enter the IBM Account ID.
    Discovery credentials Discovery credentials that you defined earlier.
    Datacenter Type Datacenter type. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]
  4. Click Submit.

  • Create a Discovery schedule

    To configure a Discovery schedule through Discovery Admin Workspace, see Create an IBM Discovery schedule in Discovery Admin Workspace.

    To configure a serverless Discovery schedule:

    1. On the ServiceNow AI Platform, navigate to Discovery > Discovery Schedules.

    2. Click New.

    3. On the form, fill in the fields:

      Field Description
      Name Name for this Discovery schedule. As an example, Serverless Pattern
      Discover Discover type. Select Serverless
      MID Server Name of the MID Server. As an example, Discovery_Server
      Active Option for enabling this schedule for Discovery. Select this check box to enable Discovery.
      Run Specifies how frequently to run the Discovery schedule.
    4. Right-click the header of the Discovery Schedule form and select Save.

      [Omitted image "serverless-execution-pattern.png"] Alt text: Serverless execution pattern

    5. Click the Serverless Execution Patterns tab.

    6. Click New.

    7. On the form, fill in the fields:

Field

Description

Name

Name for this Serverless Execution Pattern. As an example, IBM1

Pattern

Name of the pattern that you want to run.[Omitted image "ibm-patterns.png"] Alt text: IBM patterns

If you want to run multiple patterns, create multiple records.

Proxy Host

Fully qualified domain name of the machine on which you are installing the proxy server. Specify Global.

Active

Option for enabling this schedule for Discovery. Select this check box to enable Discovery.

8. Configure the parameters required by the IBM Cloud Platform pattern as follows:
    |Parameter|Description|
    |---------|-----------|
    |cloud\_cred\_id|The sys\_id of the IBM credentials specified into the configuration.|
    |cloud\_account\_id|The IBM account ID.|
    |cloud\_datacenter\_type|cmdb\_ci\_ibm\_datacenter|

9.  **Update**.
10. To start Discovery, navigate to the Serverless Discovery definition and click **Discover Now**.
  • IBM flow - horizontal discovery

    • To perform a discovery using a serverless schedule, the IBM Cloud Platform patterns that were selected run and discover IBM Cloud Platform resources.
    • To perform a discovery using a service account, a full IBM Cloud Platform discovery schedule runs, discovering all supported IBM Cloud Platform resources.
  • Cloud custom operation

    Cloud REST – Add Response to Context

    Operation for Cloud REST queries that supports large-scale responses and better memory usage.

    • Specify all the fields with the same values as in the Cloud REST Query custom operation, except to specify the table for the response, which is set in the Response Variable Name field.

      [Omitted image "response-variable-name.png"] Alt text: Response field

    • Set Define parsing to None. Methods to retrieve data for the IBM account

    1. Navigate to Pattern Designer > Custom Operations.

      [Omitted image "cloud-rest-query.png"] Alt text: Cloud REST query

    2. Click Cloud REST – add response to context. Method: Get Call

    API URLs used to retrieve the data:

    • Load Balancer https://api.softlayer.com/rest<api_version>/SoftLayer_Network_LBaaS_LoadBalancer/getAllObjects?objectMask=mask[listeners[defaultPool],members,healthMonitors]
    • Network https://api.softlayer.com/rest/<API_VERSION>/SoftLayer_Account/getNetworkVlans?objectMask=mask[primaryRouter.datacenter,name,id,vlanNumber,networkSpace]
    • Network https://api.softlayer.com/rest/<API_VERSION>/SoftLayer_Account/getSubnets?objectMask=mask[datacenter]
    • Networkhttps://api.softlayer.com/rest/<API_VERSION>/SoftLayer_Account/getSecurityGroups?objectMask=mask[rules]
    • Organizations and Spaces https://api.<region>.bluemix.net/v2/organizations
    • https://api.<region>.bluemix.net/v2/spaces
    • SSH Key https://api.softlayer.com/rest/v3/SoftLayer_Account/SoftLayer_Account/getSshKeys
    • Storage https://api.softlayer.com/rest/<api_version>/SoftLayer_Account/getNetworkStorage
    • Virtual Server https://api.softlayer.com/rest/v3.1/SoftLayer_Account/getSecurityGroups
    • http://api.softlayer.com/rest/v3.1/SoftLayer_Account/getSecurityGroups?objectMask=mask[id,name,networkComponentBindings[networkComponentId,networkComponent[networkId,guest[fullyQualifiedDomainName,hostname,id,datacenter[name]]]]]
    • https://api.softlayer.com/rest/v3.1/SoftLayer_Account/getVirtualGuests?objectMask=mask[hostname,domain,powerState,fullyQualifiedDomainName,notes,id,statusId,placementGroupId,sshKeys[label,key,id,fingerprint,createDate,modifyDate,notes],primaryBackendIpAddress,primaryIpAddress,networkVlans[id,name,note,vlanNumber],blockDeviceCount,blockDevices[device,diskImageId,mountType,guestId,id,mountMode],allowedNetworkStorage[id,fileNetworkMountAddress,iscsiTargetIpAddresses,nasType,username,serviceResourceBackendIpAddress],maxCpu,maxMemory,datacenter,networkComponentCount,regionalGroup,datacenter,location,operatingSystem[id,softwareDescription[id,name,longDescription,manufacturer,referenceCode,version]],networkComponents[guestId,id,port,name,primarySubnet[networkIdentifier,id,networkVlan[id]],status,macAddress,primaryIpAddress]]
  • EVAL functions

    Use the following EVAL function to transform the Load Balancer API response into a full JSON format. The default response is formatted as “[<resource objects>]”.

    JavaScript
    var cloud_lb_response = ${cloud_lb_response};for (var i = 0; i < cloud_lb_response.size(); i++){      cloud_lb_response.set(i, '{"result":[' + cloud_lb_response.get(i) + ']}');}CTX.setAttribute("cloud_lb_response", cloud_lb_response;

    Use the following EVAL function to transform the Network API response into a full JSON format. The default response is formatted as “[<resource objects>]”.

    JavaScript
    var network_response = ${network_response};for (var i = 0; i < network_response.size(); i++){      network_response.set(i, '{"result":[' + network_response.get(i) + ']}');}CTX.setAttribute("network_response", network_response);

    Use the following EVAL function to get the IBM region from the LB availability zone (datacenter). The same function is used for other resources inside the pattern.

    JavaScript
    var res = "";res = IbmCloudDcToRegion.convertDctoRegion(${cloud_lb[].cloud_lb_az_short_name});

    Use the following EVAL function to select the required algorithm in the pattern.

    JavaScript
    var rtrnvar lb_algorithm = ${cloud_lb_pools[].lb_algorithm}.toString();switch (lb_algorithm){     case "ROUNDROBIN":      lb_algorithm = "round-robin";      break;       case "WEIGHTED_RR":      lb_algorithm = "round-robin";      break;             case "LEASTCONNECTION":      lb_algorithm = "least-connections";      break;        default: break;

    Use the following EVAL function to parse the unique region to the account that hosts the Organizations and the corresponding spaces.

    JavaScript
    var tableWithoutDuplicates = '';tableWithoutDuplicates =  DuplicateRemover.removeDuplicates(${account_region},["region_name"]);CTX.setAttribute("account_region_unique",  tableWithoutDuplicates);

    Use the following EVAL function to get information for all the organizations that are assigned to the IBM cloud account. Iteration for getting the unique region is performed.

    JavaScript
    var cloudcall = new CloudRestAPIClient();var resourceTable = ${account_region_unique[*].region_name};var tableSize = resourceTable.size();                                     var tmp_response = new Packages.java.util.ArrayList();var all_organizations_response = new Packages.java.util.ArrayList();for (var i = 0; i < tableSize ; i++){   if  (!resourceTable.get(i)) continue;   var url = "https://api."+resourceTable.get(i)+".bluemix.net/v2/organizations";   tmp_response = cloudcall.arrayListExecute(${service_account}, null, url, null, 'GET', null, 'true', CTX);      for (var j = 0; j < tmp_response.size(); j++){      all_organizations_response.add('{"result":[' + tmp_response.get(j) + ']}');   }}CTX.setAttribute("all_organizations_response", all_organizations_response);

    Use the following EVAL function to get information for all the IBM cloud account assigned spaces, where the iteration for getting the unique region is performed.

    JavaScript
    var rtrn = '';var cloudcall = new CloudRestAPIClient();var resultList = new Packages.java.util.ArrayList();var rest = '';var resourceTable = ${account_region_unique[*].region_name};var result = new Packages.java.util.ArrayList();var all_organizations_response = ${all_organizations_response}for (var i = 0; i < resourceTable.size() ; i++){   var url = "https://api."+resourceTable.get(i)+".bluemix.net/v2/spaces";   result = cloudcall.arrayListExecute(${service_account}, null, url, null, 'GET', null, 'true', CTX);   for (var z = 0; z < all_organizations_response.size(); z++){      var jsonObj = JSON.parse(result.get(z));      ms.log("length "+jsonObj.resources.length);for(var j=0;j<jsonObj.resources.length;j++){         var guid = jsonObj.resources[j].metadata.guid;         var url = jsonObj.resources[j].metadata.url;         var name = jsonObj.resources[j].entity.name;         var organization_guid = jsonObj.resources[j].entity.organization_guid;         var allow_ssh = jsonObj.resources[j].entity.allow_ssh ? "true" : "false";         var row = new Packages.java.util.HashMap(); Packages.com.snc.sw.log.DiscoLog.getLogger("IBM Cloud Space and Org").debug(">>>>>>>>>>>>>||||||||||||>>>>>> region alias=" + resourceTable.get(i));          Packages.com.snc.sw.log.DiscoLog.getLogger("IBM Cloud Space and Org").debug(">>>>>>>>>>>>>||||||||||||>>>>>> region full name=" + IbmCloudDcToRegion.regionNamebyAlias(resourceTable.get(i)));          row.put("region", IbmCloudDcToRegion.regionNamebyAlias(resourceTable.get(i)));         row.put("space_guid",guid);         row.put("space_url",url);         row.put("space_name",name);         row.put("space_organization_guid",organization_guid);         row.put("space_allow_ssh",allow_ssh);         row.put("rest", rest);         resultList.add(row);      }   }   CTX.setAttribute('spaces_table', resultList);}

    Use the following EVAL function to filter all the spaces by unique region.

    JavaScript
    var space_region = ${spaces_table[].region};
    Packages.com.snc.sw.log.DiscoLog.getLogger("IBM Cloud Space and Org").debug("filtering space according to LDC. space_region=" + space_region);var regions = ${cmdb_ci_ibm_datacenter[*].region};Packages.com.snc.sw.log.DiscoLog.getLogger("IBM Cloud Space and Org").debug("input regions list=" + regions.toString());
    var rtrn = "false";if(regions.contains(space_region)) {    rtrn = "true";}rtrn;

    Use the following EVAL function to filter all the spaces by storage discovery.

    JavaScript
    var storage_response = ${storage_response};for (var i = 0; i < storage_response.size(); i++){      storage_response.set(i, '{"result":[' + storage_response.get(i) + ']}');}CTX.setAttribute("storage_response", storage_response);

    Use the following EVAL function to transform the API response into full JSON format, as the untouched response is formatted as “[<resource objects>]”.

    JavaScript
    var ssh_key = ${ssh_key_json};for(var i = 0; i < ssh_key.size(); i++){   ssh_key.set(i,'{"result\" : ' + ssh_key.get(i) + "}");}CTX.setAttribute("ssh_key_json", ssh_key);

    Use the following EVAL function to populate the availability zone into the storage volume table.

    JavaScript
    var rtrn;var resource_group = ${network_storage[].resource_name};var regex = /.*-(\w{3}\d{2}).*/;var az_name = regex.exec(resource_group);if (az_name) {   rtrn = az_name[1];} else {   rtrn;}

    Use the following EVAL function to populate the region into the storage volume table.

    JavaScript
    var res = "";res = IbmCloudDcToRegion.convertDctoRegion(${network_storage[].availability_zone});

    Use the following EVAL function to transform the size of the storages to bytes from gigabytes.

    JavaScript
    var rtrn = '';
    var size = ${network_storage[].size};
    rtrn = (parseInt(size) * 1073741824) + ‘’;

    Use the following EVAL function to transform the size of the storages to bytes from gigabytes.

    JavaScript
    var cloudcall = new CloudRestAPIClient();var resourceTable = ${network_storage[*].storage_object_id};var tableSize = resourceTable.size();var allResources = new Packages.java.util.ArrayList();var response = new Packages.java.util.ArrayList();for (var i = 0; i < tableSize ; i++){   if  (!resourceTable.get(i)) continue;   var url = "https://api.softlayer.com/rest/"+${api_version}+"/SoftLayer_Network_Storage/"+resourceTable.get(i)+"/getObject?objectMask=mask[snapshots]";   // the commented out code is to call the "Cloud Rest Call" API      allResources = cloudcall.arrayListExecute(${service_account}, null, url, null, 'GET', null, 'true', CTX);   for (var j = 0; j < allResources.size(); j++){      response.add('{"result":[' + allResources.get(j) + ']}');   }}CTX.setAttribute("all_snapshots_response", response);

    Use the following EVAL closure that transforms the JSON that is received from the API to a format that the JSON parser can work with. The default JSON is saved in $vm_json_array, the new JSON is in $vm_json.

    JavaScript
    var vm_json = new Packages.java.util.ArrayList();vm_json.addAll(${vm_json_array});
    for (var i = 0 ; i < vm_json.size(); i++){      vm_json.set(i, '{\"result\":[' + vm_json.get(i) + ']}');}
    CTX.setAttribute("vm_json", vm_json);

    Use the following EVAL closure that returns ‘on’ if the power status is running. The value ‘off’ is returned if the power status is off.

    JavaScript
    var power = ${cmdb_ci_vm_instance[].state};var rtrn = '';
    if (power == 'Running'){   rtrn = "on";}else {   rtrn = "off"}

    Use the following EVAL closure that returns the region of the CI, based on provided availability zone name.

    JavaScript
    var az = ${cmdb_ci_vm_instance[].avail_zone};var rtrn = '';rtrn = IbmCloudDcToRegion.convertDctoRegion(az);

    Use the following EVAL closure that builds a HashMap of HashSets, Connecting VMs with their network storages. The following key is used:

    • P = page
    • V = VM
    • N = network storage
    JavaScript
    var rtrn = '';var vmJson = ${vm_json_array};var VMtoStorageHashMap = new Packages.java.util.HashMap();
    for (var p = 0 ; p < vmJson.size(); p++){   var page = JSON.parse(vmJson.get(p));   for (var now_V in page){      if (page[v].allowedNetworkStorage.length > 0){         var vm_id = page[v].id + '';         var storageSet = new Packages.java.util.HashSet();         for (var n in page[v].allowedNetworkStorage){            storageSet.add(page[v].allowedNetworkStorage[n].id + '');         }         VMtoStorageHashMap.put(vm_id,storageSet);      }   }}CTX.setAttribute("VMStorageCache", VMtoStorageHashMap);

    Use the following EVAL closure to remove duplicate entries from tables.

    JavaScript
    var tableWithoutDuplicates = '';tableWithoutDuplicates = DuplicateRemover.removeDuplicates(${cmdb_ci_os_template},["object_id"]);CTX.setAttribute("cmdb_ci_os_template", tableWithoutDuplicates);

    Use the following EVAL closure that builds a list of VM IDs that are related to the current security group ID.

    JavaScript
    var rtrn = '';//get the Security Group ID of the current record in the table for comparisonvar current_table_id = ${security_groups[].sec_group_id};var current_table_id_string = current_table_id + '';
    // get the list of instance's ID that will be then added to Security Group tablevar needed_value_id_list = ${sec_group_network_components[*].vm_instance_id};//get the list of Security Group IDs in the Network Component table, which will then be compared one by one to the current record of the security_groups tablevar compare_id_list = ${sec_group_network_components[*].sec_group_id};
    var beforeReturn = '';var separator = '';for (var i = 0; i <  compare_id_list.size(); i++)   {      if   (current_table_id_string == compare_id_list.get(i)){            beforeReturn += separator + needed_value_id_list.get(i);      separator = ',';   }}rtrn = beforeReturn;

    Use the following EVAL closure that builds a HashMap of HashSet between security groups and the VMs that are configured to use them.

    JavaScript
    rtrn = '';var secGroupTable = ${cmdb_ci_endpoint_comp_security};var secToVMHashSet = new Packages.java.util.HashMap();
    // this loop worst case O(N*M) M = security groups, N = VMsfor(var i=0; i<secGroupTable.size(); i++){   var securityTableId = secGroupTable.get(i).get('object_id');   var vmListStr = secGroupTable.get(i).get('instance_list');   var vmList = vmListStr.split(",");
       var vmSet = new Packages.java.util.HashSet();   for (var j in vmList){      vmSet.add(vmList[j]);   }
       secToVMHashSet.put(securityTableId,vmSet);}CTX.setAttribute("securityVMCache",  secToVMHashSet);

    Use the following EVAL closure that returns ‘true’ if the current VM is using the current security group ID.

    JavaScript
    var rtrn = '';var vm_id = ${cmdb_ci_vm_instance[].object_id};var vmHashSet = ${securityVMCache}.get(${cmdb_ci_endpoint_comp_security[].object_id});rtrn = vmHashSet.contains(vm_id);

    Use the following EVAL closure that returns ‘true’ if the current VM is using the current storage volume.

    JavaScript
    var rtrn = '';var vm_id = ${cmdb_ci_vm_instance[].object_id};var vol_id = ${cmdb_ci_endpoint_iscsi[].object_id};var vmHashSet = ${VMStorageCache}.get(vm_id);if (vmHashSet){   rtrn = vmHashSet.contains(vol_id);}else {   rtrn = 'false'}

    Use the following EVAL function to transform the API response into full JSON format, as the untouched response is formatted as “[<resource objects>]”.

    JavaScript
    var cloud_response = ${location_groups_response}for (var i = 0; i < cloud_response.size(); i++){    cloud_response.set(I, '{"result":[' + cloud_response.get(i) + ']}');}CTX.setAttribute("location_groups_response", cloud_response);

    Parses the unique Location Groups in the “location_groups_az” table basdon the column “lg_id” and creates a new table "location_groups_az_unique“ that contains the result.

    JavaScript
    var tableWithoutDuplicates= '';tableWithoutDuplicates = DuplicateRemover.removeDuplicates(${location_groups_az},["lg_id"]);CTX.setAttribute("location_groups_az_unique", tableWithoutDuplicates);

    Creates a list of Availability Zones per Location Group, that is stored in a column new column in the location_groups_az_uniquetable. The list records are divided by commas purposely, so that unique relations could be made in consecutive step.

    JavaScript
    var current_table_id= ${location_groups_az_unique[].lg_id};var current_table_id_string = current_table_id+ '';var needed_v alue_id_list = ${location_groups_az[*].lg_az_id};var compare_id_list= ${location_groups_az[*].lg_id};var beforeReturn= '';var separator = ',';for (var i= 0; i< compare_id_list.size(); i++)  {    if (current_table_id_string == compare_id_list.get(i)){    beforeReturn += separator + needed_v alue_id_list.get(i) + separator;  }}rtrn = beforeReturn;
  • Activate the cloud-related CI relationships

    To include discovered components into service instances, enable CI relationships used in tag-based discovery by Service Mapping. These CI relationships are available from the 1.0.68 release on the ServiceNow Store. For operational steps, see Tag-based discovery configuration.

  • (Optional) Populate Service Account and Logical Datacenter fields in cloud CIs

    Starting with Discovery and Service Mapping Patterns version 1.30.2, you can improve query performance by populating Service Account and Logical Datacenter fields directly in cloud CIs. For more information, see Improved query performance with direct field population in CI tables.

Data collected by Discovery during horizontal discovery

Data is collected using these patterns:

  • IBM Cloud Load Balancer
  • IBM Cloud Location Groups
  • IBM Cloud Network
  • IBM Cloud Organizations and Spaces
  • IBM Cloud Resource Groups
  • IBM Cloud SSH Key
  • IBM Cloud Storage
  • IBM Cloud Virtual Server

Data collected for IBM components:

  • IBM Cloud Load Balancer discovered resources

Field

Description

Main CI: cmdb_ci_cloud_load_balancer

name

Load balancer name.

object_id

Load balancer unique identifier.

fqdn

Load balancer address (host name).

dns_name

Load balancer domain server name.

short_description

Load balancer description that you provide for easy identification.

operational_status

Load balancer status, one of either: - ONLINE

  • OFFLINE

location

Datacenter location.

state

Load balancer provisioning status.

Related CI: cmdb_ci_lb_service

name

Pattern created name, composed of:- load balancer name

  • type of protocol
  • resource type listener

object_id

Load balancer unique identifier.

port

Port number of the listener.

front_end_port

Protocol port number of the listener.

listener_protocol

Protocol of the listener. One of the following protocols:- TCP

  • HTTP
  • HTTPS

operational_status

Provisioning status of the listener.

Related CI: cmdb_ci_lb_pool

name

Pattern created name, composed of: - load balancer name

  • type of protocol
  • port
  • resource type “pool”

object_id

Load balancer pool unique identifier.

port

Protocol port of the backend.

pool_status

Load balancer pool provisioning status.

load_balancing_method

Load balancing method. One of the following algorithms: - "ROUNDROBIN"

  • "WEIGHTED_RR"
  • "LEASTCONNECTION"

Related CI: cmdb_ci_lb_pool_member

name

Pattern created name, composed of:- load balancer name

  • type of protocol
  • IP address of the Pool Member

object_id

Load balancer pool member unique identifier, composed of:- Member ID

  • Listener ID

ip_address

IP address of a load balancer member.

server_id

ID of the member in IBM cloud.

load_balancer

Name of the related Load Balancer.

Related CI: cmdb_ci_lb_health_service

name

Pattern created name, composed of:- load balancer name

  • type of protocol
  • resource type: Health Check
  • resource ID

object_id

Unique identifier of the Health Service Check.

monitor_type

Health check type. One of the following: - TCP

  • HTTP
  • HTTPS

timeout_sec

Timeout, in seconds, to wait for health check responses.

check_interval_sec

Interval, in seconds, to perform health check.

- **IBM Cloud Location Groups discovered resources**
|Field|Description|
|-----|-----------|
|Main CI: cmdb\_ci\_cloud\_location\_group|
|name|A descriptive name used to identify a Location Group.|
|object\_id|The ID of the Location Group record.|
|locationGroupType Name|The name of the Location Group Type.|
|short\_description|A small note about a Location Group to use at your discretion.|
|locationGroup Type ID|The ID of the Location Group Type.|
  • IBM Cloud Network discovered resources

Field

Description

Main CI: cmdb_ci_network

name

VLAN number.

object_id

Network unique identifier.

access_port_vlan

VLAN number.

is_external

Network space value. The value is either: - true if the network_space is “PUBLIC”

  • false if the network_space is “PRIVATE”.

state

State has the value "available".

Related CI: cmdb_ci_cloud_subnet

name

Name, composed of: “network_identifier/cidr”

object_id

Subnet unique identifier.

subnet_mask

Netmask of the subnet.

gateway

Gateway IP address.

cidr

Method for allocating IP addresses and IP routing: “network_identifier/cidr”.

category

Subnet type.

broadcast_address

Subnet broadcast address.

available_ip_count

Number of available IP addresses in the subnet.

Related CI: cmdb_ci_compute_security_group

name

Security Group name.

object_id

Security Group unique identifier.

short_description

Security Group description that you provide for easy identification.

Related CI: cmdb_ci_compute_security_group_rule

name

Field with the same value as the Security Group Rule object_id field.

object_id

Security Group Rule unique identifier.

created

Date the CI was created.

direction

Direction of the information. One of the following: - inbound

  • outbound

Ethertype

Ethertype. One of the following: - IPv4

  • IPv6

port_range_min

The first port of the range that the rule applies to.

port_range_max

The last port of the range that the rule applies to.

protocol

Protocol that the rule is applied to.

remote_group_id

Security Group ID for the Source/Destination security group. It means that this rule applies on all IP addresses that were configured in this security group.

- **IBM Cloud Organizations and Space discovered resources**

Field

Description

Main CI: cmdb_ci_cloud_org

name

Name of the cloud organization.

guid

Unique identifier of the organization.

url

Unique URL of the organization.

billing_enabled

Billing method in use by the organization. One of either: - Enabled / (TRUE)

  • Disabled / (FALSE)

quota_definition_url

Resources that are available to an organization.

spaces_url

Unique URL of the space assigned to the organization.

operational_status

Operational status of the organization.

Related CI: cmdb_ci_cloud_space

name

Unique name of the space.

object_id

Space unique identifier (guid).

alllow_ssh

Access to the application over SSH is either allowed or not allowed. Boolean, one of either: - TRUE

  • FALSE

URL

URL of the space from the metadata description.

- **IBM Cloud Resource Groups discovered resources**
|Field|Description|
|-----|-----------|
|Main CI: cmdb\_ci\_resource\_group|
|name|Name of the resource group.|
|object\_id|Unique identifier of the resource group.|
|quota\_id|Value identifying the quota ID associated with the resource group.|
  • IBM Cloud SSH Key discovered resources

    Field Description
    Main CI: cmdb_ci_cloud_key_pair
    name Name to identify an SSH key.
    object_id ID of the SSH key record.
    key SSH Key record.
    finger_print Short sequence of bytes used to authenticate or lookup a longer SSH Key. This value is automatically generated when adding or modifying the SSH Key. Read only. Changes made are ignored.
    created _date Date when the SSH Key was added. Read only. Changes made are ignored.
    modify_date Date when the SSH Key was modified. Read only. Changes made are ignored.
    short_description SSH description that you provide for easy identification.
    Related CI: cmdb_ci_ibm_datacenter
    name Name of the datacenter.
    region Region that the datacenter is in.
    discovery_status Status information about the IBM datacenter.
    sys_class_name Class of the datacenter
    Related CI: cmdb_ci_cloud_service_account
    name Name of the cloud service account.
    account_id Account ID for this cloud service account.
    discovery_credentials Credentials for this cloud service account.
    datacenter_url URL used to populate Logical Data Centers (LDCs).
    datacenter_type Type of datacenter. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]
    datacenter_discovery_status Status of last execution of Discover Datacenters.
  • IBM Cloud Storage discovered resources

Field

Description

Main CI: cmdb_ci_storage_volume

name

Username used to:- access a non-EVault Storage volume

  • register the EVault server agent with the vault backup system

object_id

Storage account unique identifier.

size

Capacity of the storage account, measured in gigabytes.

size_bytes

Capacity of the storage account, measured in bytes.

label

Name of the storage network resource.

storage_type

Description of the storage type. As an example, NAS.

fqdn

IP address of a storage resource or fully qualified domain name.

device

Unique identification number of the device associated with a Storage volume.

Related CI: cmdb_ci_storage_vol_snapshot

name

Name of a storage network resource.

object_id

Storage unique identifier.

capacity

Capacity of the snapshot volume in gigabytes.

fqdn

IP address of a storage resource or fully qualified domain name.

location

Unique availability zone where the storage volume is located.

Related CI: cmdb_ci_ibm_datacenter

name

Name of the datacenter.

region

Region that the datacenter is in.

discovery_status

Status information about the IBM datacenter.

sys_class_name

Class of the datacenter

Related CI: cmdb_ci_cloud_service_account

name

Name of the cloud service account.

account_id

Account ID for this cloud service account.

discovery_credentials

Credentials for this cloud service account.

datacenter_url

URL used to populate LDCs.

datacenter_type

Type of datacenter. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]

datacenter_discovery_status

Status of last execution of Discover Datacenters.

Related CI: cmdb_ci_availability_zone

name

Name of the availability zone (AZ).

object_id

Unique identifier for this resource.

short_description

Availability zone description that you provide.

- **IBM Cloud Virtual Server discovered resources**

Field

Description

Main CI: cmdb_ci_vm_instance

name

Name of the VM.

object_id

Unique identifier of the VM.

dns_domain

VM domain server name.

fqdn

VM IP address.

short_description

Description in a note that is attached to the VM on the IBM console.

cpus

Number of CPU cores assigned to this VM.

memory

Memory size assigned to this VM.

disks

Number of disks assigned to this VM.

state

The running state of the VM.

  • On – returned as ‘Running’ from the API.
  • Off – returned as ‘Halted’ from the API.

placement_group_id

Placement group ID.

nics

Number of NICs.

Related CI: cmdb_ci_nic

name

Name, composed of:- load balancer name

  • Port

object_id

Unique identifier of the NIC.

ip_address

IP that is configured on the NIC.

mac_address

NIC MAC details.

netmask

Mask used to divide the IP address into subnets and to specify the available hosts in the network.

status

State of the NIC.

Related CI: cmdb_ci_endpoint_vnic

name

Name for the VNIC endpoint.

object_id

Unique identifier of the VNIC endpoint.

host

Host identifier.

Related CI: cmdb_ci_storage_volume

name

Username used to:- access a non-EVault Storage volume

  • register the EVault server agent with the vault backup system

object_id

Storage account unique identifier.

size

Capacity of the storage account, measured in gigabytes.

size_bytes

Capacity of the storage account, measured in bytes.

label

Name of the storage network resource.

storage_type

Description of the storage type. As an example, NAS.

fqdn

IP address of a storage resource or fully qualified domain name.

device

Unique identification number of the guest associated with a Storage volume.

Related CI: cmdb_ci_endpoint_nfs

name

Name for the NFS endpoint.

host

Host identifier.

protocol

Protocol that was applied.

type

NFS endpoint type.

created

Date that the NFS endpoint was created.

updated

Date that the NFS endpoint was updated.

discovery_source

Source of the discovery. As an example, ServiceWatch

host_name

Host name of the NFS endpoint

Related CI: cmdb_ci_endpoint_iscsi

host

Host identifier for the ISCSI endpoint.

port

Port to determine how GCP iscsi contact to the VMs.

protocol

Protocol that was applied.

type

ISCSI endpoint type

created

Date that the ISCSI endpoint was created.

updated

Date that the ISCSI endpoint was updated.

discovery_source

Source of the discovery. As an example, ImportSet

host_name

Host name of the ISCSI endpoint

Related CI: cmdb_ci_endpoint_block

name

Name for the block endpoint.

object_id

Unique identifier of the block endpoint.

host

Host identifier.

Related CI: cmdb_ci_os_template

name

Name of the image. For example, ‘CentOS 7.0-64 Minimal for VSI’.

object_id

Unique identifier of the image.

guest_os

OS used by the image. As an example, Linux.

root_device_type

Type of device used by root.

image_source

Source of the image.

image_type

Image type.

infuse_key

Key used to infuse the image.

update_host_name

Update host name for the image.

credentials

Credentials for the image.

version

OS version. For example, ‘7.0-64 Minimal for VSI’.

Related CI: cmdb_ci_cloud_key_pair

name

Name to identify a key (key label).

object_id

ID of the key record.

key

Key record.

finger_print

Short sequence of bytes used to authenticate or look up a Key. This value is automatically generated when adding or modifying the Key. Read only. Changes made are ignored.

created _date

Date when the Key was added. Read only. Changes made are ignored.

modify_date

Date when the Key was modified. Read only. Changes made are ignored.

short_description

Description that you provide for easy identification.

Related CI: cmdb_ci_compute_security_group

name

Security Group name.

object_id

Security Group unique identifier.

short_description

Security Group description that you provide for easy identification.

Related CI: cmdb_ci_endpoint_comp_security

host

Host identifier of the compute security endpoint.

port

Unique identifier of the compute security endpoint.

protocol

Protocol that was applied.

type

Type of compute security endpoint.

created

Date when the compute security endpoint was added. Read only. Changes made are ignored.

updated

Date when the compute security endpoint was modified. Read only. Changes made are ignored.

discovery_source

Source of the discovery. As an example, Manual Entry.

host_name

Host name of the compute security endpoint.

Related CI: cmdb_ci_ibm_datacenter

name

Name of the datacenter.

region

Region that the datacenter is in.

discovery_status

Status information about the IBM datacenter.

sys_class_name

Class of the datacenter

Related CI: cmdb_ci_availability_zone

name

Name of the availability zone (AZ).

object_id

Unique identifier for this resource.

short_description

Availability zone description that you provide.

Related CI: cmdb_ci_cloud_service_account

name

Name of the cloud service account.

account_id

Account ID for this cloud service account.

discovery_credentials

Credentials for this cloud service account.

datacenter_url

URL used to populate LDCs.

datacenter_type

Type of datacenter. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]

datacenter_discovery_status

Status of last execution of Discover Datacenters.

- **IBM Cloud Virtual Server – Related Items view**
\[Omitted image "ibm-vserver-related-items-1.png"\] Alt text: IBM Cloud Virtual Server – Related Items view

CI Relationships

These relationships are created to support IBM Cloud Platform discovery.

  • Relationships for IBM Cloud Load Balancer discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_load_balancer
    cmdb_ci_cloud_load_balancer Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_cloud_load_balancer Contains::Contained by cmdb_ci_lb_health_service
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zone Hosted on::Hosts cmdb_ci_cloud_load_balancer
    cmdb_ci_availability_zone Contains::Contained by cmdb_ci_lb_service
    Related CI: cmdb_ci_lb_service
    cmdb_ci_lb_service Hosted on::Hosts cmdb_ci_cloud_load_balancer
    cmdb_ci_lb_service Contains::Contained by cmdb_ci_lb_pool
    Related CI: cmdb_ci_lb_pool
    cmdb_ci_lb_pool Hosted on::Hosts cmdb_ci_cloud_load_balancer
    cmdb_ci_lb_pool Owns::Owned by cmdb_ci_lb_pool_member
    Related CI: cmdb_ci_lb_health_service
    cmdb_ci_lb_health_service Contains::Contained by cmdb_ci_cloud_load_balancer
  • Relationships for IBM Cloud Location Groups discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_location_group
    cmdb_ci_cloud_location_group Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_cloud_location_group Contains::Contained by cmdb_ci_availability_zone
  • Relationships for IBM Cloud Network discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    Related CI: cmdb_ci_network
    cmdb_ci_network Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_network Contains::Contained by cmdb_ci_cloud_subnet
    Related CI: cmdb_ci_compute_security_group
    cmdb_ci_compute_security_group Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_compute_security_group Contains::Contained by cmdb_ci_compute_security_group_rule
  • Relationships for IBM Cloud Resource Groups discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_resource_group
    cmdb_ci_resource_group Hosted on::Hosts cmdb_ci_cloud_service_account
  • Relationships for IBM Cloud SSH Key discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_key_pair
    cmdb_ci_cloud_key_pair Hosted on::Hosts cmdb_ci_cloud_service_account
  • Relationships for IBM Cloud Storage discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    Related CI: cmdb_ci_storage_volume
    cmdb_ci_storage_volume Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_storage_volume Provisioned::Provisioned From cmdb_ci_storage_vol_snapshot
    Related CI: cmdb_ci_storage_vol_snapshot
    cmdb_ci_storage_vol_snapshot Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_storage_vol_snapshot Located in Zone::Zone contains cmdb_ci_availability_zone
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zone Contains::Contained by cmdb_ci_storage_volume
  • Relationships for IBM Cloud Virtual Server discovered resources

    CI Relationship CI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenter Contains::Contained by cmdb_ci_availability_zone
    cmdb_ci_ibm_datacenter Hosted on::Hosts cmdb_ci_vm_instance
    Related CI: cmdb_ci_vm_instance
    cmdb_ci_vm_instance Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_vm_instance Located in:Houses cmdb_ci_availability_zone
    cmdb_ci_vm_instance Uses:Used By cmdb_ci_cloud_key_pair
    cmdb_ci_vm_instance Contains:Contained By cmdb_ci_nic
    cmdb_ci_vm_instance endpoint cmdb_ci_nic
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zone Hosted on::Hosts cmdb_ci_vm_instance
    Related CI: cmdb_ci_nic
    cmdb_ci_nic Hosted on::Hosts cmdb_ci_vm_instance
    Related CI: cmdb_ci_os_template
    cmdb_ci_os_template Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_os_template Provisioned::Provisioned by cmdb_ci_vm_instance
    Related CI: cmdb_ci_compute_security_group
    cmdb_ci_compute_security_group Hosted on::Hosts cmdb_ci_cloud_service_account
    cmdb_ci_compute_security_group Implement::Implemented from cmdb_ci_vm_instance
    Related CI: cmdb_ci_storage_volume
    cmdb_ci_storage_volume Hosted on::Hosts cmdb_ci_ibm_datacenter
    cmdb_ci_storage_volume Implement::Implemented from cmdb_ci_vm_instance
    Related CI: cmdb_ci_cloud_key_pair
    cmdb_ci_cloud_key_pair Hosted On:Hosts cmdb_ci_cloud_service_account
  • Relationships discovered for the virtual machine (VM) instance

    CI Relationship CI
    Servers [cmdb_ci_server] Virtualized by:: Virtualizes Virtual Machine Instance [cmdb_ci_instance]

Data collected by Service Mapping during tag-based discovery

Service Mapping uses tag-based discovery to create service instance maps including the Cloud components. The Service Mapping application comes with the following preconfigured CI relationships used for tag-based discovery. These CI relationships are available from the 1.0.68 release on the ServiceNow Store.

CI Relationship CI
Configuration Item [cmdb_ci] Hosted on::Hosts Logical Datacenter [cmdb_ci_logical_datacenter]
Logical Datacenter [cmdb_ci_logical_datacenter] Hosted on::Hosts Cloud Service Account [cmdb_ci_cloud_service_account]

Troubleshooting

If the mapping process does not proceed as you expected, follow the following suggestions.

Symptom

Cause

Solution

Discovery fails. The discovery message contains the information about an error caused by the REST timeout.

There are many CIs sending the REST call response in the deployment. The MID Server cannot process the REST call response without exceeding the time limit controlled by the mid.sa.cloud.request_timeout parameter.

By default, the mid.sa.cloud.request_timeout parameter is set to 30000 milliseconds. Increase the value of this parameter on the relevant MID Server and run discovery again.

Note: If the Configuration Parameters related list for the relevant MID Server does not show this parameter, you may need to add it.

Pattern Designer fails during a debug session. The Pattern Designer message contains information about an error caused by a timeout.

The Pattern Designer fails because of a timeout during pattern debugging (and not during discovery).

By default, the sa.debugger.max_timeoutparameter is set to 240 seconds.Increase the value of this parameter on the relevant MID Server.

**Parent Topic:**[Available cloud discovery patterns](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/it-operations-management/discovery-and-service-mapping-patterns/available-patterns-cloud.md)
Search documentation
Search document titles and file paths on the australia branch