Skip to content
Release: Australia · Updated: 2026-03-12 · Official documentation · View source

IBM Cloud Platform discovery

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 may 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:

      FieldDescription
      NameCredential name. An example is ibm-cred.
      OrderOrder 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 UserUsername for the Softlayer API. Use the Softlayer API Username defined in the Softlayer console.
      Softlayer API KeyKey for the Softlayer API. Use the Softlayer API Key that is defined in the Softlayer console.
      Bluemix API KeyKey for the Bluemix API. Use the Bluemix API Key defined in the IBM Cloud console.
    4. Click Submit.

    5. Create an IBM cloud service account

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

  • Navigate to Cloud Provisioning and Governance > Service Accounts.

  • Click New.
  • On the form, fill in the fields:

    FieldDescription
    NameCredential name. An example is ibm-snow
    Account IdIBM account ID name. Enter the IBM Account ID.
    Discovery credentialsDiscovery credentials that you defined earlier.
    Datacenter TypeDatacenter type. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]
  • 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:

      FieldDescription
      NameName for this Discovery schedule. As an example, Serverless Pattern
      DiscoverDiscover type. Select Serverless
      MID ServerName of the MID Server. As an example, Discovery_Server
      ActiveOption for enabling this schedule for Discovery. Select this check box to enable Discovery.
      RunSpecifies how frequently to run the Discovery schedule.
    4. Right-click the header of the Discovery Schedule form and select Save.

Image omitted: serverless-execution-pattern.png
Serverless execution pattern
5.  Click the **Serverless Execution Patterns** tab.
6.  Click **New**.
7.  On the form, fill in the fields:
FieldDescription
NameName for this Serverless Execution Pattern. As an example, `IBM1`
PatternName of the pattern that you want to run.
Image omitted: ibm-patterns.png
IBM patterns
If you want to run multiple patterns, create multiple records.
Proxy HostFully qualified domain name of the machine on which you are installing the proxy server. Specify Global.
ActiveOption 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.
Image omitted: response-variable-name.png
Response field
-   Set **Define parsing** to None.
Methods to retrieve data for the IBM account

1.  Navigate to **Pattern Designer** > **Custom Operations**.
Image omitted: cloud-rest-query.png
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\]**
-   Network**https://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>]”.

    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>]”.

    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.

    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.

    var rtrn
    var 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.

    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, where iteration for getting the unique region is performed.

    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.

    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.

    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.

    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>]”.

    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.

    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.

    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.

    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.

    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.

    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.

    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.

    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
    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.

    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.

    var rtrn = '';
    //get the Security Group ID of the current record in the table for comparison
    var 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 table
    var 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 table
    var 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.

    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 = VMs
    for(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.

    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.

    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>]”.

    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.

    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.

    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
FieldDescription
Main CI: cmdb\_ci\_cloud\_load\_balancer
nameLoad balancer name.
object\_idLoad balancer unique identifier.
fqdnLoad balancer address \(host name\).
dns\_nameLoad balancer domain server name.
short\_descriptionLoad balancer description that you provide for easy identification.
operational\_statusLoad balancer status, one of either: - ONLINE - OFFLINE
locationDatacenter location.
stateLoad balancer provisioning status.
Related CI: cmdb\_ci\_lb\_service
namePattern created name, composed of:- load balancer name - type of protocol - resource type listener
object\_idLoad balancer unique identifier.
portPort number of the listener.
front\_end\_portProtocol port number of the listener.
listener\_protocolProtocol of the listener. One of the following protocols:- TCP - HTTP - HTTPS
operational\_statusProvisioning status of the listener.
Related CI: cmdb\_ci\_lb\_pool
namePattern created name, composed of: - load balancer name - type of protocol - port - resource type “pool”
object\_idLoad balancer pool unique identifier.
portProtocol port of the backend.
pool\_statusLoad balancer pool provisioning status.
load\_balancing\_methodLoad balancing method. One of the following algorithms: - "ROUNDROBIN" - "WEIGHTED\_RR" - "LEASTCONNECTION"
Related CI: cmdb\_ci\_lb\_pool\_member
namePattern created name, composed of:- load balancer name - type of protocol - IP address of the Pool Member
object\_idLoad balancer pool member unique identifier, composed of:- Member ID - Listener ID
ip\_addressIP address of a load balancer member.
server\_idID of the member in IBM cloud.
load\_balancerName of the related Load Balancer.
Related CI: cmdb\_ci\_lb\_health\_service
namePattern created name, composed of:- load balancer name - type of protocol - resource type: Health Check - resource ID
object\_idUnique identifier of the Health Service Check.
monitor\_typeHealth check type. One of the following: - TCP - HTTP - HTTPS
timeout\_secTimeout, in seconds, to wait for health check responses.
check\_interval\_secInterval, in seconds, to perform health check.
  • IBM Cloud Location Groups discovered resources

    FieldDescription
    Main CI: cmdb_ci_cloud_location_group
    nameA descriptive name used to identify a Location Group.
    object_idThe ID of the Location Group record.
    locationGroupType NameThe name of the Location Group Type.
    short_descriptionA small note about a Location Group to use at your discretion.
    locationGroup Type IDThe ID of the Location Group Type.
  • IBM Cloud Network discovered resources

