OpenStack resource discovery
The ServiceNow Discovery application uses OpenStack resource discovery patterns to find OpenStack resources through REST API calls. Discovering some of these resources may require updating to the latest version of the Discovery and Service Mapping Patterns application from the ServiceNow Store.
Discovery uses OpenStack resource discovery patterns to run horizontal discovery.
Starting with the Discovery and Service Mapping Patterns August 2024 store release, OpenStack resource discovery patterns support both private and public cloud discovery.
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
- OpenStack requirements
-
- In the OpenStack Identity service catalog, find the access URL that is used as the OpenStack identity service endpoint. For example: https://<openstack dns>:<port>.
- Configure an OpenStack user with permissions to generate a project scope token. Setting Domain ID, User Name, Project Name, and Password values is required for generating a token.
- MID Server requirements
-
Deploy and connect a dedicated MID Server for cloud discovery.
The dedicated MID Server must have access to OpenStack and an open port for each OpenStack service to be discovered.
- Credentials
- On the ServiceNow AI Platform, create OpenStack credentials for the ServiceNow cloud service account. Enter the Domain ID, User Name, Project Name, and Password values you've configured in OpenStack requirements. For more information, see Create and test your credentials.
- Service account
- On the ServiceNow AI Platform, configure a ServiceNow cloud service account using the created OpenStack credentials and the OpenStack datacenter details. In the Account Id field, provide the Project ID of the OpenStack Project to be discovered.
- Create a discovery schedule
-
For more information, see Create an OpenStack Discovery schedule in Discovery Admin Workspace.
- Create an automatic discovery schedule for OpenStack service accounts—for private cloud only
- Create an automatic serverless discovery schedule for OpenStack service accounts using the OpenStack - Discover Service Accounts pattern. For more information, see the Auto Cloud discovery schedule for Open stack [KB1638685] article in the Now Support Knowledge Base.
- (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
Discovery populates the data in the CMDB when running the OpenStack resource discovery patterns.
| Field | Description |
|---|---|
| Object ID [object_id] | Server UUID. |
| Name [name] | Server name. |
| Status [status] | Server status. |
| Description [short_description] | (Optional) Server description. |
| CPUs [cpus] | Number of virtual CPUs (vCPUs) from the Flavor that the VM instance is provisioned with. |
| Disks [disks] | Number of all managed volumes by Cinder that are returned from the VM instance. |
| Disks size (GB) [disk_size] | Total amount of all managed volumes by Cinder that are used by the VM instance measured in gigabytes (GB). |
| Memory (MB) [memory] | The ram value from the Flavor that the VM instance is provisioned with, measured in megabytes (MB). |
| Network adapters [nics] | Number of unique interfaces configured in the VM instance. |
| State [state] |
Mapped status value returned for the VM instance. The OpenStack Server statuses and their related ServiceNow
State values are:
|
| Field | Description |
|---|---|
| Object ID [object_id] | Keypair UUID. |
| Name [name] | Keypair name that is used to reference it. |
| Finger print [finger_print] | Keypair fingerprint. |
| Field | Description |
|---|---|
| Object ID [object_id] | Load balancer ID. |
| Name [name] | Human-readable resource name. |
| Description [short_description] | (Optional) Human-readable resource description. |
| Install Status [install_status] | Resource provisioning status. |
| Operational Status [operational_status] | Resource operational status. |
| Field | Description |
|---|---|
| Object ID [object_id] | Listener ID. |
| Name [name] | Human-readable name of the resource. |
| Install Status [install_status] | Provisioning status of the resource. |
| Listener Protocol [listener_protocol] | Protocol for the resource. One of HTTP, HTTPS, TCP, TERMINATED_HTTPS, or UDP. |
| Listener Port [listener_port] | Protocol port number for the resource. |
| Operational status [operational_status] | Resource operational status. |
| Description [short_description] | (Optional) Human-readable resource description. |
| Field | Description |
|---|---|
| Object ID [object_id] | Pool ID. |
| Name [name] | Human-readable resource name. |
| Install Status [install_status] | Resource provisioning status. |
| Operational Status [operational_status] | Resource operational status. |
| Description [short_description] | (Optional) Human-readable resource description. |
| Load Balancing Method [load_balancing_method] | Load balancing algorithm for the pool. One of these values: LEAST_CONNECTIONS, ROUND_ROBIN, SOURCE_IP, or SOURCE_IP_PORT. |
| Field | Description |
|---|---|
| Object ID [object_id] | Pool member ID. |
| Name [name] | Human-readable resource name. |
| Install Status [install_status] | Resource provisioning status. |
| IP address [ip_address] | Back-end member server IP address. |
| Field | Description |
|---|---|
| Object ID [object_id] | Volume UUID. |
| Name [name] | Volume name. |
| Status [status] | Volume status. |
| Description [short_description] | (Optional) Human-readable description. |
| Storage type [storage_type] | Associated volume type. |
| Field | Description |
|---|---|
| Object ID [object_id] | Volume UUID. |
| Name [name] | Volume name. |
| Status [status] | Volume status. |
| Description [short_description] | (Optional) Human-readable description. |
| Field | Description |
|---|---|
| Object ID [object_id] | User-defined image UUID. |
| Name [name] | Image name. The value can be null (the JSON Null data type). |
| Status [status] | Image status. |
| Field | Description |
|---|---|
| Object ID [object_id] | Network ID. |
| Name [name] | Human-readable network name. |
| Operational Status [operational_status] | Network status. Possible values: ACTIVE, DOWN, BUILD, or ERROR. |
| Description [short_description] | (Optional) Human-readable description. |
| Field | Description |
|---|---|
| Object ID [object_id] | Subnet ID. |
| Name [name] | Human-readable resource name. |
| DHCP enabled [is_dhcp_enabled] | Whether DHCP is enabled or disabled for the subnet. |
| Description [short_description] | (Optional) Human-readable description. |
| Field | Description |
|---|---|
| Object ID [object_id] | Security group ID. |
| Name [name] | Human-readable resource name. |
| Description [short_description] | (Optional) Human-readable description. |
| Field | Description |
|---|---|
| Name [name] | This field has the same value as the object_id field. |
| Object ID [object_id] | Security group rule ID. |
| Description [short_description] | (Optional) Human-readable description. |
| Ethertype [ethertype] | Ethertype. Must be IPv4 or IPv6. Addresses represented in CIDR must match the ingress or egress rules. |
| Port range max [port_range_max] | The last port of the range to which the rule applies. This value is the maximum port number in the range that is matched by the security group rule.
|
| Port range min [port_range_min] | The first port of the range to which the rule applies. This value is the minimum port number in the range that is matched by the security group rule.
|
| Field | Description |
|---|---|
| Object ID [object_id] | Domain ID. |
| Name [name] | Domain name. |
| Description [short_description] | (Optional) Human-readable description. |
| Enabled [enabled] | Defines whether the domain is enabled or disabled.
|
| Field | Description |
|---|---|
| Object ID [object_id] | Service ID. |
| Name [name] | Service name. |
| Description [short_description] | (Optional) Human-readable description. |
| Type [type] | Service type. Describes the API implemented by the service. Possible values: Compute, ec2, identity, image, network, or volume. |
| Catalog enabled [enabled] | Defines whether the service and its endpoints appear in the service catalog.
|
| Field | Description |
|---|---|
| Object ID [object_id] | Endpoint ID. |
| Name [name] | Service name. |
| Interface [interface] | Interface type that describes the visibility of the endpoint. Possible values:
|
| Catalog enabled [enabled] | Defines whether the service and its endpoints appear in the service catalog.
|
| Field | Description |
|---|---|
| Name [name] | The name field of OpenStack Flavor. |
| Object ID [object_id] | The id field of OpenStack Flavor. |
| vCPUs [vcpus] | The vcpus field of OpenStack Flavor. |
| Memory MB [memory_mb] | The ram field of OpenStack Flavor. |
| Local Storage GB [local_storage_gb] | The disk field of OpenStack Flavor. |
| Field | Description |
|---|---|
| Name [name] | Concatenated value of hypervisor_type and hypervisor_hostname fields. For example: QEMU@host.acmecorp.com. |
| IP Address [ip_address] | The value of host_ip field. |
| Hypervisor technology [hypervisor_technology] | The value of hypervisor_type field. |
| Object ID [object_id] | The value of id field. |
| State [state] | The value of state field. |
| Version [version] | The value of hypervisor_version field. |
CI relationships
| CI | Relationship | CI |
|---|---|---|
| cmdb_ci_openstack_datacenter | Hosted on::Hosts | cmdb_ci_cloud_service_account |
| cmdb_ci_cloud_openstack_service | Hosted on::Hosts | cmdb_ci_cloud_service_account |
| cmdb_ci_cloud_openstack_endpoint | Use endpoint to::Use endpoint from | cmdb_ci_cloud_openstack_service |
| cmdb_ci_cloud_openstack_endpoint | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_cloud_openstack_domain | Owns::Owned by | cmdb_ci_cloud_service_account |
| cmdb_ci_network | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_network | Contains::Contained by | cmdb_ci_cloud_subnet |
| cmdb_ci_compute_security_group | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_compute_security_group | Contains::Contained by | cmdb_ci_compute_security_group_rule |
| cmdb_ci_cloud_load_balancer | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_cloud_load_balancer | Contains::Contained by | cmdb_ci_lb_listener |
| cmdb_ci_lb_pool | Hosted on::Hosts | cmdb_ci_cloud_load_balancer |
| cmdb_ci_lb_pool | Owns::Owned by | cmdb_ci_lb_pool_member |
| cmdb_ci_storage_volume | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_vm_instance | Uses::Used by | cmdb_ci_storage_volume |
| cmdb_ci_storage_vol_snapshot | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_storage_vol_snapshot | Provisioned from::Provisioned | cmdb_ci_storage_volume |
| cmdb_ci_vm_instance | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_cloud_key_pair | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_os_template | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_vm_instance | Provisioned from::Provisioned | cmdb_ci_os_template |
| cmdb_ci_vm_instance | Virtualized by::Virtualizes | cmdb_ci_server |
| CI | Relationship | CI |
|---|---|---|
| cmdb_ci_vm_instance | Registered on::Has registered | cmdb_ci_openstack_hypervisor_view |
| cmdb_ci_openstack_hypervisor_view | Hosted on::Hosts | cmdb_ci_openstack_datacenter |
| cmdb_ci_openstack_hypervisor_view | Uses::Hosts Used by | cmdb_ci_server |