Overview
The Network Discovery microservice allows clients to get specified network resource information. For each request received, the Network Discovery micro service collects information from the network (i.e., OpenStack API) and returns it to the client.
Use in POMBA
The initial use case for the microservice is to provide support for the Network Discovery Context Builder, which was introduced as part of the POMBA project.
Configuration
Application Properties
Warning | ||
---|---|---|
| ||
In current Network Discovery microservice development (Dublin), southbound REST API sends OpenStack API requests instead of AAI Enricher API requestsThe openstack.xxx properties must be adjusted to match your own OpenStack environment. |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
spring.jersey.type=filter #Enable HTTPS server.port=8443 server.ssl.key-store=config/auth/client-cert-onap.p12 server.ssl.key-store-password=password(OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10) server.ssl.keyStoreType=JKS server.ssl.keyAlias=tomcat server.ssl.client-auth=want server.ssl.enabled=true server.ssl.enabled-protocols=TLSv1.1,TLSv1.2 # Basic Authentication basicAuth.username=admin basicAuth.password=OBF:1u2a1toa1w8v1tok1u30 openstack.identity.url = http://10.69.36.11:5000/v3/auth/tokens openstack.identity.user = ralph openstack.identity.password = OBF:1w951ugg1vun1uha1w8l openstack.types = vserver, l3-network, port openstack.type.vserver.url = http://10.69.36100.11:8774/v2.1/servers/{0} openstack.type.l3-network.url = http://10.69.36100.11:9696/v2.0/networks/{0} openstack.type.port.url = http://10.69.100.11:9696/v2.0/ports/{0} openstack.api.microversion = 2.42 |
Swagger API documentation
The swagger UI is available at https://<host>:<port>/swagger/index.html
Info | ||
---|---|---|
| ||
https://10.69.102.6:30299/swagger/index.html |
Alternatively, copy and paste the following swagger.json into https://editor.swagger.io/ to browse the API documentation offline:
Code Block | ||||
---|---|---|---|---|
| ||||
{ "swagger" : "2.0", "info" : { "version" : "1.4.1-SNAPSHOT", "title" : "Network Discovery API", "termsOfService" : "http://onap.org" }, "basePath" : "/network-discovery", "tags" : [ { "name" : "resource" } ], "paths" : { "/{version}/network/resource" : { "get" : { "tags" : [ "resource" ], "summary" : "Get Network Information", "description" : "Retrieve information from primary data sources", "operationId" : "findbyResourceIdAndType", "consumes" : [ "application/json" ], "produces" : [ "application/json" ], "parameters" : [ { "name" : "version", "in" : "path", "required" : true, "type" : "string", "default" : "v1", "pattern" : "v1", "enum" : [ "v1" ] }, { "name" : "X-ONAP-PartnerName", "in" : "header", "required" : true, "type" : "string" }, { "name" : "X-ONAP-RequestID", "in" : "header", "required" : false, "type" : "string" }, { "name" : "requestId", "in" : "query", "required" : true, "type" : "string" }, { "name" : "resourceType", "in" : "query", "required" : true, "type" : "string" }, { "name" : "resourceId", "in" : "query", "required" : true, "type" : "array", "items" : { "type" : "string" }, "collectionFormat" : "multi" } ], "responses" : { "200" : { "description" : "Request has completed.", "schema" : { "$ref" : "#/definitions/NetworkDiscoveryNotification" } }, "400" : { "description" : "Missing mandatory field in the request or HTTP header." }, "401" : { "description" : "Missing basicAuth header." }, "404" : { "description" : "Requested resource was not found." }, "500" : { "description" : "Request failed due to internal error" } }, "security" : [ { "basicAuth" : [ ] } ] } } }, "securityDefinitions" : { "basicAuth" : { "type" : "basic" } }, "definitions" : { "Attribute" : { "type" : "object", "properties" : { "name" : { "type" : "string" }, "value" : { "type" : "string" }, "dataQuality" : { "$ref" : "#/definitions/DataQuality" } } }, "DataQuality" : { "type" : "object", "properties" : { "status" : { "type" : "string", "enum" : [ "ok", "error" ] }, "errorText" : { "type" : "string" } } }, "NetworkDiscoveryNotification" : { "type" : "object", "properties" : { "requestId" : { "type" : "string" }, "code" : { "type" : "integer", "format" : "int32" }, "message" : { "type" : "string" }, "ackFinalIndicator" : { "type" : "boolean" }, "resources" : { "type" : "array", "items" : { "$ref" : "#/definitions/Resource" } } } }, "Resource" : { "type" : "object", "properties" : { "id" : { "type" : "string" }, "name" : { "type" : "string" }, "type" : { "type" : "string" }, "dataQuality" : { "$ref" : "#/definitions/DataQuality" }, "attributeList" : { "type" : "array", "items" : { "$ref" : "#/definitions/Attribute" } } } } } } |
Examples
URI exampleQuery Openstack server
Code Block | ||
---|---|---|
| ||
https://10.69.102.6:30299/network-discovery/v1/network/resource?requestId=88001&resourceType=vserver&resourceId=645a12dc-09b5-45cb-8ab1-a0ce41b7200a |
Response example
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "requestId": "88001", "code": 200, "message": "OK", "ackFinalIndicator": true, "resources": [ { "id": "645a12dc-09b5-45cb-8ab1-a0ce41b7200a", "name": null"norm-d2-k8s", "type": "vserver", "dataQuality": { "status": "ok", "errorText": null }, "attributeList": [ { "name": "idinMaintenance", "value": "645a12dc-09b5-45cb-8ab1-a0ce41b7200afalse", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "namehostname", "value": "norm-d2-k8s", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "inMaintenancestatus", "value": "falseACTIVE", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "imageIdvmState", "value": "87e000f6-9a81-4841-b446-5d6751c42c48active", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "statususerId", "value": "ACTIVE0aae369d1c874bb7827f61ca4f11edae", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "vmStatetenantId", "value": "active1130b349e19c4827bf91a29d51256af1", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "tenantIdhostId", "value": "1130b349e19c4827bf91a29d51256af128ae48d6cb907e3d019535563716cfb7ec1f2cecc951439330ed9759", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "hostIdhost", "value": "28ae48d6cb907e3d019535563716cfb7ec1f2cecc951439330ed9759Setup-D2-OTT-A-Master", "dataQuality": { "status": "ok", "errorText": null } }, { "name": "hostStatus", "value": "UNKNOWNUP", "dataQuality": { "status": "ok", "errorText": null } } ] } ] } |
Query Openstack network
Code Block | ||
---|---|---|
| ||
https://10.69.102.6:30299/network-discovery/v1/network/resource?requestId=88001&resourceType=l3-network&resourceId=01e8d84a-17a6-47b5-a167-6a45d1d56603 |
Response example:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"requestId": "88001",
"code": 200,
"message": "OK",
"ackFinalIndicator": true,
"resources": [
{
"id": "01e8d84a-17a6-47b5-a167-6a45d1d56603",
"name": "NET_1106",
"type": "l3-network",
"dataQuality": {
"status": "ok",
"errorText": null
},
"attributeList": [
{
"name": "adminStateUp",
"value": "true",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "sharedNetwork",
"value": "true",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "status",
"value": "ACTIVE",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "subnets",
"value": "089c9160-6f7a-4ae0-83b7-33536b4c6672",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "tenantId",
"value": "cbd5e07f58d84ea6b795aa9f5f207df0",
"dataQuality": {
"status": "ok",
"errorText": null
}
}
]
}
]
}
|
Query Openstack port
Code Block | ||
---|---|---|
| ||
https://10.69.102.6:30299/network-discovery/v1/network/resource?requestId=88001&resourceType=port&resourceId=bcd87883-c92f-4f2b-b5bf-1288948facdd |
Response example:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"requestId": "88001",
"code": 200,
"message": "OK",
"ackFinalIndicator": true,
"resources": [
{
"id": "bcd87883-c92f-4f2b-b5bf-1288948facdd",
"name": "bcd8",
"type": "port",
"dataQuality": {
"status": "ok",
"errorText": null
},
"attributeList": [
{
"name": "adminStateUp",
"value": "true",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "description",
"value": "Port description",
"dataQuality": {
"status": "ok",
"errorText": null
}
},
{
"name": "macAddress",
"value": "fa:16:3e:ff:f7:af",
"dataQuality": {
"status": "ok",
"errorText": null
}
}
]
}
]
}
|
Model Mapping of Openstack attributes
VM (resourceType=vserver, Openstack type = server)
Openstack Attribute | Optional/Mandatory | Name on Network Discovery API | Note |
Mandatory | "type": "vserver" | ||
Id | Mandatory | id | |
name | Mandatory | name | |
locked | Mandatory | attributeList[name=inMaintenance] | |
OS-EXT-SRV-ATTR:hostname | Mandatory | attributeList[name=hostname] | Requires admin-level Openstack API user |
image.id | Mandatory | attributeList[name=imageId] | |
status | Optional | attributeList[name=status] | |
OS-EXT-STS:vm_state | Optional | attributeList[name=vmState] | |
user-id | Optional | attributeList[name=userId] | |
tenant_id | Optional | attributeList[name=tenantId] | |
hostId | Optional | attributeList[name=hostId] | |
OS-EXT-SRV-ATTR:host | Optional | attributeList[name=host] | Requires admin-level Openstack API user |
host_status | Optional | attributeList[name=hostStatus] | Requires admin-level Openstack API user |
Network (resourceType=l3-network, Openstack type = network)
Openstack Attribute | Optional/Mandatory | Name on Network Discovery API | Note |
Mandatory | "type": "l3-network" | ||
Id | Mandatory | id | |
name | Mandatory | name | |
admin_state_up | Mandatory | attributeList[name=adminStateUp] | |
shared | Mandatory | attributeList[name=sharedNetwork] | |
status | Optional | attributeList[name=status] | |
subnets | Optional | attributeList[name=subnets] | |
tenant_id | Optional | attributeList[name=tenantId] |
Port (resourceType=port, Openstack type = port)
Openstack Attribute | Optional/Mandatory | Name on Network Discovery API | Note |
Mandatory | "type": "port" | ||
Id | Mandatory | id | |
name | Mandatory | name | |
admin_state_up | Mandatory | attributeList[name=adminStateUp] | |
mac_address | Mandatory | attributeList[name=macAddress] | |
description | Mandatory | attributeList[name=description] |