FieldDescription
Main CI: cmdb\_ci\_network
nameVLAN number.
object\_idNetwork unique identifier.
access\_port\_vlanVLAN number.
is\_externalNetwork space value. The value is either: - true if the network\_space is “PUBLIC” - false if the network\_space is “PRIVATE”.
stateState has the value "available".
Related CI: cmdb\_ci\_cloud\_subnet
nameName, composed of: “network\_identifier/cidr”
object\_idSubnet unique identifier.
subnet\_maskNetmask of the subnet.
gatewayGateway IP address.
cidrMethod for allocating IP addresses and IP routing: “network\_identifier/cidr”.
categorySubnet type.
broadcast\_addressSubnet broadcast address.
available\_ip\_countNumber of available IP addresses in the subnet.
Related CI: cmdb\_ci\_compute\_security\_group
nameSecurity Group name.
object\_idSecurity Group unique identifier.
short\_descriptionSecurity Group description that you provide for easy identification.
Related CI: cmdb\_ci\_compute\_security\_group\_rule
nameField with the same value as the Security Group Rule object\_id field.
object\_idSecurity Group Rule unique identifier.
createdDate the CI was created.
directionDirection of the information. One of the following: - inbound - outbound
EthertypeEthertype. One of the following: - IPv4 - IPv6
port\_range\_minThe first port of the range that the rule applies to.
port\_range\_maxThe last port of the range that the rule applies to.
protocolProtocol that the rule is applied to.
remote\_group\_idSecurity 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
FieldDescription
Main CI: cmdb\_ci\_cloud\_org
nameName of the cloud organization.
guidUnique identifier of the organization.
urlUnique URL of the organization.
billing\_enabledBilling method in use by the organization. One of either: - Enabled / \(TRUE\) - Disabled / \(FALSE\)
quota\_definition\_urlResources that are available to an organization.
spaces\_urlUnique URL of the space assigned to the organization.
operational\_statusOperational status of the organization.
Related CI: cmdb\_ci\_cloud\_space
nameUnique name of the space.
object\_idSpace unique identifier \(guid\).
alllow\_sshAccess to the application over SSH is either allowed or not allowed. Boolean, one of either: - TRUE - FALSE
URLURL of the space from the metadata description.
  • IBM Cloud Resource Groups discovered resources

    FieldDescription
    Main CI: cmdb_ci_resource_group
    nameName of the resource group.
    object_idUnique identifier of the resource group.
    quota_idValue identifying the quota ID associated with the resource group.
  • IBM Cloud SSH Key discovered resources

    FieldDescription
    Main CI: cmdb_ci_cloud_key_pair
    nameName to identify an SSH key.
    object_idID of the SSH key record.
    keySSH Key record.
    finger_printShort 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 _dateDate when the SSH Key was added. Read only. Changes made are ignored.
    modify_dateDate when the SSH Key was modified. Read only. Changes made are ignored.
    short_descriptionSSH description that you provide for easy identification.
    Related CI: cmdb_ci_ibm_datacenter
    nameName of the datacenter.
    regionRegion that the datacenter is in.
    discovery_statusStatus information about the IBM datacenter.
    sys_class_nameClass of the datacenter
    Related CI: cmdb_ci_cloud_service_account
    nameName of the cloud service account.
    account_idAccount ID for this cloud service account.
    discovery_credentialsCredentials for this cloud service account.
    datacenter_urlURL used to populate Logical Data Centers (LDCs).
    datacenter_typeType of datacenter. As an example, IBM Datacenter [cmdb_ci_ibm_datacenter]
    datacenter_discovery_statusStatus of last execution of Discover Datacenters.
  • IBM Cloud Storage discovered resources

