Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.



Table of Contents


Info
titleCasablanca Release

The Network Discovery microservice was first introduced in Casablanca but had no southbound integration. The Dublin release introduces the integration of Network Discovery with the Openstack API.


Overview

The Network Discovery microservice allows clients to initiate audits of get specified network resource instancesinformation. For each request received, the Network Discovery microservice micro service collects information from the network (via other microservicesi.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
titleUpdate

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
languagebash
titleApplication Properties
collapsetrue
spring.jersey.type=filter
spring.mvc.urls=swagger,docs,prometheus,auditevents,info,heapdump,autoconfig,beans,loggers,dump,env,trace,health,configprops,mappings,metrics,webjars


server.contextPath=/network-discovery
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

#This property is used to set the Tomcat connector attributes.developers can define multiple attributes separated by comma
#tomcat.connector.attributes=allowTrace-true
#The max number of active threads in this pool
server.tomcat.max-threads=200
#The minimum number of threads always kept alive
server.tomcat.min-Spare-Threads=25
#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads
server.tomcat.max-idle-time=60000

#Servlet context parameters
server.context_parameters.p-name=value #context parameter with p-name as key and value as value.

#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
openstack.type.vserver.url    = http://10.69.36.11:8774/v2.1/servers/{0}
openstack.type.l3-network.url = http://10.69.36.11:9696/v2.0/networks/{0}

openstack.api.microversion = 2.42

#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.100.11:8774/v2.1/servers/{0}
openstack.type.l3-network.url = http://10.69.100.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
titleExample URL/port for OOM deployments
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
titleswagger.json
collapsetrue
{
  "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" : [ {

Interfaces/API

URI example

Code Block
titleNetwork Discovery Micro Service URI example
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
languagexml
titleNetwork Discovery Micro Service response
collapsetrue
{
    "requestId": "88001",
    "code": 200,
    "message": "OK",
    "ackFinalIndicator": true,
    "resources": [
        {
    "name" : "version",
          "idin" : "645a12dc-09b5-45cb-8ab1-a0ce41b7200apath",
            "namerequired" : nulltrue,
            "type" : "vserverstring",
            "dataQualitydefault" : {"v1",
                "status""pattern" : "okv1",
          "enum" :   [  "errorTextv1": null]
            }, {
          "name" : "attributeList": [X-ONAP-PartnerName",
          "in" : "header",
    {
      "required" : true,
            "nametype" : "idstring",
        }, {
           "valuename" : "645a12dcX-09b5-45cb-8ab1-a0ce41b7200aONAP-RequestID",
          "in" : "header",
          "dataQualityrequired" : {false,
          "type" : "string"
        }, {
   "status"       "name" : "okrequestId",
          "in" : "query",
            "errorTextrequired" : nulltrue,
          "type" : "string"
        }, {
          "name"      }: "resourceType",
          "in" : "query",
    {
      "required" : true,
            "nametype" : "namestring",
        }, {
           "valuename" : "norm-d2-k8sresourceId",
          "in" : "query",
          "dataQualityrequired" : {
            true,
            "statustype" : "okarray",
          "items" : {
            "errorTexttype" : null"string"
          },
           }"collectionFormat" : "multi"
        } ],
       },
 "responses" : {
          "200" :  {
            "description" : "Request has completed.",
      "name": "inMaintenance",
      "schema" : {
              "value$ref" : "false#/definitions/NetworkDiscoveryNotification",
            }
        "dataQuality": {  },
          "400" : {
            "statusdescription" : "ok",
       Missing mandatory field in the request or HTTP header."
          },
          "errorText401" : null{
            "description" : "Missing basicAuth header."
      }
    },
          "404" : },{
            "description" : "Requested resource was not {found."
          },
          "name500" : "imageId",{
            "description" : "Request failed due to internal  error"value": "87e000f6-9a81-4841-b446-5d6751c42c48",

          }
           "dataQuality": {},
        "security" : [ {
             "statusbasicAuth" : "ok",[ ]
        } ]
      }
    }
  },
   "errorTextsecurityDefinitions" : null{
    "basicAuth" : {
      "type" :  "basic"
    }
  },
  "definitions" : {
    "Attribute" : {
      "type" : }"object",
      "properties" : {
        "name" : {
          "type" : "string"
        "name": "status"},
        "value" : {
          "valuetype" : "ACTIVEstring",
        },
            "dataQuality""dataQuality" : {
          "$ref" : "#/definitions/DataQuality"
        }
     "status": "ok", }
    },
    "DataQuality" : {
      "type" : "object",
      "errorTextproperties" : null{
        "status" : {
          }
"type" : "string",
          "enum" : [  }"ok",
 "error" ]
              {},
        "errorText" : {
          "nametype" : "vmStatestring",
        }
      }
      "value": "active"},
    "NetworkDiscoveryNotification" : {
      "type" : "object",
      "dataQualityproperties" : {
        "requestId" : {
          "type" : "string"
   "status": "ok",
    },
        "code" : {
          "errorTexttype" : null"integer",
          "format" : "int32"
        },
        "message" : {
      },
    "type" : "string"
          {},
        "ackFinalIndicator" : {
          "nametype" : "tenantIdboolean",
            },
        "valueresources" : "1130b349e19c4827bf91a29d51256af1",{
          "type" : "array",
          "dataQualityitems" : {
            "$ref" : "#/definitions/Resource"
          "status": "ok",}
        }
      }
    },
      "errorTextResource" : null{
      "type" : "object",
       "properties" : {
   }
     "id" : {
          "type" : },"string"
        },
        "name" : {
          "type" : "string"
        "name": "hostId"},
        "type" : {
          "valuetype" : "28ae48d6cb907e3d019535563716cfb7ec1f2cecc951439330ed9759string",
         },
           "dataQuality" : {
          "$ref" : "#/definitions/DataQuality"
            "status": "ok"},
        "attributeList" : {
          "type" :   "errorTextarray": null,
          "items" : {
        }
    "$ref" : "#/definitions/Attribute"
          },
        }
        {}
    }
  }
}



