Network Discovery Demo - Sept 12, 2018
Update
In current Network Discovery microservice development (Dublin), southbound REST API sends OpenStack API requests instead of AAI Enricher API requests.
Architecture
Overview
Will demonstrate Network Discovery Microservice and Service Decomposition Microservice
Relies on supporting Microservices not yet in ONAP, but we can show
Standardized API and provide a sense of its extensibility to support discovering of additional components
VM attributes from Openstack
How this fits into POMBA architecture
How this could be leveraged in other use cases
Southbound API
The following is the information expected from the southbound interface to network discovery
Examples (coming soon)
Mocking in SoapUI (soon)
Video
The demo shows a request being sent to POMBA's Network Discovery Context Builder, which makes use of Service Decomposition in order to build a list of resources that comprise the specified service. The context builder then takes advantage of the Network Discovery service to obtain details from the network for each of those resources. The context builder collates the information returned by Network Discovery for each resource before providing the collected data to POMBA's Context Aggregator for inclusion in an audit.
Captures
Service Decomposition
Network Discovery Context Builder → Service Decomposition
The context builder first needs to determine what resources comprise the service undergoing auditing and so it employs Service Decomposition.
Request
http://10.147.112.136:8080/service-decomposition/service/context?serviceInstanceId=c6456519-6acf-4adb-997c-3c363dd4caaf
Service Decomposition → AAI
Service Decomposition needs to send a series of requests to the AAI in order to effectively mine the data source for the service instance's component resources.
Request
http://10.147.112.136:8443/aai/v13/nodes/service-instance/c6456519-6acf-4adb-997c-3c363dd4caaf
Response
{
"service-instance-id": "c6456519-6acf-4adb-997c-3c363dd4caaf",
"service-instance-name": "Firewall1",
"model-invariant-id": "0c5a20de-87ad-442c-9190-f38ab0a6bb7f",
"model-version-id": "d3d6cf83-d03a-43cc-99ff-206d40bb9a72",
"resource-version": "1527637758480",
"relationship-list": {
"relationship": [
{
"related-to": "generic-vnf",
"related-link": "/aai/v13/network/generic-vnfs/generic-vnf/6700c313-fbb7-4cf9-ac70-0293ec56df68",
"relationship-data": [
{
"relationship-key": "generic-vnf.vnf-id",
"relationship-value": "6700c313-fbb7-4cf9-ac70-0293ec56df68"
}
],
"related-to-property": [
{
"property-key": "generic-vnf.vnf-name",
"property-value": "PacketGenerator-1"
}
]
},
{
"related-to": "generic-vnf",
"related-link": "/aai/v13/network/generic-vnfs/generic-vnf/8a9ddb25-2e79-449c-a40d-5011bac0da39",
"relationship-data": [
{
"relationship-key": "generic-vnf.vnf-id",
"relationship-value": "8a9ddb25-2e79-449c-a40d-5011bac0da39"
}
],
"related-to-property": [
{
"property-key": "generic-vnf.vnf-name",
"property-value": "Firewall-1"
}
]
}
]
}
}
Response
{
"relationship-list": {
"relationship": [{
"related-to": "generic-vnf",
"relationship-data": [{
"relationship-value": "6700c313-fbb7-4cf9-ac70-0293ec56df68",
"relationship-key": "generic-vnf.vnf-id"
}],
"related-link": "/aai/v13/network/generic-vnfs/generic-vnf/6700c313-fbb7-4cf9-ac70-0293ec56df68",
"related-to-property": [{
"property-key": "generic-vnf.vnf-name",
"property-value": "PacketGenerator-1"
}]
},
{
"related-to": "generic-vnf",
"relationship-data": [{
"relationship-value": "6700c313-fbb7-4cf9-ac70-0293ec56df69",
"relationship-key": "generic-vnf.vnf-id"
}],
"related-link": "/aai/v13/network/generic-vnfs/generic-vnf/6700c313-fbb7-4cf9-ac70-0293ec56df69",
"related-to-property": [{
"property-key": "generic-vnf.vnf-name",
"property-value": "PacketGenerator-2"
}]
}]
},
"model-version-id": "d3d6cf83-d03a-43cc-99ff-206d40bb9a72",
"service-instance-id": "c6456519-6acf-4adb-997c-3c363dd4caaf",
"resource-version": "1527637758480",
"generic-vnfs": [{
"nf-role": "",
"service-id": "8ea56b0d-459d-4668-b363-c9567432d8b7",
"relationship-list": {
"relationship": [{
"related-to": "service-instance",
"relationship-data": [{
"relationship-value": "Demonstration",
"relationship-key": "customer.global-customer-id"
},
{
"relationship-value": "vFWCL",
"relationship-key": "service-subscription.service-type"
},
{
"relationship-value": "c6456519-6acf-4adb-997c-3c363dd4caaf",
"relationship-key": "service-instance.service-instance-id"
}],
"related-link": "/aai/v11/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL/service-instances/service-instance/c6456519-6acf-4adb-997c-3c363dd4caaf",
"related-to-property": [{
"property-key": "service-instance.service-instance-name",
"property-value": "Firewall1"
}]
},
{
"related-to": "l3-network",
"relationship-data": [{
"relationship-value": "HNP1d77c-1094-41ec-b7f3-94bb30951870",
"relationship-key": "l3-network.network-id"
}],
"related-link": "/aai/v13/network/l3-networks/l3-network/HNP1d77c-1094-41ec-b7f3-94bb30951870",
"relationship-label": "org.onap.relationships.inventory.Uses",
"related-to-property": [{
"property-key": "l3-network.network-name",
"property-value": "HNPORTALOAM.OAM"
}]
},
{
"related-to": "vserver",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "b49b830686654191bb1e952a74b014ad",
"relationship-key": "tenant.tenant-id"
},
{
"relationship-value": "25fb07ab-0478-465e-a021-6384ac299671",
"relationship-key": "vserver.vserver-id"
}],
"related-link": "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b49b830686654191bb1e952a74b014ad/vservers/vserver/25fb07ab-0478-465e-a021-6384ac299671"
},
{
"related-to": "vserver",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "b49b830686654191bb1e952a74b014ad",
"relationship-key": "tenant.tenant-id"
},
{
"relationship-value": "25fb07ab-0478-465e-a021-6384ac299672",
"relationship-key": "vserver.vserver-id"
}],
"related-link": "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b49b830686654191bb1e952a74b014ad/vservers/vserver/25fb07ab-0478-465e-a021-6384ac299672"
}]
},
"vnf-id": "6700c313-fbb7-4cf9-ac70-0293ec56df68",
"nf-type": "",
"l3-networks": [{
"network-role": "HNPORTALOAM.OAM",
"network-technology": "ovs",
"service-id": "V7611HNP-1222-48f1-8085-94aef0c6ef3d51870",
"network-id": "HNP1d77c-1222-41ec-b7f3-94bb30951870",
"neutron-network-id": "491c7cef-a3f4-4990-883e-b0af397466d0",
"is-external-network": false,
"is-bound-to-vpn": false,
"is-provider-network": false,
"network-type": "OVS_PROVIDER_VLAN",
"orchestration-status": "active",
"network-role-instance": 0,
"resource-version": "1526558298075",
"network-name": "HNPORTALOAM.OAM",
"is-shared-network": false
}],
"prov-status": "PREPROV",
"vnf-type": "vFW-vSINK-service/vPKG 0",
"orchestration-status": "Created",
"nf-naming-code": "",
"in-maint": false,
"nf-function": "",
"model-version-id": "a5565bf4-d55a-4964-8fbc-6a7674a2e676",
"vservers": [{
"relationship-list": {
"relationship": [{
"related-to": "generic-vnf",
"relationship-data": [{
"relationship-value": "8a9ddb25-2e79-449c-a40d-5011bac0da39",
"relationship-key": "generic-vnf.vnf-id"
}],
"related-link": "/aai/v11/network/generic-vnfs/generic-vnf/8a9ddb25-2e79-449c-a40d-5011bac0da39",
"related-to-property": [{
"property-key": "generic-vnf.vnf-name",
"property-value": "Firewall-1"
}]
},
{
"related-to": "flavor",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39",
"relationship-key": "flavor.flavor-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
"related-to-property": [{
"property-key": "flavor.flavor-name",
"property-value": "m1.medium"
}]
},
{
"related-to": "image",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"relationship-key": "image.image-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"related-to-property": [{
"property-key": "image.image-name",
"property-value": "unknown"
}]
}]
},
"in-maint": false,
"resource-version": "1528481820321",
"vserver-name": "Firewall-0",
"prov-status": "ACTIVE",
"vserver-id": "25fb07ab-0478-465e-a021-6384ac299671",
"vserver-name2": "Firewall-0",
"vserver-selflink": "http://10.12.25.2:8774/v2.1/b49b830686654191bb1e952a74b014ad/servers/25fb07ab-0478-465e-a021-6384ac299671",
"is-closed-loop-disabled": false
},
{
"relationship-list": {
"relationship": [{
"related-to": "generic-vnf",
"relationship-data": [{
"relationship-value": "8a9ddb25-2e79-449c-a40d-5011bac0da39",
"relationship-key": "generic-vnf.vnf-id"
}],
"related-link": "/aai/v11/network/generic-vnfs/generic-vnf/8a9ddb25-2e79-449c-a40d-5011bac0da39",
"related-to-property": [{
"property-key": "generic-vnf.vnf-name",
"property-value": "Firewall-1"
}]
},
{
"related-to": "flavor",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39",
"relationship-key": "flavor.flavor-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
"related-to-property": [{
"property-key": "flavor.flavor-name",
"property-value": "m1.medium"
}]
},
{
"related-to": "image",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"relationship-key": "image.image-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"related-to-property": [{
"property-key": "image.image-name",
"property-value": "unknown"
}]
}]
},
"in-maint": false,
"resource-version": "1528481820321",
"vserver-name": "Firewall-0",
"prov-status": "ACTIVE",
"vserver-id": "25fb07ab-0478-465e-a021-6384ac299672",
"vserver-name2": "Firewall-0",
"vserver-selflink": "http://10.12.25.2:8774/v2.1/b49b830686654191bb1e952a74b014ad/servers/25fb07ab-0478-465e-a021-6384ac299672",
"is-closed-loop-disabled": false
}],
"resource-version": "1527638176989",
"model-customization-id": "4cc1e555-361f-4d69-ae21-9f371ea9f40c",
"vf-modules": {
"vf-module": [{
"vf-module-name": "vPacketGen-VNF-1128-3",
"model-version-id": "d6d4a002-a584-4640-bdce-a50e9bce552b",
"heat-stack-id": "vPacketGen-VNF-1128-3/df34f5d6-ed39-4184-b785-51c37cfa8ac2",
"resource-version": "1527641224058",
"model-customization-id": "49c8f521-e5ee-4095-bb87-4090166e49ab",
"is-base-vf-module": true,
"vf-module-id": "0f792076-f5b3-4251-9fcc-c4d5afae0eb1",
"module-index": 0,
"model-invariant-id": "2a8844a8-f5f7-46dd-a732-472c6972a28e",
"orchestration-status": "active"
}]
},
"vserver": [{
"vserver-name": "Firewall-1",
"vserver-id": "25fb07ab-0478-465e-a021-6384ac299671",
"model-invariant-id": "0c5a20de-87ad-442c-9190-f38ab0a6bb7f"
}],
"model-invariant-id": "99f1fd3f-845c-48f5-a0ba-11fbde6ae557",
"vnf-name": "PacketGenerator-1",
"is-closed-loop-disabled": false
},
{
"nf-role": "",
"service-id": "8ea56b0d-459d-4668-b363-c9567432d8b9",
"relationship-list": {
"relationship": [{
"related-to": "service-instance",
"relationship-data": [{
"relationship-value": "Demonstration",
"relationship-key": "customer.global-customer-id"
},
{
"relationship-value": "vFWCL",
"relationship-key": "service-subscription.service-type"
},
{
"relationship-value": "c6456519-6acf-4adb-997c-3c363dd4caaf",
"relationship-key": "service-instance.service-instance-id"
}],
"related-link": "/aai/v11/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL/service-instances/service-instance/c6456519-6acf-4adb-997c-3c363dd4caaf",
"related-to-property": [{
"property-key": "service-instance.service-instance-name",
"property-value": "Firewall1"
}]
},
{
"related-to": "l3-network",
"relationship-data": [{
"relationship-value": "HNP1d77c-1094-41ec-b7f3-94bb30951870",
"relationship-key": "l3-network.network-id"
}],
"related-link": "/aai/v13/network/l3-networks/l3-network/HNP1d77c-1094-41ec-b7f3-94bb30951871",
"relationship-label": "org.onap.relationships.inventory.Uses",
"related-to-property": [{
"property-key": "l3-network.network-name",
"property-value": "HNPORTALOAM.OAM"
}]
},
{
"related-to": "vserver",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "b49b830686654191bb1e952a74b014ad",
"relationship-key": "tenant.tenant-id"
},
{
"relationship-value": "25fb07ab-0478-465e-a021-6384ac299671",
"relationship-key": "vserver.vserver-id"
}],
"related-link": "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b49b830686654191bb1e952a74b014ad/vservers/vserver/b494cd6e-b9f3-45e0-afe7-e1d1a5f5d74b"
}]
},
"vnf-id": "6700c313-fbb7-4cf9-ac70-0293ec56df69",
"nf-type": "",
"l3-networks": [{
"network-role": "HNPORTALOAM.OAM",
"network-technology": "ovs",
"service-id": "V7611HNP-1222-48f1-8085-94aef0c6ef3d51870",
"network-id": "HNP1d77c-1222-41ec-b7f3-94bb30951870",
"neutron-network-id": "491c7cef-a3f4-4990-883e-b0af397466d0",
"is-external-network": false,
"is-bound-to-vpn": false,
"is-provider-network": false,
"network-type": "OVS_PROVIDER_VLAN",
"orchestration-status": "active",
"network-role-instance": 0,
"resource-version": "1526558298075",
"network-name": "HNPORTALOAM.OAM",
"is-shared-network": false
}],
"prov-status": "PREPROV",
"vnf-type": "vFW-vSINK-service/vPKG 0",
"orchestration-status": "Created",
"nf-naming-code": "",
"in-maint": false,
"nf-function": "",
"model-version-id": "a5565bf4-d55a-4964-8fbc-6a7674a2e676",
"vservers": [{
"relationship-list": {
"relationship": [{
"related-to": "generic-vnf",
"relationship-data": [{
"relationship-value": "8a9ddb25-2e79-449c-a40d-5011bac0da39",
"relationship-key": "generic-vnf.vnf-id"
}],
"related-link": "/aai/v11/network/generic-vnfs/generic-vnf/8a9ddb25-2e79-449c-a40d-5011bac0da39",
"related-to-property": [{
"property-key": "generic-vnf.vnf-name",
"property-value": "Firewall-1"
}]
},
{
"related-to": "flavor",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39",
"relationship-key": "flavor.flavor-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
"related-to-property": [{
"property-key": "flavor.flavor-name",
"property-value": "m1.medium"
}]
},
{
"related-to": "image",
"relationship-data": [{
"relationship-value": "CloudOwner",
"relationship-key": "cloud-region.cloud-owner"
},
{
"relationship-value": "RegionOne",
"relationship-key": "cloud-region.cloud-region-id"
},
{
"relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"relationship-key": "image.image-id"
}],
"related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
"related-to-property": [{
"property-key": "image.image-name",
"property-value": "unknown"
}]
}]
},
"in-maint": false,
"resource-version": "1528481820321",
"vserver-name": "Firewall-0",
"prov-status": "ACTIVE",
"vserver-id": "b494cd6e-b9f3-45e0-afe7-e1d1a5f5d74b",
"vserver-name2": "Firewall-0",
"vserver-selflink": "http://10.12.25.2:8774/v2.1/b49b830686654191bb1e952a74b014ad/servers/25fb07ab-0478-465e-a021-6384ac299671",
"is-closed-loop-disabled": false
}],
"resource-version": "1527638176989",
"model-customization-id": "4cc1e555-361f-4d69-ae21-9f371ea9f40c",
"vf-modules": {
"vf-module": [{
"vf-module-name": "vPacketGen-VNF-1128-3",
"model-version-id": "d6d4a002-a584-4640-bdce-a50e9bce552b",
"heat-stack-id": "vPacketGen-VNF-1128-3/df34f5d6-ed39-4184-b785-51c37cfa8ac2",
"resource-version": "1527641224058",
"model-customization-id": "49c8f521-e5ee-4095-bb87-4090166e49ab",
"is-base-vf-module": true,
"vf-module-id": "0f792076-f5b3-4251-9fcc-c4d5afae0eb1",
"module-index": 0,
"model-invariant-id": "2a8844a8-f5f7-46dd-a732-472c6972a28e",
"orchestration-status": "active"
}]
},
"vserver": [{
"vserver-name": "Firewall-1",
"vserver-id": "25fb07ab-0478-465e-a021-6384ac299672",
"model-invariant-id": "0c5a20de-87ad-442c-9190-f38ab0a6bb7f"
}],
"model-invariant-id": "99f1fd3f-845c-48f5-a0ba-11fbde6ae557",
"vnf-name": "PacketGenerator-2",
"is-closed-loop-disabled": false
}],
"model-invariant-id": "0c5a20de-87ad-442c-9190-f38ab0a6bb7f",
"service-instance-name": "Firewall1"
}
Network Discovery
Network Discovery Context Builder → Network Discovery
The context builder next needs to send multiple requests – one for each resource provided by Service Decomposition – to Network Discovery in order to obtain the values of associated attributes.
Request (Network Resource)
http://10.147.112.148:8080/network-discovery/v1/network/resource?requestId=d4ec9585-eb78-4450-b52c-dc3fa6194667___3?resourceType=l3-network?resourceId=HNP1d77c-1222-41ec-b7f3-94bb30951870?notificationURL=http://10.147.112.148:8080/network-discovery/v1/network/resource
Network Discovery → AAI Enricher
For each resource passed to it, Network Discovery simply hands off the discovery work to the AAI Enricher, which utilizes addons to query live networks. (Note: Enricher is not in ONAP at this time but the responses could be mocked.)
Request
https://d2enrichment:9505/enricher/v11/network/l3-networks/l3-network/HNP1d77c-1222-41ec-b7f3-94bb30951870?sot=!aai
Response
e.g.
<l3-network xmlns="http://org.openecomp.aai.inventory/v10">
<network-id>HNP1d77c-1222-41ec-b7f3-94bb30951870</network-id>
<network-name>networkname</network-name>
<is-shared-network>true</is-shared-network>
<in-maint>false</in-maint>
<retrieval-timestamp>2018-09-12 01:02:03 +0000</retrieval-timestamp>
</l3-network>
Response (Network Resource)
[requestId=9d9bbc4a-787a-44d3-8ac4-37daed95b252___13, code=200, message=OK, ackFinalIndicator=true, resources=[Resource [id=HNP1d77c-1222-41ec-b7f3-94bb30951870, name=null, type=l3-network, dataQuality=DataQuality [status=error, errorText=ENRICHER-312, Unknown SoT as Enricher could not recognize the SoT reference.], attributeList=null]]]
Request (VM Resource)
Network Discovery → AAI Enricher
Request
Response
e.g.
<vserver xmlns="http://org.openecomp.aai.invetory/v10">
<vserver-id>9168b536-cd40-4630-b43f-b259807c6e87</vserver-id>
<vserver-name>new-server-test</vserver-name>
<locked>false</locked>
<hostname>kll0123</hostname>
<image-id>70a599e0-31e7-49b7-b260-868f441e862b</image-id>
<retrieval-timestamp>2018-09-04 01:23:45 +0000</retrieval-timestamp>
</vserver>
Response (VM Resource)