FieldDescription
Main CI: cmdb\_ci\_storage\_volume
nameUsername used to:- access a non-EVault Storage volume - register the EVault server agent with the vault backup system
object\_idStorage account unique identifier.
sizeCapacity of the storage account, measured in gigabytes.
size\_bytesCapacity of the storage account, measured in bytes.
labelName of the storage network resource.
storage\_typeDescription of the storage type. As an example, NAS.
fqdnIP address of a storage resource or fully qualified domain name.
deviceUnique identification number of the device associated with a Storage volume.
Related CI: cmdb\_ci\_storage\_vol\_snapshot
nameName of a storage network resource.
object\_idStorage unique identifier.
capacityCapacity of the snapshot volume in gigabytes.
fqdnIP address of a storage resource or fully qualified domain name.
locationUnique availability zone where the storage volume is located.
Related CI: cmdb\_ci\_ibm\_datacenter
nameName of the datacenter.
regionRegion that the datacenter is in.
discovery\_statusStatus information about the IBM datacenter.
sys\_class\_nameClass of the datacenter
Related CI: cmdb\_ci\_cloud\_service\_account
nameName of the cloud service account.
account\_idAccount ID for this cloud service account.
discovery\_credentialsCredentials for this cloud service account.
datacenter\_urlURL used to populate LDCs.
datacenter\_typeType of datacenter. As an example, IBM Datacenter \[cmdb\_ci\_ibm\_datacenter\]
datacenter\_discovery\_statusStatus of last execution of Discover Datacenters.
Related CI: cmdb\_ci\_availability\_zone
nameName of the availability zone \(AZ\).
object\_idUnique identifier for this resource.
short\_descriptionAvailability zone description that you provide.
  • IBM Cloud Virtual Server discovered resources