Examples


Query Openstack server

Code Block
titleNetwork Discovery Micro Service URI example
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
languagexml
titleNetwork Discovery Micro Service response
collapsetrue
{
    "requestId": "88001",
    "code": 200,
    "message": "OK",
    "ackFinalIndicator": true,
    "resources": [
                "name": "hostStatus",
                    "value": "UNKNOWN",
                    "dataQuality": {
                       {
 "status": "ok",
          "id": "645a12dc-09b5-45cb-8ab1-a0ce41b7200a",
             "errorTextname": null"norm-d2-k8s",
            "type": "vserver",
        }
    "dataQuality": {
                 }"status": "ok",
            ]    "errorText": null
            },
     ]
}

       "attributeList": [
                {
                    "name": "inMaintenance",
                    "value": "false",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "hostname",
                    "value": "norm-d2-k8s",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "status",
                    "value": "ACTIVE",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "vmState",
                    "value": "active",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "userId",
                    "value": "0aae369d1c874bb7827f61ca4f11edae",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "tenantId",
                    "value": "1130b349e19c4827bf91a29d51256af1",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "hostId",
                    "value": "28ae48d6cb907e3d019535563716cfb7ec1f2cecc951439330ed9759",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "host",
                    "value": "Setup-D2-OTT-A-Master",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                },
                {
                    "name": "hostStatus",
                    "value": "UP",
                    "dataQuality": {
                        "status": "ok",
                        "errorText": null
                    }
                }
            ]
        }
    ]
}


Query Openstack network

Code Block
titleNetwork Discovery Micro Service URI example
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
languagexml
titleNetwork Discovery Micro Service response
collapsetrue
{
    "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
titleNetwork Discovery Micro Service URI example
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
languagexml
titleNetwork Discovery Micro Service response
collapsetrue
{
    "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 AttributeOptional/Mandatory

Name on Network Discovery API

Note

Mandatory"type": "vserver"
IdMandatoryid
nameMandatoryname
lockedMandatoryattributeList[name=inMaintenance]
OS-EXT-SRV-ATTR:hostnameMandatoryattributeList[name=hostname]Requires admin-level Openstack API user
image.idMandatoryattributeList[name=imageId]
statusOptionalattributeList[name=status]
OS-EXT-STS:vm_state OptionalattributeList[name=vmState]
user-idOptionalattributeList[name=userId]
tenant_idOptionalattributeList[name=tenantId]
hostIdOptionalattributeList[name=hostId]
OS-EXT-SRV-ATTR:hostOptionalattributeList[name=host]Requires admin-level Openstack API user
host_statusOptionalattributeList[name=hostStatus]Requires admin-level Openstack API user


Network (resourceType=l3-network, Openstack type = network)

Openstack AttributeOptional/MandatoryName on Network Discovery APINote

Mandatory"type": "l3-network"
IdMandatoryid
nameMandatoryname
admin_state_upMandatoryattributeList[name=adminStateUp]
sharedMandatoryattributeList[name=sharedNetwork]
statusOptionalattributeList[name=status]
subnetsOptionalattributeList[name=subnets]
tenant_idOptionalattributeList[name=tenantId]


Port (resourceType=port, Openstack type = port)

Openstack AttributeOptional/MandatoryName on Network Discovery APINote

Mandatory"type": "port"
IdMandatoryid
nameMandatoryname
admin_state_upMandatoryattributeList[name=adminStateUp]
mac_addressMandatoryattributeList[name=macAddress]
descriptionMandatoryattributeList[name=description]