fix public NS distribution issue 18/94818/2
authorsarada prasad sahoo <sarada.prasad.sahoo@huawei.com>
Tue, 3 Sep 2019 09:57:13 +0000 (15:27 +0530)
committersarada prasad sahoo <sarada.prasad.sahoo@huawei.com>
Wed, 4 Sep 2019 13:23:13 +0000 (18:53 +0530)
Fix Multiple VFModule under single service distribution

Issue-ID: SO-2275
Change-Id: I7a4a7dbb68d23c0e44f9985b3fdc89816dbfd232
Signed-off-by: sarada prasad sahoo <sarada.prasad.sahoo@huawei.com>
15 files changed:
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/test/java/org/onap/so/asdc/client/test/rest/ASDCRestInterfaceTest.java
asdc-controller/src/test/resources/resource-examples/public-ns/demo-public-ns-notification.json [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-csar.csar [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-template.yml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.env [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.yaml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vcpe0_modules.json [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vendor-license-model.xml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vf-license-model.xml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.env [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.yaml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vendor-license-model.xml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vf-license-model.xml [new file with mode: 0644]
asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vgw0_modules.json [new file with mode: 0644]

index da989b0..c3ee081 100644 (file)
@@ -656,7 +656,10 @@ public class ToscaResourceInstaller {
                         NetworkResourceCustomization networkCustomization = createNetwork(vlEntity, toscaResourceStruct,
                                 heatTemplate, tempNetworkLookUp.getAicVersionMax(),
                                 tempNetworkLookUp.getAicVersionMin(), service);
-                        service.getNetworkCustomizations().add(networkCustomization);
+                        // only insert unique entries
+                        if (!service.getNetworkCustomizations().contains(networkCustomization)) {
+                            service.getNetworkCustomizations().add(networkCustomization);
+                        }
                     } else {
                         throw new ArtifactInstallerException("No HeatTemplate found for artifactUUID: "
                                 + tempNetworkLookUp.getHeatTemplateArtifactUuid());
@@ -2499,7 +2502,6 @@ public class ToscaResourceInstaller {
             // setting resource input for vnf customization
             vnfResourceCustomization.setResourceInput(
                     getResourceInput(toscaResourceStructure, vnfResourceCustomization.getModelCustomizationUUID()));
-            service.getVnfCustomizations().add(vnfResourceCustomization);
 
         }
         return vnfResourceCustomization;
@@ -2815,10 +2817,16 @@ public class ToscaResourceInstaller {
             Service existingService = services.get(0);
             List<VnfResourceCustomization> existingVnfCustomizations = existingService.getVnfCustomizations();
             if (existingService != null) {
-                service.getVnfCustomizations().addAll(existingVnfCustomizations);
+                // it is duplicating entries, so added a check
+                for (VnfResourceCustomization existingVnfResourceCustomization : existingVnfCustomizations) {
+                    if (!service.getVnfCustomizations().contains(existingVnfResourceCustomization)) {
+                        service.getVnfCustomizations().add(existingVnfResourceCustomization);
+                    }
+                }
             }
         }
         service.getVnfCustomizations().add(vnfResourceCustomization);
+
     }
 
 
index 2a4b3aa..fc72f9b 100644 (file)
@@ -319,6 +319,30 @@ public class ASDCRestInterfaceTest extends BaseTest {
         assertEquals("CCVPNService", service.get().getModelName());
     }
 
+    @Test
+    public void test_PublicNS_Distribution() throws Exception {
+        wireMockServer.stubFor(post(urlPathMatching("/aai/.*"))
+                .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json")));
+
+        wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec"))
+                .willReturn(aResponse().withHeader("Content-Type", "application/json")
+                        .withStatus(org.springframework.http.HttpStatus.ACCEPTED.value())));
+
+        String resourceLocation = "src/test/resources/resource-examples/public-ns/";
+        ObjectMapper mapper = new ObjectMapper();
+        NotificationDataImpl request = mapper.readValue(new File(resourceLocation + "demo-public-ns-notification.json"),
+                NotificationDataImpl.class);
+        headers.add("resource-location", resourceLocation);
+        HttpEntity<NotificationDataImpl> entity = new HttpEntity<NotificationDataImpl>(request, headers);
+        ResponseEntity<String> response = restTemplate.exchange(createURLWithPort("test/treatNotification/v1"),
+                HttpMethod.POST, entity, String.class);
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+
+        Optional<Service> service = serviceRepo.findById("da28696e-d4c9-4df4-9f91-465c6c09a81e");
+        assertTrue(service.isPresent());
+        assertEquals("PublicNS", service.get().getModelName());
+    }
+
     protected String createURLWithPort(String uri) {
         return "http://localhost:" + port + uri;
     }
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/demo-public-ns-notification.json b/asdc-controller/src/test/resources/resource-examples/public-ns/demo-public-ns-notification.json
new file mode 100644 (file)
index 0000000..f829bf0
--- /dev/null
@@ -0,0 +1,173 @@
+{
+  "distributionID": "2d6c5aa8-b644-4f30-a632-5577801ef954",
+  "serviceName": "PublicNS",
+  "serviceVersion": "1.0",
+  "serviceUUID": "da28696e-d4c9-4df4-9f91-465c6c09a81e",
+  "serviceDescription": "PUblic NS",
+  "serviceInvariantUUID": "e907ce73-7e4d-4bf8-b94a-21bd1a7c7592",
+  "resources": [
+    {
+      "resourceInstanceName": "vCPE 0",
+      "resourceName": "vCPE",
+      "resourceVersion": "1.0",
+      "resoucreType": "VF",
+      "resourceUUID": "a67562cf-1bf3-4450-8b69-3bb1cff43089",
+      "resourceInvariantUUID": "e0b3088d-9ca8-482a-aa5a-a1e6906b2d22",
+      "resourceCustomizationUUID": "ae70c293-8db3-40cd-8cd0-30cde194bea5",
+      "category": "Generic",
+      "subcategory": "Infrastructure",
+      "artifacts": [
+        {
+          "artifactName": "vf-license-model.xml",
+          "artifactType": "VF_LICENSE",
+          "artifactURL": "/vcpe0/vf-license-model.xml",
+          "artifactChecksum": "YjYyYWNiMzUxM2YzMWYxYWVhN2Y5MTM3N2E5YzNhNmU\u003d",
+          "artifactDescription": "VF license file",
+          "artifactTimeout": 120,
+          "artifactUUID": "5c29e823-7114-4988-824f-f670ba9d7b21",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vcpe0_modules.json",
+          "artifactType": "VF_MODULES_METADATA",
+          "artifactURL": "/vcpe0/vcpe0_modules.json",
+          "artifactChecksum": "MDJkYjNmNjEzM2Y1ZDgzNzZiZWUxMjZkMzA3YzkwZDI\u003d",
+          "artifactDescription": "Auto-generated VF Modules information artifact",
+          "artifactTimeout": 120,
+          "artifactUUID": "128e4e77-21a4-49c3-ac7a-7ca3b187bddc",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "ar1000v.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/vcpe0/ar1000v.yaml",
+          "artifactChecksum": "NWU2NGUwNmNkMGEzYjAxMTAyODkzNTc5YzFmZDBmMzM\u003d",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 120,
+          "artifactUUID": "12dcc618-20f2-4f15-ab00-c549b96b3910",
+          "artifactVersion": "2"
+        },
+        {
+          "artifactName": "vendor-license-model.xml",
+          "artifactType": "VENDOR_LICENSE",
+          "artifactURL": "/vcpe0/vendor-license-model.xml",
+          "artifactChecksum": "OTRkOTY3YjdjM2ZlNDM3NjNlZjBjODU4YTJmNGZhNGE\u003d",
+          "artifactDescription": " Vendor license file",
+          "artifactTimeout": 120,
+          "artifactUUID": "74c4d1bd-1779-421f-8c9d-774ac4567031",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "ar1000v.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/vcpe0/ar1000v.env",
+          "artifactChecksum": "YzI4MjlkODk4YzcyOTgzZTg2YjAyM2ZiNWU1N2FmMjI\u003d",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 120,
+          "artifactUUID": "5821b043-ba50-49ef-b739-61b0896050f2",
+          "artifactVersion": "2",
+          "generatedFromUUID": "12dcc618-20f2-4f15-ab00-c549b96b3910"
+        }
+      ]
+    },
+    {
+      "resourceInstanceName": "vGW 0",
+      "resourceName": "vGW",
+      "resourceVersion": "1.0",
+      "resoucreType": "VF",
+      "resourceUUID": "cd82e255-56cf-4644-858e-36cfc45ef754",
+      "resourceInvariantUUID": "52905e03-0632-43f9-93f2-2ab7d959f633",
+      "resourceCustomizationUUID": "fd8595de-1081-4e39-a401-24ffebaa9ed8",
+      "category": "Generic",
+      "subcategory": "Infrastructure",
+      "artifacts": [
+        {
+          "artifactName": "vf-license-model.xml",
+          "artifactType": "VF_LICENSE",
+          "artifactURL": "/vgw0/vf-license-model.xml",
+          "artifactChecksum": "YTdlMDhmYjMzODg5NmI3ODgwNjA0MmUyOWU2N2I2MGM\u003d",
+          "artifactDescription": "VF license file",
+          "artifactTimeout": 120,
+          "artifactUUID": "f2db3ba5-190f-4214-90fd-93407caf10c1",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "vgw0_modules.json",
+          "artifactType": "VF_MODULES_METADATA",
+          "artifactURL": "/vgw0/vgw0_modules.json",
+          "artifactChecksum": "OTQwY2ZlZThjMjNlYjAyNzU4NDUyZDVhY2VjNTIwZTk\u003d",
+          "artifactDescription": "Auto-generated VF Modules information artifact",
+          "artifactTimeout": 120,
+          "artifactUUID": "8730baa0-1b8c-4ac3-bc5c-d49c5b88f111",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "gateway.yaml",
+          "artifactType": "HEAT",
+          "artifactURL": "/vgw0/gateway.yaml",
+          "artifactChecksum": "NGNiMGRjMWViNGRkMGQzM2ZjNDNjMjQ5OGMwMjI2MjM\u003d",
+          "artifactDescription": "created from csar",
+          "artifactTimeout": 120,
+          "artifactUUID": "60d55796-212c-4c66-8af5-63964d636ae4",
+          "artifactVersion": "2"
+        },
+        {
+          "artifactName": "vendor-license-model.xml",
+          "artifactType": "VENDOR_LICENSE",
+          "artifactURL": "/vgw0/vendor-license-model.xml",
+          "artifactChecksum": "OTRkOTY3YjdjM2ZlNDM3NjNlZjBjODU4YTJmNGZhNGE\u003d",
+          "artifactDescription": " Vendor license file",
+          "artifactTimeout": 120,
+          "artifactUUID": "019bdcbf-03fc-4ec2-8d39-c09f808722e9",
+          "artifactVersion": "1"
+        },
+        {
+          "artifactName": "gateway.env",
+          "artifactType": "HEAT_ENV",
+          "artifactURL": "/vgw0/gateway.env",
+          "artifactChecksum": "Y2Y4ZDgzMDg3NDBiMDhkODZiMmE1MGUyYjU2ZGFlZDU\u003d",
+          "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
+          "artifactTimeout": 120,
+          "artifactUUID": "9df0452f-826c-4287-9a2d-ca0095339866",
+          "artifactVersion": "2",
+          "generatedFromUUID": "60d55796-212c-4c66-8af5-63964d636ae4"
+        }
+      ]
+    },
+    {
+      "resourceInstanceName": "Generic NeutronNet 0",
+      "resourceName": "Generic NeutronNet",
+      "resourceVersion": "1.0",
+      "resoucreType": "VL",
+      "resourceUUID": "4069be99-5d9a-427b-a427-04fe16ccbf38",
+      "resourceInvariantUUID": "f3ed1133-c1bb-4735-82d4-8e041265fad6",
+      "resourceCustomizationUUID": "c8a1a81d-d836-4f33-9d0e-91e9417f812a",
+      "category": "Generic",
+      "subcategory": "Network Elements",
+      "artifacts": []
+    }
+  ],
+  "serviceArtifacts": [
+    {
+      "artifactName": "service-Publicns-template.yml",
+      "artifactType": "TOSCA_TEMPLATE",
+      "artifactURL": "/service-Publicns-template.yml",
+      "artifactChecksum": "NTUzMDU5YzM3MTk4OGNiNjQ2OGRlMWY2YjU3MjE2YjM\u003d",
+      "artifactDescription": "TOSCA representation of the asset",
+      "artifactTimeout": 0,
+      "artifactUUID": "2617d0ca-54f0-4222-b659-c12e292d94dd",
+      "artifactVersion": "1"
+    },
+    {
+      "artifactName": "service-Publicns-csar.csar",
+      "artifactType": "TOSCA_CSAR",
+      "artifactURL": "/service-Publicns-csar.csar",
+      "artifactChecksum": "ZTRhOGI0M2UxN2ZhYjQ0ODI5ZDZhZTExZTFkMGU3N2Y\u003d",
+      "artifactDescription": "TOSCA definition package of the asset",
+      "artifactTimeout": 0,
+      "artifactUUID": "26a323ff-b97b-4b86-96b1-25a80c0876e5",
+      "artifactVersion": "1"
+    }
+  ],
+  "workloadContext": "Production"
+}
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-csar.csar b/asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-csar.csar
new file mode 100644 (file)
index 0000000..d5ea949
Binary files /dev/null and b/asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-csar.csar differ
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-template.yml b/asdc-controller/src/test/resources/resource-examples/public-ns/service-Publicns-template.yml
new file mode 100644 (file)
index 0000000..2e6f293
--- /dev/null
@@ -0,0 +1,1186 @@
+tosca_definitions_version: tosca_simple_yaml_1_1
+metadata:
+  invariantUUID: e907ce73-7e4d-4bf8-b94a-21bd1a7c7592
+  UUID: da28696e-d4c9-4df4-9f91-465c6c09a81e
+  name: PublicNS
+  description: PUblic NS
+  type: Service
+  category: E2E Service
+  serviceType: ''
+  serviceRole: ''
+  instantiationType: A-la-carte
+  serviceEcompNaming: true
+  ecompGeneratedNaming: true
+  namingPolicy: ''
+  environmentContext: General_Revenue-Bearing
+imports:
+- nodes:
+    file: nodes.yml
+- datatypes:
+    file: data.yml
+- capabilities:
+    file: capabilities.yml
+- relationships:
+    file: relationships.yml
+- groups:
+    file: groups.yml
+- policies:
+    file: policies.yml
+- annotations:
+    file: annotations.yml
+- service-PublicNS-interface:
+    file: service-Publicns-template-interface.yml
+- resource-vCPE:
+    file: resource-Vcpe-template.yml
+- resource-vCPE-interface:
+    file: resource-Vcpe-template-interface.yml
+- resource-vGW:
+    file: resource-Vgw-template.yml
+- resource-vGW-interface:
+    file: resource-Vgw-template-interface.yml
+- resource-Generic NeutronNet:
+    file: resource-GenericNeutronnet-template.yml
+topology_template:
+  node_templates:
+    vCPE 0:
+      type: org.openecomp.resource.vf.Vcpe
+      metadata:
+        invariantUUID: e0b3088d-9ca8-482a-aa5a-a1e6906b2d22
+        UUID: 32edc5e6-34f7-4d62-92f8-c38817280eb9
+        customizationUUID: ae70c293-8db3-40cd-8cd0-30cde194bea5
+        version: '1.0'
+        name: vCPE
+        description: vCPE
+        type: VF
+        category: Generic
+        subcategory: Infrastructure
+        resourceVendor: huawei
+        resourceVendorRelease: '1.0'
+        resourceVendorModelNumber: ''
+      properties:
+        vf_module_id: vCPEAR1000V
+        private_subnet_lan_id: 265e1457-8eb7-4fe8-a580-fb547656aad1
+        vcpe_image_name: vCPE_images
+        skip_post_instantiation_configuration: true
+        nf_naming:
+          ecomp_generated_naming: true
+        multi_stage_design: 'false'
+        availability_zone_max_count: 1
+        private_net_id: 1ecdeb3d-5d6d-45c4-a3d2-6cc53372fa8d
+        vcpe_name: ar1000v
+        private_subnet_wan_id: 86048e4e-861e-47c9-ae55-a5531b747e36
+        vnf_id: vCPE_huaweicloud
+        vcpe_flavor_name: vCPE_flavor
+        vcpe_private_ip_lan: 192.168.10.250
+      requirements:
+      - abstract_vcpe.link_vcpe_vcpe_private_lan_port:
+          capability: virtual_linkable
+          node: Generic NeutronNet 0
+      - abstract_vcpe.link_vcpe_vcpe_private_wan_port:
+          capability: virtual_linkable
+          node: Generic NeutronNet 0
+      capabilities:
+        abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: B/s
+            description: Average rate of outgoing bytes
+            type: Gauge
+            category: network
+        abstract_vcpe.scalable_vcpe:
+          properties:
+            max_instances: 1
+            min_instances: 1
+        abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: B
+            description: Number of outgoing bytes
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.read.requests_vcpe:
+          properties:
+            unit: request
+            description: Number of read requests
+            type: Cumulative
+            category: compute
+        abstract_vcpe.disk.device.write.requests.rate_vcpe:
+          properties:
+            unit: request/s
+            description: Average rate of write requests
+            type: Gauge
+            category: disk
+        abstract_vcpe.disk.read.bytes.rate_vcpe:
+          properties:
+            unit: B/s
+            description: Average rate of reads
+            type: Gauge
+            category: compute
+        abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: B/s
+            description: Average rate of outgoing bytes
+            type: Gauge
+            category: network
+        abstract_vcpe.disk.device.read.requests_vcpe:
+          properties:
+            unit: request
+            description: Number of read requests
+            type: Cumulative
+            category: disk
+        abstract_vcpe.disk.device.capacity_vcpe:
+          properties:
+            unit: B
+            description: The amount of disk per device that the instance can see
+            type: Gauge
+            category: disk
+        abstract_vcpe.cpu.delta_vcpe:
+          properties:
+            unit: ns
+            description: CPU time used since previous datapoint
+            type: Delta
+            category: compute
+        abstract_vcpe.port_mirroring_vcpe_vcpe_private_lan_port:
+          properties:
+            connection_point:
+              network_role:
+                get_input: port_vcpe_private_lan_port_network_role
+              nfc_naming_code: vcpe
+        abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: B/s
+            description: Average rate of incoming bytes
+            type: Gauge
+            category: network
+        abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of incoming packets
+            type: Gauge
+            category: network
+        abstract_vcpe.port_mirroring_vcpe_vcpe_private_wan_port:
+          properties:
+            connection_point:
+              network_role:
+                get_input: port_vcpe_private_wan_port_network_role
+              nfc_naming_code: vcpe
+        abstract_vcpe.cpu_vcpe:
+          properties:
+            unit: ns
+            description: CPU time used
+            type: Cumulative
+            category: compute
+        abstract_vcpe.disk.latency_vcpe:
+          properties:
+            unit: ms
+            description: Average disk latency
+            type: Gauge
+            category: disk
+        abstract_vcpe.disk.device.read.bytes_vcpe:
+          properties:
+            unit: B
+            description: Volume of reads
+            type: Cumulative
+            category: disk
+        abstract_vcpe.disk.write.bytes_vcpe:
+          properties:
+            unit: B
+            description: Volume of writes
+            type: Cumulative
+            category: compute
+        abstract_vcpe.disk.device.read.requests.rate_vcpe:
+          properties:
+            unit: request/s
+            description: Average rate of read requests
+            type: Gauge
+            category: disk
+        abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: B
+            description: Number of outgoing bytes
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.root.size_vcpe:
+          properties:
+            unit: GB
+            description: Size of root disk
+            type: Gauge
+            category: compute
+        abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: B
+            description: Number of incoming bytes
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.iops_vcpe:
+          properties:
+            unit: count/s
+            description: Average disk iops
+            type: Gauge
+            category: disk
+        abstract_vcpe.endpoint_vcpe:
+          properties:
+            secure: true
+        abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: packet
+            description: Number of outgoing packets
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.device.write.requests_vcpe:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: disk
+        abstract_vcpe.disk.write.bytes.rate_vcpe:
+          properties:
+            unit: B/s
+            description: Average rate of writes
+            type: Gauge
+            category: compute
+        abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of outgoing packets
+            type: Gauge
+            category: network
+        abstract_vcpe.disk.capacity_vcpe:
+          properties:
+            unit: B
+            description: The amount of disk that the instance can see
+            type: Gauge
+            category: disk
+        abstract_vcpe.cpu_util_vcpe:
+          properties:
+            unit: '%'
+            description: Average CPU utilization
+            type: Gauge
+            category: compute
+        abstract_vcpe.disk.write.requests_vcpe:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        abstract_vcpe.disk.read.bytes_vcpe:
+          properties:
+            unit: B
+            description: Volume of reads
+            type: Cumulative
+            category: compute
+        abstract_vcpe.disk.device.write.bytes_vcpe:
+          properties:
+            unit: B
+            description: Volume of writes
+            type: Cumulative
+            category: disk
+        abstract_vcpe.disk.device.write.bytes.rate_vcpe:
+          properties:
+            unit: B/s
+            description: Average rate of writes
+            type: Gauge
+            category: disk
+        abstract_vcpe.vcpus_vcpe:
+          properties:
+            unit: vcpu
+            description: Number of virtual CPUs allocated to the instance
+            type: Gauge
+            category: compute
+        abstract_vcpe.disk.allocation_vcpe:
+          properties:
+            unit: B
+            description: The amount of disk occupied by the instance on the host machine
+            type: Gauge
+            category: disk
+        abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: B/s
+            description: Average rate of incoming bytes
+            type: Gauge
+            category: network
+        abstract_vcpe.memory_vcpe:
+          properties:
+            unit: MB
+            description: Volume of RAM allocated to the instance
+            type: Gauge
+            category: compute
+        abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of incoming packets
+            type: Gauge
+            category: network
+        abstract_vcpe.disk.device.read.bytes.rate_vcpe:
+          properties:
+            unit: B/s
+            description: Average rate of reads
+            type: Gauge
+            category: disk
+        abstract_vcpe.memory.usage_vcpe:
+          properties:
+            unit: MB
+            description: Volume of RAM used by the instance from the amount of its allocated memory
+            type: Gauge
+            category: compute
+        abstract_vcpe.disk.device.iops_vcpe:
+          properties:
+            unit: count/s
+            description: Average disk iops per device
+            type: Gauge
+            category: disk
+        abstract_vcpe.disk.device.allocation_vcpe:
+          properties:
+            unit: B
+            description: The amount of disk per device occupied by the instance on the host machine
+            type: Gauge
+            category: disk
+        abstract_vcpe.disk.usage_vcpe:
+          properties:
+            unit: B
+            description: The physical size in bytes of the image container on the host
+            type: Gauge
+            category: disk
+        abstract_vcpe.disk.device.latency_vcpe:
+          properties:
+            unit: ms
+            description: Average disk latency per device
+            type: Gauge
+            category: disk
+        abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: packet
+            description: Number of outgoing packets
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.write.requests.rate_vcpe:
+          properties:
+            unit: request/s
+            description: Average rate of write requests
+            type: Gauge
+            category: compute
+        abstract_vcpe.instance_vcpe:
+          properties:
+            unit: instance
+            description: Existence of instance
+            type: Gauge
+            category: compute
+        abstract_vcpe.disk.device.usage_vcpe:
+          properties:
+            unit: B
+            description: The physical size in bytes of the image container on the host per device
+            type: Gauge
+            category: disk
+        abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_wan_port:
+          properties:
+            unit: B
+            description: Number of incoming bytes
+            type: Cumulative
+            category: network
+        abstract_vcpe.disk.ephemeral.size_vcpe:
+          properties:
+            unit: GB
+            description: Size of ephemeral disk
+            type: Gauge
+            category: compute
+        abstract_vcpe.memory.resident_vcpe:
+          properties:
+            unit: MB
+            description: Volume of RAM used by the instance on the physical machine
+            type: Gauge
+            category: compute
+        abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_lan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of outgoing packets
+            type: Gauge
+            category: network
+    Generic NeutronNet 0:
+      type: org.openecomp.resource.vl.GenericNeutronNet
+      metadata:
+        invariantUUID: f3ed1133-c1bb-4735-82d4-8e041265fad6
+        UUID: 24ec2ed8-a072-4f86-9a58-3a4fe220862e
+        customizationUUID: c8a1a81d-d836-4f33-9d0e-91e9417f812a
+        version: '1.0'
+        name: Generic NeutronNet
+        description: Generic NeutronNet
+        type: VL
+        category: Generic
+        subcategory: Network Elements
+        resourceVendor: ONAP (Tosca)
+        resourceVendorRelease: 1.0.0.wd03
+        resourceVendorModelNumber: ''
+      properties:
+        network_assignments:
+          is_external_network: false
+          is_trunked: false
+          ipv4_subnet_default_assignment:
+            min_subnets_count: 1
+          ecomp_generated_network_assignment: false
+          ipv6_subnet_default_assignment:
+            min_subnets_count: 1
+        exVL_naming:
+          ecomp_generated_naming: true
+        network_flows:
+          is_network_policy: false
+          is_bound_to_vpn: false
+        network_ecomp_naming:
+          ecomp_generated_naming: true
+        network_type: NEUTRON
+        network_technology: NEUTRON
+        network_homing:
+          ecomp_selected_instance_node_target: false
+    vGW 0:
+      type: org.openecomp.resource.vf.Vgw
+      metadata:
+        invariantUUID: 52905e03-0632-43f9-93f2-2ab7d959f633
+        UUID: 4f442b9c-237d-4d2d-b549-ee1bdb9842b3
+        customizationUUID: fd8595de-1081-4e39-a401-24ffebaa9ed8
+        version: '1.0'
+        name: vGW
+        description: vGW
+        type: VF
+        category: Generic
+        subcategory: Infrastructure
+        resourceVendor: huawei
+        resourceVendorRelease: '1.0'
+        resourceVendorModelNumber: ''
+      properties:
+        vf_module_id: CCVPNvGW
+        gateway_image_name: gateway_image
+        private_subnet_lan_id: 265e1457-8eb7-4fe8-a580-fb547656aad1
+        skip_post_instantiation_configuration: true
+        nf_naming:
+          ecomp_generated_naming: true
+        multi_stage_design: 'false'
+        availability_zone_max_count: 1
+        vnf_id: vGW_huaweicloud
+        private_net_id: 1ecdeb3d-5d6d-45c4-a3d2-6cc53372fa8d
+        gateway_flavor_name: s3.large.4
+        gateway_private_ip_lan: 192.168.10.200
+        gateway_name: gateway-vm
+      requirements:
+      - abstract_gateway.link_gateway_gateway_private_lan_port:
+          capability: virtual_linkable
+          node: Generic NeutronNet 0
+      capabilities:
+        abstract_gateway.network.incoming.bytes.rate_gateway_gateway_private_lan_port:
+          properties:
+            unit: B/s
+            description: Average rate of incoming bytes
+            type: Gauge
+            category: network
+        abstract_gateway.disk.device.read.bytes.rate_gateway:
+          properties:
+            unit: B/s
+            description: Average rate of reads
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.capacity_gateway:
+          properties:
+            unit: B
+            description: The amount of disk that the instance can see
+            type: Gauge
+            category: disk
+        abstract_gateway.scalable_gateway:
+          properties:
+            max_instances: 1
+            min_instances: 1
+        abstract_gateway.disk.read.bytes_gateway:
+          properties:
+            unit: B
+            description: Volume of reads
+            type: Cumulative
+            category: compute
+        abstract_gateway.disk.allocation_gateway:
+          properties:
+            unit: B
+            description: The amount of disk occupied by the instance on the host machine
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.device.write.requests_gateway:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: disk
+        abstract_gateway.disk.device.read.bytes_gateway:
+          properties:
+            unit: B
+            description: Volume of reads
+            type: Cumulative
+            category: disk
+        abstract_gateway.cpu.delta_gateway:
+          properties:
+            unit: ns
+            description: CPU time used since previous datapoint
+            type: Delta
+            category: compute
+        abstract_gateway.network.outgoing.packets.rate_gateway_gateway_private_lan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of outgoing packets
+            type: Gauge
+            category: network
+        abstract_gateway.cpu_gateway:
+          properties:
+            unit: ns
+            description: CPU time used
+            type: Cumulative
+            category: compute
+        abstract_gateway.disk.device.allocation_gateway:
+          properties:
+            unit: B
+            description: The amount of disk per device occupied by the instance on the host machine
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.latency_gateway:
+          properties:
+            unit: ms
+            description: Average disk latency
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.device.read.requests_gateway:
+          properties:
+            unit: request
+            description: Number of read requests
+            type: Cumulative
+            category: disk
+        abstract_gateway.disk.device.read.requests.rate_gateway:
+          properties:
+            unit: request/s
+            description: Average rate of read requests
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.write.requests.rate_gateway:
+          properties:
+            unit: request/s
+            description: Average rate of write requests
+            type: Gauge
+            category: compute
+        abstract_gateway.disk.device.write.bytes.rate_gateway:
+          properties:
+            unit: B/s
+            description: Average rate of writes
+            type: Gauge
+            category: disk
+        abstract_gateway.cpu_util_gateway:
+          properties:
+            unit: '%'
+            description: Average CPU utilization
+            type: Gauge
+            category: compute
+        abstract_gateway.instance_gateway:
+          properties:
+            unit: instance
+            description: Existence of instance
+            type: Gauge
+            category: compute
+        abstract_gateway.network.outpoing.packets_gateway_gateway_private_lan_port:
+          properties:
+            unit: packet
+            description: Number of outgoing packets
+            type: Cumulative
+            category: network
+        abstract_gateway.disk.root.size_gateway:
+          properties:
+            unit: GB
+            description: Size of root disk
+            type: Gauge
+            category: compute
+        abstract_gateway.memory.usage_gateway:
+          properties:
+            unit: MB
+            description: Volume of RAM used by the instance from the amount of its allocated memory
+            type: Gauge
+            category: compute
+        abstract_gateway.network.outgoing.bytes_gateway_gateway_private_lan_port:
+          properties:
+            unit: B
+            description: Number of outgoing bytes
+            type: Cumulative
+            category: network
+        abstract_gateway.network.outgoing.bytes.rate_gateway_gateway_private_lan_port:
+          properties:
+            unit: B/s
+            description: Average rate of outgoing bytes
+            type: Gauge
+            category: network
+        abstract_gateway.disk.device.capacity_gateway:
+          properties:
+            unit: B
+            description: The amount of disk per device that the instance can see
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.iops_gateway:
+          properties:
+            unit: count/s
+            description: Average disk iops
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.write.requests_gateway:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        abstract_gateway.disk.device.write.bytes_gateway:
+          properties:
+            unit: B
+            description: Volume of writes
+            type: Cumulative
+            category: disk
+        abstract_gateway.disk.ephemeral.size_gateway:
+          properties:
+            unit: GB
+            description: Size of ephemeral disk
+            type: Gauge
+            category: compute
+        abstract_gateway.disk.device.write.requests.rate_gateway:
+          properties:
+            unit: request/s
+            description: Average rate of write requests
+            type: Gauge
+            category: disk
+        abstract_gateway.network.incoming.packets.rate_gateway_gateway_private_lan_port:
+          properties:
+            unit: packet/s
+            description: Average rate of incoming packets
+            type: Gauge
+            category: network
+        abstract_gateway.disk.device.iops_gateway:
+          properties:
+            unit: count/s
+            description: Average disk iops per device
+            type: Gauge
+            category: disk
+        abstract_gateway.endpoint_gateway:
+          properties:
+            secure: true
+        abstract_gateway.disk.device.latency_gateway:
+          properties:
+            unit: ms
+            description: Average disk latency per device
+            type: Gauge
+            category: disk
+        abstract_gateway.vcpus_gateway:
+          properties:
+            unit: vcpu
+            description: Number of virtual CPUs allocated to the instance
+            type: Gauge
+            category: compute
+        abstract_gateway.memory_gateway:
+          properties:
+            unit: MB
+            description: Volume of RAM allocated to the instance
+            type: Gauge
+            category: compute
+        abstract_gateway.network.incoming.bytes_gateway_gateway_private_lan_port:
+          properties:
+            unit: B
+            description: Number of incoming bytes
+            type: Cumulative
+            category: network
+        abstract_gateway.disk.read.bytes.rate_gateway:
+          properties:
+            unit: B/s
+            description: Average rate of reads
+            type: Gauge
+            category: compute
+        abstract_gateway.disk.read.requests_gateway:
+          properties:
+            unit: request
+            description: Number of read requests
+            type: Cumulative
+            category: compute
+        abstract_gateway.port_mirroring_gateway_gateway_private_lan_port:
+          properties:
+            connection_point:
+              network_role:
+                get_input: port_gateway_private_lan_port_network_role
+              nfc_naming_code: gateway
+        abstract_gateway.disk.device.usage_gateway:
+          properties:
+            unit: B
+            description: The physical size in bytes of the image container on the host per device
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.write.bytes.rate_gateway:
+          properties:
+            unit: B/s
+            description: Average rate of writes
+            type: Gauge
+            category: compute
+        abstract_gateway.network.incoming.packets_gateway_gateway_private_lan_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        abstract_gateway.memory.resident_gateway:
+          properties:
+            unit: MB
+            description: Volume of RAM used by the instance on the physical machine
+            type: Gauge
+            category: compute
+        abstract_gateway.disk.usage_gateway:
+          properties:
+            unit: B
+            description: The physical size in bytes of the image container on the host
+            type: Gauge
+            category: disk
+        abstract_gateway.disk.write.bytes_gateway:
+          properties:
+            unit: B
+            description: Volume of writes
+            type: Cumulative
+            category: compute
+  groups:
+    vcpe0..Vcpe..ar1000v..module-0:
+      type: org.openecomp.groups.VfModule
+      metadata:
+        vfModuleModelName: Vcpe..ar1000v..module-0
+        vfModuleModelInvariantUUID: d7719964-c045-4ed3-84d6-20a01db7612f
+        vfModuleModelUUID: c84ade8a-6e4b-49c7-86e8-0e4fc009f4cd
+        vfModuleModelVersion: '1'
+        vfModuleModelCustomizationUUID: 8caeefbd-ab71-40c9-9387-8729d7d9c2de
+      properties:
+        min_vf_module_instances: 1
+        vf_module_label: ar1000v
+        max_vf_module_instances: 1
+        vf_module_type: Base
+        isBase: true
+        initial_count: 1
+        volume_group: false
+    vgw0..Vgw..gateway..module-0:
+      type: org.openecomp.groups.VfModule
+      metadata:
+        vfModuleModelName: Vgw..gateway..module-0
+        vfModuleModelInvariantUUID: 8c8c936c-e71c-4bc4-94f7-c5680c9dbc00
+        vfModuleModelUUID: ddda7e87-8113-463f-aa27-a60112a4e438
+        vfModuleModelVersion: '1'
+        vfModuleModelCustomizationUUID: ea551d60-f9c9-48f2-9757-b01eb2d26d13
+      properties:
+        min_vf_module_instances: 1
+        vf_module_label: gateway
+        max_vf_module_instances: 1
+        vf_module_type: Base
+        isBase: true
+        initial_count: 1
+        volume_group: false
+  substitution_mappings:
+    node_type: org.openecomp.service.Publicns
+    capabilities:
+      vgw0.abstract_gateway.disk.allocation_gateway:
+      - vGW 0
+      - abstract_gateway.disk.allocation_gateway
+      vgw0.abstract_gateway.memory.usage_gateway:
+      - vGW 0
+      - abstract_gateway.memory.usage_gateway
+      vcpe0.abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_wan_port
+      vgw0.abstract_gateway.disk.device.write.bytes.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.write.bytes.rate_gateway
+      vgw0.abstract_gateway.disk.device.latency_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.latency_gateway
+      vgw0.abstract_gateway.network.incoming.bytes.rate_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.incoming.bytes.rate_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.scalable_gateway:
+      - vGW 0
+      - abstract_gateway.scalable_gateway
+      vcpe0.abstract_vcpe.host_vcpe:
+      - vCPE 0
+      - abstract_vcpe.host_vcpe
+      vcpe0.abstract_vcpe.disk.latency_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.latency_vcpe
+      vcpe0.abstract_vcpe.scalable_vcpe:
+      - vCPE 0
+      - abstract_vcpe.scalable_vcpe
+      vcpe0.abstract_vcpe.disk.device.write.bytes.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.write.bytes.rate_vcpe
+      vgw0.abstract_gateway.disk.write.requests.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.write.requests.rate_gateway
+      vcpe0.abstract_vcpe.feature_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.feature_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.disk.iops_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.iops_vcpe
+      vcpe0.abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.feature_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.feature_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.host_gateway:
+      - vGW 0
+      - abstract_gateway.host_gateway
+      vgw0.abstract_gateway.disk.device.write.requests.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.write.requests.rate_gateway
+      vcpe0.abstract_vcpe.port_mirroring_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.port_mirroring_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.disk.device.capacity_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.capacity_vcpe
+      vcpe0.abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.os_vcpe:
+      - vCPE 0
+      - abstract_vcpe.os_vcpe
+      vgw0.abstract_gateway.disk.usage_gateway:
+      - vGW 0
+      - abstract_gateway.disk.usage_gateway
+      vcpe0.abstract_vcpe.binding_vcpe:
+      - vCPE 0
+      - abstract_vcpe.binding_vcpe
+      vgw0.abstract_gateway.network.outgoing.bytes_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.outgoing.bytes_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.binding_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.binding_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.memory.resident_vcpe:
+      - vCPE 0
+      - abstract_vcpe.memory.resident_vcpe
+      vgw0.abstract_gateway.disk.write.bytes_gateway:
+      - vGW 0
+      - abstract_gateway.disk.write.bytes_gateway
+      vgw0.abstract_gateway.disk.read.bytes.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.read.bytes.rate_gateway
+      vcpe0.abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.disk.root.size_gateway:
+      - vGW 0
+      - abstract_gateway.disk.root.size_gateway
+      vcpe0.abstract_vcpe.disk.write.requests_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.write.requests_vcpe
+      vcpe0.abstract_vcpe.disk.device.write.bytes_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.write.bytes_vcpe
+      vcpe0.abstract_vcpe.feature_vcpe:
+      - vCPE 0
+      - abstract_vcpe.feature_vcpe
+      vcpe0.abstract_vcpe.disk.device.latency_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.latency_vcpe
+      vgw0.abstract_gateway.cpu_util_gateway:
+      - vGW 0
+      - abstract_gateway.cpu_util_gateway
+      vgw0.abstract_gateway.network.incoming.packets_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.incoming.packets_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.disk.device.read.requests.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.read.requests.rate_gateway
+      vgw0.abstract_gateway.network.incoming.packets.rate_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.incoming.packets.rate_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.port_mirroring_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.port_mirroring_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.disk.write.bytes_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.write.bytes_vcpe
+      vgw0.abstract_gateway.disk.capacity_gateway:
+      - vGW 0
+      - abstract_gateway.disk.capacity_gateway
+      vgw0.abstract_gateway.memory_gateway:
+      - vGW 0
+      - abstract_gateway.memory_gateway
+      vcpe0.abstract_vcpe.cpu_util_vcpe:
+      - vCPE 0
+      - abstract_vcpe.cpu_util_vcpe
+      vgw0.abstract_gateway.disk.device.write.requests_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.write.requests_gateway
+      vgw0.abstract_gateway.vcpus_gateway:
+      - vGW 0
+      - abstract_gateway.vcpus_gateway
+      vcpe0.abstract_vcpe.disk.ephemeral.size_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.ephemeral.size_vcpe
+      vgw0.abstract_gateway.disk.device.read.bytes_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.read.bytes_gateway
+      vgw0.abstract_gateway.disk.device.allocation_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.allocation_gateway
+      vgw0.abstract_gateway.disk.device.capacity_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.capacity_gateway
+      vcpe0.abstract_vcpe.disk.write.requests.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.write.requests.rate_vcpe
+      vcpe0.abstract_vcpe.disk.usage_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.usage_vcpe
+      vgw0.abstract_gateway.disk.device.iops_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.iops_gateway
+      vcpe0.abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.packets.rate_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.endpoint_gateway:
+      - vGW 0
+      - abstract_gateway.endpoint_gateway
+      vcpe0.abstract_vcpe.disk.device.read.bytes.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.read.bytes.rate_vcpe
+      vcpe0.abstract_vcpe.disk.read.requests_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.read.requests_vcpe
+      vcpe0.abstract_vcpe.disk.read.bytes.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.read.bytes.rate_vcpe
+      vcpe0.abstract_vcpe.disk.device.read.bytes_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.read.bytes_vcpe
+      vgw0.abstract_gateway.binding_gateway:
+      - vGW 0
+      - abstract_gateway.binding_gateway
+      vcpe0.abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.packets.rate_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.bytes_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.cpu.delta_vcpe:
+      - vCPE 0
+      - abstract_vcpe.cpu.delta_vcpe
+      vcpe0.abstract_vcpe.disk.device.write.requests.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.write.requests.rate_vcpe
+      vgw0.abstract_gateway.instance_gateway:
+      - vGW 0
+      - abstract_gateway.instance_gateway
+      vgw0.abstract_gateway.memory.resident_gateway:
+      - vGW 0
+      - abstract_gateway.memory.resident_gateway
+      vcpe0.abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_wan_port
+      vgw0.abstract_gateway.disk.read.bytes_gateway:
+      - vGW 0
+      - abstract_gateway.disk.read.bytes_gateway
+      vcpe0.abstract_vcpe.disk.device.iops_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.iops_vcpe
+      vgw0.abstract_gateway.binding_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.binding_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.disk.ephemeral.size_gateway:
+      - vGW 0
+      - abstract_gateway.disk.ephemeral.size_gateway
+      vgw0.abstract_gateway.feature_gateway:
+      - vGW 0
+      - abstract_gateway.feature_gateway
+      vcpe0.abstract_vcpe.forwarder_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.forwarder_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.disk.device.allocation_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.allocation_vcpe
+      vgw0.abstract_gateway.disk.read.requests_gateway:
+      - vGW 0
+      - abstract_gateway.disk.read.requests_gateway
+      vcpe0.abstract_vcpe.disk.device.write.requests_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.write.requests_vcpe
+      vgw0.abstract_gateway.disk.device.usage_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.usage_gateway
+      vgw0.abstract_gateway.cpu.delta_gateway:
+      - vGW 0
+      - abstract_gateway.cpu.delta_gateway
+      vgw0.abstract_gateway.network.outgoing.packets.rate_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.outgoing.packets.rate_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.port_mirroring_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.port_mirroring_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.forwarder_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.forwarder_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.packets_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.disk.latency_gateway:
+      - vGW 0
+      - abstract_gateway.disk.latency_gateway
+      vcpe0.abstract_vcpe.disk.read.bytes_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.read.bytes_vcpe
+      vcpe0.abstract_vcpe.attachment_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.attachment_vcpe_vcpe_private_wan_port
+      vgw0.abstract_gateway.cpu_gateway:
+      - vGW 0
+      - abstract_gateway.cpu_gateway
+      vcpe0.abstract_vcpe.instance_vcpe:
+      - vCPE 0
+      - abstract_vcpe.instance_vcpe
+      vcpe0.abstract_vcpe.memory_vcpe:
+      - vCPE 0
+      - abstract_vcpe.memory_vcpe
+      vgw0.abstract_gateway.feature_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.feature_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.disk.device.write.bytes_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.write.bytes_gateway
+      vcpe0.abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outpoing.packets_vcpe_vcpe_private_wan_port
+      vgw0.abstract_gateway.disk.device.read.requests_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.read.requests_gateway
+      vgw0.abstract_gateway.disk.write.requests_gateway:
+      - vGW 0
+      - abstract_gateway.disk.write.requests_gateway
+      vgw0.abstract_gateway.os_gateway:
+      - vGW 0
+      - abstract_gateway.os_gateway
+      vgw0.abstract_gateway.network.outgoing.bytes.rate_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.outgoing.bytes.rate_gateway_gateway_private_lan_port
+      vgw0.abstract_gateway.network.outpoing.packets_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.outpoing.packets_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.disk.write.bytes.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.write.bytes.rate_vcpe
+      vgw0.abstract_gateway.disk.write.bytes.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.write.bytes.rate_gateway
+      vcpe0.abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.bytes.rate_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.cpu_vcpe:
+      - vCPE 0
+      - abstract_vcpe.cpu_vcpe
+      vcpe0.abstract_vcpe.disk.allocation_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.allocation_vcpe
+      vcpe0.abstract_vcpe.disk.device.read.requests.rate_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.read.requests.rate_vcpe
+      vgw0.abstract_gateway.network.incoming.bytes_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.network.incoming.bytes_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.disk.device.read.requests_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.read.requests_vcpe
+      vgw0.abstract_gateway.disk.device.read.bytes.rate_gateway:
+      - vGW 0
+      - abstract_gateway.disk.device.read.bytes.rate_gateway
+      vcpe0.abstract_vcpe.binding_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.binding_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.forwarder_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.forwarder_gateway_gateway_private_lan_port
+      genericneutronnet0.virtual_linkable:
+      - Generic NeutronNet 0
+      - virtual_linkable
+      vcpe0.abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.network.incoming.bytes_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.disk.device.usage_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.device.usage_vcpe
+      genericneutronnet0.feature:
+      - Generic NeutronNet 0
+      - feature
+      vcpe0.abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.network.outgoing.bytes.rate_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.disk.root.size_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.root.size_vcpe
+      vcpe0.abstract_vcpe.vcpus_vcpe:
+      - vCPE 0
+      - abstract_vcpe.vcpus_vcpe
+      vcpe0.abstract_vcpe.endpoint_vcpe:
+      - vCPE 0
+      - abstract_vcpe.endpoint_vcpe
+      vgw0.abstract_gateway.attachment_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.attachment_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.attachment_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.attachment_vcpe_vcpe_private_lan_port
+      vcpe0.abstract_vcpe.memory.usage_vcpe:
+      - vCPE 0
+      - abstract_vcpe.memory.usage_vcpe
+      vcpe0.abstract_vcpe.disk.capacity_vcpe:
+      - vCPE 0
+      - abstract_vcpe.disk.capacity_vcpe
+      vgw0.abstract_gateway.disk.iops_gateway:
+      - vGW 0
+      - abstract_gateway.disk.iops_gateway
+    requirements:
+      vcpe0.abstract_vcpe.dependency_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.dependency_vcpe_vcpe_private_wan_port
+      vcpe0.abstract_vcpe.link_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.link_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.local_storage_gateway:
+      - vGW 0
+      - abstract_gateway.local_storage_gateway
+      genericneutronnet0.dependency:
+      - Generic NeutronNet 0
+      - dependency
+      vcpe0.abstract_vcpe.local_storage_vcpe:
+      - vCPE 0
+      - abstract_vcpe.local_storage_vcpe
+      vcpe0.abstract_vcpe.dependency_vcpe_vcpe_private_lan_port:
+      - vCPE 0
+      - abstract_vcpe.dependency_vcpe_vcpe_private_lan_port
+      vgw0.abstract_gateway.dependency_gateway:
+      - vGW 0
+      - abstract_gateway.dependency_gateway
+      vcpe0.abstract_vcpe.dependency_vcpe:
+      - vCPE 0
+      - abstract_vcpe.dependency_vcpe
+      vgw0.abstract_gateway.dependency_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.dependency_gateway_gateway_private_lan_port
+      vcpe0.abstract_vcpe.link_vcpe_vcpe_private_wan_port:
+      - vCPE 0
+      - abstract_vcpe.link_vcpe_vcpe_private_wan_port
+      vgw0.abstract_gateway.link_gateway_gateway_private_lan_port:
+      - vGW 0
+      - abstract_gateway.link_gateway_gateway_private_lan_port
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.env b/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.env
new file mode 100644 (file)
index 0000000..f0cc985
--- /dev/null
@@ -0,0 +1,10 @@
+parameters:
+  private_net_id: "1ecdeb3d-5d6d-45c4-a3d2-6cc53372fa8d"
+  private_subnet_lan_id: "265e1457-8eb7-4fe8-a580-fb547656aad1"
+  private_subnet_wan_id: "86048e4e-861e-47c9-ae55-a5531b747e36"
+  vcpe_flavor_name: "vCPE_flavor"
+  vcpe_image_name: "vCPE_images"
+  vcpe_name: "ar1000v"
+  vcpe_private_ip_lan: "192.168.10.250"
+  vf_module_id: "vCPEAR1000V"
+  vnf_id: "vCPE_huaweicloud"
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.yaml b/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/ar1000v.yaml
new file mode 100644 (file)
index 0000000..b4d0fa7
--- /dev/null
@@ -0,0 +1,103 @@
+##########################################################################
+#
+#==================LICENSE_START==========================================
+#
+#
+# Copyright 2017 Huawei Technologies Co., Ltd. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#==================LICENSE_END============================================
+
+heat_template_version: 2013-05-23
+
+description: Heat template to deploy Huawei AR1000V vCPE
+
+##############
+#            #
+# PARAMETERS #
+#            #
+##############
+
+parameters:
+  vcpe_name:
+    type: string
+    label: name
+    description: name to be used for compute instance
+  vcpe_image_name:
+    type: string
+    label: Image name or ID
+    description: Image to be used for compute instance
+  vcpe_flavor_name:
+    type: string
+    label: Flavor
+    description: Type of instance (flavor) to be used
+  private_net_id:
+    type: string
+    label: Private oam network name or ID
+    description: Private network that enables remote connection to VNF
+  private_subnet_wan_id:
+    type: string
+    label: Private wan sub-network name or ID
+    description: Private wan sub-network that enables remote connection to VNF
+  private_subnet_lan_id:
+    type: string
+    label: Private lan sub-network name or ID
+    description: Private lan sub-network that enables remote connection to VNF   
+  vcpe_private_ip_lan:
+    type: string
+    label: vCPE lan private IP address
+    description: Private IP address that is assigned to the vCPE lan port
+  vnf_id:
+    type: string
+    label: VNF ID
+    description: The VNF ID is provided by ECOMP
+  vf_module_id:
+    type: string
+    label: VF module id
+    description: the vf module id is provided by ECOMP
+#############
+#           #
+# RESOURCES #
+#           #
+#############
+
+resources:
+# For the floating IP in Public cloud , floating_network_id is not needed
+  vCPE_oam_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: private_net_id}
+      port_id: { get_resource: vcpe_private_wan_port}
+
+  vcpe_private_wan_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: private_net_id }
+      fixed_ips: [{"subnet": { get_param: private_subnet_wan_id }}]
+      
+  vcpe_private_lan_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: private_net_id }
+      fixed_ips: [{"subnet": { get_param: private_subnet_lan_id }, "ip_address": { get_param: vcpe_private_ip_lan }}]
+
+  ar_1000v:
+    type: OS::Nova::Server
+    properties:
+      image: { get_param: vcpe_image_name }
+      flavor: { get_param: vcpe_flavor_name }
+      name: { get_param: vcpe_name }
+      networks:
+        - port: { get_resource: vcpe_private_wan_port }
+        - port: { get_resource: vcpe_private_lan_port }
+      metadata: { vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vcpe0_modules.json b/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vcpe0_modules.json
new file mode 100644 (file)
index 0000000..3376b1b
--- /dev/null
@@ -0,0 +1,25 @@
+[
+  {
+    "vfModuleModelName": "Vcpe..ar1000v..module-0",
+    "vfModuleModelInvariantUUID": "d7719964-c045-4ed3-84d6-20a01db7612f",
+    "vfModuleModelVersion": "1",
+    "vfModuleModelUUID": "c84ade8a-6e4b-49c7-86e8-0e4fc009f4cd",
+    "vfModuleModelCustomizationUUID": "8caeefbd-ab71-40c9-9387-8729d7d9c2de",
+    "isBase": true,
+    "artifacts": [
+      "12dcc618-20f2-4f15-ab00-c549b96b3910",
+      "5821b043-ba50-49ef-b739-61b0896050f2"
+    ],
+    "properties": {
+      "min_vf_module_instances": "1",
+      "vf_module_label": "ar1000v",
+      "max_vf_module_instances": "1",
+      "vfc_list": "",
+      "vf_module_description": "",
+      "vf_module_type": "Base",
+      "availability_zone_count": "",
+      "volume_group": "false",
+      "initial_count": "1"
+    }
+  }
+]
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vendor-license-model.xml b/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vendor-license-model.xml
new file mode 100644 (file)
index 0000000..a10a5b2
--- /dev/null
@@ -0,0 +1 @@
+<vendor-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>huawei</vendor-name><entitlement-pool-list><entitlement-pool><entitlement-pool-invariant-uuid>d948f2a8354d41ef9f8e5819adccfd0d</entitlement-pool-invariant-uuid><entitlement-pool-uuid>86BA71BDC4EC44DB8099115BC7202F3A</entitlement-pool-uuid><version>1.0</version><name>test</name><description/><increments/><manufacturer-reference-number>1234</manufacturer-reference-number><threshold-value><unit>Absolute</unit><value>80</value></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2020-01-04T23:59:59Z</expiry-date></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><version>1.0</version><name>test</name><description/><type>One_Time</type><increments/><manufacturerReferenceNumber>123</manufacturerReferenceNumber><license-key-group-invariant-uuid>8b3c7d985b1541518fe0dfc8e40d5116</license-key-group-invariant-uuid><license-key-group-uuid>85FF42563DAA4111BAB854264F1D2898</license-key-group-uuid><threshold-value><unit>Percentage</unit><value>88</value></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2019-09-21T23:59:59Z</expiry-date></license-key-group></license-key-group-list></vendor-license-model>
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vf-license-model.xml b/asdc-controller/src/test/resources/resource-examples/public-ns/vcpe0/vf-license-model.xml
new file mode 100644 (file)
index 0000000..ed1575b
--- /dev/null
@@ -0,0 +1 @@
+<vf-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>huawei</vendor-name><vf-id>c1aad4e55922438f956ff97b91c5446d</vf-id><feature-group-list><feature-group><entitlement-pool-list><entitlement-pool><name>test</name><description/><increments/><entitlement-pool-invariant-uuid>d948f2a8354d41ef9f8e5819adccfd0d</entitlement-pool-invariant-uuid><entitlement-pool-uuid>86BA71BDC4EC44DB8099115BC7202F3A</entitlement-pool-uuid><manufacturer-reference-number>1234</manufacturer-reference-number><threshold-value><unit>Absolute</unit><value>80</value></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2020-01-04T23:59:59Z</expiry-date></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><name>test</name><description/><type>One_Time</type><increments/><license-key-group-invariant-uuid>8b3c7d985b1541518fe0dfc8e40d5116</license-key-group-invariant-uuid><license-key-group-uuid>85FF42563DAA4111BAB854264F1D2898</license-key-group-uuid><manufacturer-reference-number>123</manufacturer-reference-number><threshold-value><unit>Percentage</unit><value>88</value></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2019-09-21T23:59:59Z</expiry-date></license-key-group></license-key-group-list><name>testgroup</name><feature-group-uuid>ae361d4e44ca48e68f734abb531e19af</feature-group-uuid><description/><part-number>123</part-number></feature-group></feature-group-list></vf-license-model>
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.env b/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.env
new file mode 100644 (file)
index 0000000..a995d16
--- /dev/null
@@ -0,0 +1,9 @@
+parameters:
+  gateway_flavor_name: "s3.large.4"
+  gateway_image_name: "gateway_image"
+  gateway_name: "gateway-vm"
+  gateway_private_ip_lan: "192.168.10.200"
+  private_net_id: "1ecdeb3d-5d6d-45c4-a3d2-6cc53372fa8d"
+  private_subnet_lan_id: "265e1457-8eb7-4fe8-a580-fb547656aad1"
+  vf_module_id: "CCVPNvGW"
+  vnf_id: "vGW_huaweicloud"
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.yaml b/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/gateway.yaml
new file mode 100644 (file)
index 0000000..2d72a1c
--- /dev/null
@@ -0,0 +1,109 @@
+##########################################################################
+#
+#==================LICENSE_START==========================================
+#
+#
+# Copyright 2017 Huawei Technologies Co., Ltd. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#==================LICENSE_END============================================
+
+heat_template_version: 2013-05-23
+
+description: Heat template to deploy CCVPN gateway instance
+
+##############
+#            #
+# PARAMETERS #
+#            #
+##############
+
+parameters:
+  gateway_name:
+    type: string
+    label: name
+    description: name to be used for compute instance
+  gateway_image_name:
+    type: string
+    label: Image name or ID
+    description: Image to be used for compute instance
+  gateway_flavor_name:
+    type: string
+    label: Flavor
+    description: Type of instance (flavor) to be used
+  private_net_id:
+    type: string
+    label: Private oam network name or ID
+    description: Private network that enables remote connection to VNF
+#  private_subnet_wan_id:
+#    type: string
+#    label: Private wan sub-network name or ID
+#    description: Private wan sub-network that enables remote connection to VNF
+  private_subnet_lan_id:
+    type: string
+    label: Private lan sub-network name or ID
+    description: Private lan sub-network that enables remote connection to VNF
+  gateway_private_ip_lan:
+    type: string
+    label: gateway lan private IP address
+    description: Private IP address that is assigned to the gateway lan port
+  vnf_id:
+    type: string
+    label: VNF ID
+    description: The VNF ID is provided by ECOMP
+  vf_module_id:
+    type: string
+    label: VF module id
+    description: the vf module id is provided by ECOMP
+#############
+#           #
+# RESOURCES #
+#           #
+#############
+
+resources:
+# For the floating IP in Public cloud , floating_network_id is not needed
+  gateway_oam_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network_id: { get_param: private_net_id}
+      port_id: { get_resource: gateway_private_lan_port}
+
+  #gateway_private_wan_port:
+  #  type: OS::Neutron::Port
+  #  properties:
+  #    network: { get_param: private_net_id }
+  #    fixed_ips: [{"subnet": { get_param: private_subnet_wan_id }}]
+
+  gateway_private_lan_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: private_net_id }
+      fixed_ips: [{"subnet": { get_param: private_subnet_lan_id }, "ip_address": { get_param: gateway_private_ip_lan }}]
+
+  gateway_instacne:
+    type: OS::Nova::Server
+    properties:
+      image: { get_param: gateway_image_name }
+      flavor: { get_param: gateway_flavor_name }
+      name: { get_param: gateway_name }
+      networks:
+        #- port: { get_resource: gateway_private_wan_port }
+        - port: { get_resource: gateway_private_lan_port }
+      metadata: { vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}
+      user_data: |
+            #!/bin/bash
+            docker start msb_consul
+            docker start msb_discovery
+            docker start msb_internal_apigateway
+      #user_data_format:  HEAT_CFNTOOLS/RAW
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vendor-license-model.xml b/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vendor-license-model.xml
new file mode 100644 (file)
index 0000000..a10a5b2
--- /dev/null
@@ -0,0 +1 @@
+<vendor-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>huawei</vendor-name><entitlement-pool-list><entitlement-pool><entitlement-pool-invariant-uuid>d948f2a8354d41ef9f8e5819adccfd0d</entitlement-pool-invariant-uuid><entitlement-pool-uuid>86BA71BDC4EC44DB8099115BC7202F3A</entitlement-pool-uuid><version>1.0</version><name>test</name><description/><increments/><manufacturer-reference-number>1234</manufacturer-reference-number><threshold-value><unit>Absolute</unit><value>80</value></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2020-01-04T23:59:59Z</expiry-date></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><version>1.0</version><name>test</name><description/><type>One_Time</type><increments/><manufacturerReferenceNumber>123</manufacturerReferenceNumber><license-key-group-invariant-uuid>8b3c7d985b1541518fe0dfc8e40d5116</license-key-group-invariant-uuid><license-key-group-uuid>85FF42563DAA4111BAB854264F1D2898</license-key-group-uuid><threshold-value><unit>Percentage</unit><value>88</value></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2019-09-21T23:59:59Z</expiry-date></license-key-group></license-key-group-list></vendor-license-model>
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vf-license-model.xml b/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vf-license-model.xml
new file mode 100644 (file)
index 0000000..a4a84cc
--- /dev/null
@@ -0,0 +1 @@
+<vf-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>huawei</vendor-name><vf-id>8c1c2b40525942aca038a4528ce3bb4e</vf-id><feature-group-list><feature-group><entitlement-pool-list><entitlement-pool><name>test</name><description/><increments/><entitlement-pool-invariant-uuid>d948f2a8354d41ef9f8e5819adccfd0d</entitlement-pool-invariant-uuid><entitlement-pool-uuid>86BA71BDC4EC44DB8099115BC7202F3A</entitlement-pool-uuid><manufacturer-reference-number>1234</manufacturer-reference-number><threshold-value><unit>Absolute</unit><value>80</value></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2020-01-04T23:59:59Z</expiry-date></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><name>test</name><description/><type>One_Time</type><increments/><license-key-group-invariant-uuid>8b3c7d985b1541518fe0dfc8e40d5116</license-key-group-invariant-uuid><license-key-group-uuid>85FF42563DAA4111BAB854264F1D2898</license-key-group-uuid><manufacturer-reference-number>123</manufacturer-reference-number><threshold-value><unit>Percentage</unit><value>88</value></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date>2019-08-23T00:00:00Z</start-date><expiry-date>2019-09-21T23:59:59Z</expiry-date></license-key-group></license-key-group-list><name>testgroup</name><feature-group-uuid>ae361d4e44ca48e68f734abb531e19af</feature-group-uuid><description/><part-number>123</part-number></feature-group></feature-group-list></vf-license-model>
\ No newline at end of file
diff --git a/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vgw0_modules.json b/asdc-controller/src/test/resources/resource-examples/public-ns/vgw0/vgw0_modules.json
new file mode 100644 (file)
index 0000000..1a1bade
--- /dev/null
@@ -0,0 +1,25 @@
+[
+  {
+    "vfModuleModelName": "Vgw..gateway..module-0",
+    "vfModuleModelInvariantUUID": "8c8c936c-e71c-4bc4-94f7-c5680c9dbc00",
+    "vfModuleModelVersion": "1",
+    "vfModuleModelUUID": "ddda7e87-8113-463f-aa27-a60112a4e438",
+    "vfModuleModelCustomizationUUID": "ea551d60-f9c9-48f2-9757-b01eb2d26d13",
+    "isBase": true,
+    "artifacts": [
+      "60d55796-212c-4c66-8af5-63964d636ae4",
+      "9df0452f-826c-4287-9a2d-ca0095339866"
+    ],
+    "properties": {
+      "min_vf_module_instances": "1",
+      "vf_module_label": "gateway",
+      "max_vf_module_instances": "1",
+      "vfc_list": "",
+      "vf_module_description": "",
+      "vf_module_type": "Base",
+      "availability_zone_count": "",
+      "volume_group": "false",
+      "initial_count": "1"
+    }
+  }
+]
\ No newline at end of file