FieldDescription
Main CI: cmdb\_ci\_vm\_instance
nameName of the VM.
object\_idUnique identifier of the VM.
dns\_domainVM domain server name.
fqdnVM IP address.
short\_descriptionDescription in a note that is attached to the VM on the IBM console.
cpusNumber of CPU cores assigned to this VM.
memoryMemory size assigned to this VM.
disksNumber of disks assigned to this VM.
stateThe running state of the VM. - On – returned as ‘Running’ from the API. - Off – returned as ‘Halted’ from the API.
placement\_group\_idPlacement group ID.
nicsNumber of NICs.
Related CI: cmdb\_ci\_nic
nameName, composed of:- load balancer name - Port
object\_idUnique identifier of the NIC.
ip\_addressIP that is configured on the NIC.
mac\_addressNIC MAC details.
netmaskMask used to divide the IP address into subnets and to specify the available hosts in the network.
statusState of the NIC.
Related CI: cmdb\_ci\_endpoint\_vnic
nameName for the VNIC endpoint.
object\_idUnique identifier of the VNIC endpoint.
hostHost identifier.
Related CI: cmdb\_ci\_storage\_volume
nameUsername used to:- access a non-EVault Storage volume - register the EVault server agent with the vault backup system
object\_idStorage account unique identifier.
sizeCapacity of the storage account, measured in gigabytes.
size\_bytesCapacity of the storage account, measured in bytes.
labelName of the storage network resource.
storage\_typeDescription of the storage type. As an example, NAS.
fqdnIP address of a storage resource or fully qualified domain name.
deviceUnique identification number of the guest associated with a Storage volume.
Related CI: cmdb\_ci\_endpoint\_nfs
nameName for the NFS endpoint.
hostHost identifier.
protocolProtocol that was applied.
typeNFS endpoint type.
createdDate that the NFS endpoint was created.
updatedDate that the NFS endpoint was updated.
discovery\_sourceSource of the discovery. As an example, ServiceWatch
host\_nameHost name of the NFS endpoint
Related CI: cmdb\_ci\_endpoint\_iscsi
hostHost identifier for the ISCSI endpoint.
portPort to determine how GCP iscsi contact to the VMs.
protocolProtocol that was applied.
typeISCSI endpoint type
createdDate that the ISCSI endpoint was created.
updatedDate that the ISCSI endpoint was updated.
discovery\_sourceSource of the discovery. As an example, ImportSet
host\_nameHost name of the ISCSI endpoint
Related CI: cmdb\_ci\_endpoint\_block
nameName for the block endpoint.
object\_idUnique identifier of the block endpoint.
hostHost identifier.
Related CI: cmdb\_ci\_os\_template
nameName of the image. For example, ‘CentOS 7.0-64 Minimal for VSI’.
object\_idUnique identifier of the image.
guest\_osOS used by the image. As an example, Linux.
root\_device\_typeType of device used by root.
image\_sourceSource of the image.
image\_typeImage type.
infuse\_keyKey used to infuse the image.
update\_host\_nameUpdate host name for the image.
credentialsCredentials for the image.
versionOS version. For example, ‘7.0-64 Minimal for VSI’.
Related CI: cmdb\_ci\_cloud\_key\_pair
nameName to identify a key \(key label\).
object\_idID of the key record.
keyKey record.
finger\_printShort 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 \_dateDate when the Key was added. Read only. Changes made are ignored.
modify\_dateDate when the Key was modified. Read only. Changes made are ignored.
short\_descriptionDescription that you provide for easy identification.
Related CI: cmdb\_ci\_compute\_security\_group
nameSecurity Group name.
object\_idSecurity Group unique identifier.
short\_descriptionSecurity Group description that you provide for easy identification.
Related CI: cmdb\_ci\_endpoint\_comp\_security
hostHost identifier of the compute security endpoint.
portUnique identifier of the compute security endpoint.
protocolProtocol that was applied.
typeType of compute security endpoint.
createdDate when the compute security endpoint was added. Read only. Changes made are ignored.
updatedDate when the compute security endpoint was modified. Read only. Changes made are ignored.
discovery\_sourceSource of the discovery. As an example, Manual Entry.
host\_nameHost name of the compute security endpoint.
Related CI: cmdb\_ci\_ibm\_datacenter
nameName of the datacenter.
regionRegion that the datacenter is in.
discovery\_statusStatus information about the IBM datacenter.
sys\_class\_nameClass of the datacenter
Related CI: cmdb\_ci\_availability\_zone
nameName of the availability zone \(AZ\).
object\_idUnique identifier for this resource.
short\_descriptionAvailability zone description that you provide.
Related CI: cmdb\_ci\_cloud\_service\_account
nameName of the cloud service account.
account\_idAccount ID for this cloud service account.
discovery\_credentialsCredentials for this cloud service account.
datacenter\_urlURL used to populate LDCs.
datacenter\_typeType of datacenter. As an example, IBM Datacenter \[cmdb\_ci\_ibm\_datacenter\]
datacenter\_discovery\_statusStatus of last execution of Discover Datacenters.
  • IBM Cloud Virtual Server – Related Items view
Image omitted: ibm-vserver-related-items-1.png
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

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_load_balancer
    cmdb_ci_cloud_load_balancerHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_cloud_load_balancerContains::Contained bycmdb_ci_lb_health_service
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zoneHosted on::Hostscmdb_ci_cloud_load_balancer
    cmdb_ci_availability_zoneContains::Contained bycmdb_ci_lb_service
    Related CI: cmdb_ci_lb_service
    cmdb_ci_lb_serviceHosted on::Hostscmdb_ci_cloud_load_balancer
    cmdb_ci_lb_serviceContains::Contained bycmdb_ci_lb_pool
    Related CI: cmdb_ci_lb_pool
    cmdb_ci_lb_poolHosted on::Hostscmdb_ci_cloud_load_balancer
    cmdb_ci_lb_poolOwns::Owned bycmdb_ci_lb_pool_member
    Related CI: cmdb_ci_lb_health_service
    cmdb_ci_lb_health_serviceContains::Contained bycmdb_ci_cloud_load_balancer
  • Relationships for IBM Cloud Location Groups discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_location_group
    cmdb_ci_cloud_location_groupHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_cloud_location_groupContains::Contained bycmdb_ci_availability_zone
  • Relationships for IBM Cloud Network discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    Related CI: cmdb_ci_network
    cmdb_ci_networkHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_networkContains::Contained bycmdb_ci_cloud_subnet
    Related CI: cmdb_ci_compute_security_group
    cmdb_ci_compute_security_groupHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_compute_security_groupContains::Contained bycmdb_ci_compute_security_group_rule
  • Relationships for IBM Cloud Resource Groups discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_resource_group
    cmdb_ci_resource_groupHosted on::Hostscmdb_ci_cloud_service_account
  • Relationships for IBM Cloud SSH Key discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    Related CI: cmdb_ci_cloud_key_pair
    cmdb_ci_cloud_key_pairHosted on::Hostscmdb_ci_cloud_service_account
  • Relationships for IBM Cloud Storage discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    Related CI: cmdb_ci_storage_volume
    cmdb_ci_storage_volumeHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_storage_volumeProvisioned::Provisioned Fromcmdb_ci_storage_vol_snapshot
    Related CI: cmdb_ci_storage_vol_snapshot
    cmdb_ci_storage_vol_snapshotHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_storage_vol_snapshotLocated in Zone::Zone containscmdb_ci_availability_zone
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zoneContains::Contained bycmdb_ci_storage_volume
  • Relationships for IBM Cloud Virtual Server discovered resources

    CIRelationshipCI
    Related CI: cmdb_ci_ibm_datacenter
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_ibm_datacenterContains::Contained bycmdb_ci_availability_zone
    cmdb_ci_ibm_datacenterHosted on::Hostscmdb_ci_vm_instance
    Related CI: cmdb_ci_vm_instance
    cmdb_ci_vm_instanceHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_vm_instanceLocated in:Housescmdb_ci_availability_zone
    cmdb_ci_vm_instanceUses:Used Bycmdb_ci_cloud_key_pair
    cmdb_ci_vm_instanceContains:Contained Bycmdb_ci_nic
    cmdb_ci_vm_instanceendpointcmdb_ci_nic
    Related CI: cmdb_ci_availability_zone
    cmdb_ci_availability_zoneHosted on::Hostscmdb_ci_vm_instance
    Related CI: cmdb_ci_nic
    cmdb_ci_nicHosted on::Hostscmdb_ci_vm_instance
    Related CI: cmdb_ci_os_template
    cmdb_ci_os_templateHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_os_templateProvisioned::Provisioned bycmdb_ci_vm_instance
    Related CI: cmdb_ci_compute_security_group
    cmdb_ci_compute_security_groupHosted on::Hostscmdb_ci_cloud_service_account
    cmdb_ci_compute_security_groupImplement::Implemented fromcmdb_ci_vm_instance
    Related CI: cmdb_ci_storage_volume
    cmdb_ci_storage_volumeHosted on::Hostscmdb_ci_ibm_datacenter
    cmdb_ci_storage_volumeImplement::Implemented fromcmdb_ci_vm_instance
    Related CI: cmdb_ci_cloud_key_pair
    cmdb_ci_cloud_key_pairHosted On:Hostscmdb_ci_cloud_service_account
  • Relationships discovered for the virtual machine (VM) instance

    CIRelationshipCI
    Servers [cmdb_ci_server]Virtualized by:: VirtualizesVirtual 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.

CIRelationshipCI
Configuration Item [cmdb_ci]Hosted on::HostsLogical Datacenter [cmdb_ci_logical_datacenter]
Logical Datacenter [cmdb_ci_logical_datacenter]Hosted on::HostsCloud Service Account [cmdb_ci_cloud_service_account]

Troubleshooting

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

SymptomCauseSolution
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