Merge "correct rst files Issue-ID: EXTAPI-74"
authorMatthieu Geerebaert <matthieu.geerebaert@orange.com>
Thu, 26 Apr 2018 14:43:59 +0000 (14:43 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 26 Apr 2018 14:43:59 +0000 (14:43 +0000)
20 files changed:
Dockerfile
pom.xml
src/main/java/org/onap/nbi/OnapComponentsUrlPaths.java
src/main/java/org/onap/nbi/apis/servicecatalog/SdcClient.java
src/main/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessor.java
src/main/java/org/onap/nbi/apis/serviceinventory/AaiClient.java
src/main/java/org/onap/nbi/apis/serviceinventory/ServiceInventoryService.java
src/main/java/org/onap/nbi/apis/serviceorder/SoClient.java
src/main/java/org/onap/nbi/apis/serviceorder/model/consumer/ModelInfo.java
src/main/java/org/onap/nbi/apis/serviceorder/model/consumer/RequestParameters.java
src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskProcessor.java
src/main/resources/certificate/AAF_RootCA.cer [new file with mode: 0644]
src/main/resources/certificate/aai.api.simpledemo.openecomp.org [new file with mode: 0644]
src/main/resources/jolt/getServiceCatalog.json
src/test/java/org/onap/nbi/apis/assertions/ServiceCatalogAssertions.java
src/test/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessorTest.java [new file with mode: 0644]
src/test/resources/mappings/aai_get_6490_service-subscriptions.json
src/test/resources/mappings/sdc_find.json
src/test/resources/toscafile/service-TestNetwork-template.yml [new file with mode: 0755]
src/test/resources/toscafile/service-VfwService2vfBased-template.yml [new file with mode: 0644]

index 09b2019..af70549 100644 (file)
@@ -4,6 +4,18 @@ ARG SERVER_PORT
 ARG PKG_FILENAME=nbi-rest-services-1.0.0-SNAPSHOT.jar
 ADD target/$PKG_FILENAME app.jar
 
+COPY src/main/resources/certificate /certs
+ARG CERT_PASS=changeit
+RUN for cert in $(ls -d /certs/*); do \
+        echo "adding $cert to java keystore..."; \
+        keytool -import \
+                -file "$cert" \
+                -storepass "${CERT_PASS}" \
+                -keystore $JAVA_HOME/lib/security/cacerts \
+                -alias "$(basename $cert)" \
+                --noprompt; \
+    done
+
 ENV SERVER_PORT=${SERVER_PORT:-8080}
 ENV JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -jar"
 
diff --git a/pom.xml b/pom.xml
index 3cdb75b..4c62fbe 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
        <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
-               <version>1.5.10.RELEASE</version>
+               <version>1.5.12.RELEASE</version>
                <relativePath /> <!-- lookup parent from repository -->
        </parent>
 
                <dependency>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
                        <artifactId>jackson-dataformat-yaml</artifactId>
-                       <version>2.8.0</version>
+                       <version>2.8.11</version>
                </dependency>
 
                <!-- jolt -->
index a6e943b..67c72e3 100644 (file)
@@ -24,7 +24,7 @@ public final class OnapComponentsUrlPaths {
     private OnapComponentsUrlPaths() {}
 
     // SDC
-    public static final String SDC_ROOT_URL = "/sdc/v1/catalog/services/";
+    public static final String SDC_ROOT_URL = "/sdc/v1/catalog/services";
     public static final String SDC_GET_PATH = "/metadata";
     public static final String SDC_TOSCA_PATH = "/toscaModel";
 
index 029527c..fed9bb5 100644 (file)
@@ -16,6 +16,7 @@ package org.onap.nbi.apis.servicecatalog;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.URI;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -63,37 +64,42 @@ public class SdcClient {
 
 
     public LinkedHashMap callGet(String id) {
-        StringBuilder callURL = new StringBuilder().append(sdcHost).append(OnapComponentsUrlPaths.SDC_ROOT_URL)
-                .append(id).append(OnapComponentsUrlPaths.SDC_GET_PATH);
+        StringBuilder urlBuilder = new StringBuilder().append(sdcHost).append(OnapComponentsUrlPaths.SDC_ROOT_URL)
+                .append("/").append(id).append(OnapComponentsUrlPaths.SDC_GET_PATH);
 
-        ResponseEntity<Object> response = callSdc(callURL.toString());
+        UriComponentsBuilder callURI = UriComponentsBuilder.fromHttpUrl(urlBuilder.toString());
+
+        ResponseEntity<Object> response = callSdc(callURI.build().encode().toUri());
         return (LinkedHashMap) response.getBody();
 
     }
 
     public List<LinkedHashMap> callFind(MultiValueMap<String, String> parametersMap) {
 
-        UriComponentsBuilder callURL = UriComponentsBuilder.fromHttpUrl(sdcHost + OnapComponentsUrlPaths.SDC_ROOT_URL);
+        UriComponentsBuilder callURI = UriComponentsBuilder.fromHttpUrl(sdcHost + OnapComponentsUrlPaths.SDC_ROOT_URL);
         if (parametersMap != null) {
             Map<String, String> stringStringMap = parametersMap.toSingleValueMap();
             for (String key : stringStringMap.keySet()) {
                 if (!key.equals("fields")) {
-                    callURL.queryParam(key, stringStringMap.get(key));
+                    callURI.queryParam(key, stringStringMap.get(key));
                 }
             }
         }
 
-        ResponseEntity<Object> response = callSdc(callURL.build().encode().toUri().toString());
+        ResponseEntity<Object> response = callSdc(callURI.build().encode().toUri());
         return (List<LinkedHashMap>) response.getBody();
 
     }
 
 
     public File callGetWithAttachment(String toscaModelUrl) {
-        StringBuilder callURL = new StringBuilder().append(sdcHost).append(toscaModelUrl);
+        StringBuilder urlBuilder = new StringBuilder().append(sdcHost).append(toscaModelUrl);
+
+        UriComponentsBuilder callURI = UriComponentsBuilder.fromHttpUrl(urlBuilder.toString());
+
 
         String fileName = System.currentTimeMillis() + "tosca.csar";
-        ResponseEntity<byte[]> response = callSdcWithAttachment(callURL.toString());
+        ResponseEntity<byte[]> response = callSdcWithAttachment(callURI.build().encode().toUri());
         File toscaFile = new File(fileName);
         try {
             FileOutputStream toscaFileStream = new FileOutputStream(toscaFile);
@@ -118,40 +124,40 @@ public class SdcClient {
     }
 
 
-    private ResponseEntity<Object> callSdc(String callURL) {
+    private ResponseEntity<Object> callSdc(URI callURI) {
         ResponseEntity<Object> response =
-                restTemplate.exchange(callURL, HttpMethod.GET, buildRequestHeader(), Object.class);
+                restTemplate.exchange(callURI, HttpMethod.GET, buildRequestHeader(), Object.class);
         LOGGER.debug("response body : " + response.getBody().toString());
         LOGGER.info("response status : " + response.getStatusCodeValue());
-        loggDebugIfResponseKo(callURL, response);
+        loggDebugIfResponseKo(callURI.toString(), response);
         return response;
     }
 
-    private void loggDebugIfResponseKo(String callURL, ResponseEntity<Object> response) {
-        if (!response.getStatusCode().equals(HttpStatus.OK)) {
-            LOGGER.warn(HTTP_CALL_SDC_ON + callURL + " returns " + response.getStatusCodeValue() + ", "
-                    + response.getBody().toString());
-        }
-    }
 
-    private ResponseEntity<byte[]> callSdcWithAttachment(String callURL) {
+    private ResponseEntity<byte[]> callSdcWithAttachment(URI callURI) {
         try {
             ResponseEntity<byte[]> response =
-                    restTemplate.exchange(callURL.toString(), HttpMethod.GET, buildRequestHeader(), byte[].class);
+                    restTemplate.exchange(callURI, HttpMethod.GET, buildRequestHeader(), byte[].class);
             LOGGER.info("response status : " + response.getStatusCodeValue());
             if (!response.getStatusCode().equals(HttpStatus.OK)) {
-                LOGGER.warn(HTTP_CALL_SDC_ON + callURL.toString() + " returns " + response.getStatusCodeValue() + ", "
+                LOGGER.warn(HTTP_CALL_SDC_ON + callURI.toString() + " returns " + response.getStatusCodeValue() + ", "
                         + response.getBody().toString());
             }
             return response;
 
         } catch (BackendFunctionalException e) {
-            LOGGER.error(HTTP_CALL_SDC_ON + callURL.toString() + " error " + e);
+            LOGGER.error(HTTP_CALL_SDC_ON + callURI.toString() + " error " + e);
             return null;
         }
     }
 
 
+    private void loggDebugIfResponseKo(String callURI, ResponseEntity<Object> response) {
+        if (!response.getStatusCode().equals(HttpStatus.OK)) {
+            LOGGER.warn(HTTP_CALL_SDC_ON + callURI + " returns " + response.getStatusCodeValue() + ", "
+                + response.getBody().toString());
+        }
+    }
 }
 
 
index d71595f..0503e34 100644 (file)
@@ -21,6 +21,9 @@ import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import org.apache.commons.collections.CollectionUtils;
@@ -48,9 +51,12 @@ public class ToscaInfosProcessor {
         if (toscaInfosTopologyTemplate.get("inputs") != null) {
             ArrayList serviceSpecCharacteristic = new ArrayList();
             LinkedHashMap toscaInfos = (LinkedHashMap) toscaInfosTopologyTemplate.get("inputs");
-            for (Object key : toscaInfos.keySet()) {
-                String keyString = (String) key;
-                LinkedHashMap inputParameter = (LinkedHashMap) toscaInfos.get(key);
+            Set<Entry<String, LinkedHashMap>> stringLinkedHashMapEntry = (Set<Entry<String, LinkedHashMap>>) toscaInfos
+                .entrySet();
+
+            for (Map.Entry<String,LinkedHashMap> key :stringLinkedHashMapEntry) {
+                String keyString = key.getKey();
+                LinkedHashMap inputParameter = key.getValue();
                 LinkedHashMap mapParameter = new LinkedHashMap();
                 String parameterType = (String) inputParameter.get("type");
                 mapParameter.put("name", keyString);
@@ -60,7 +66,7 @@ public class ToscaInfosProcessor {
                 mapParameter.put("required", inputParameter.get("required"));
                 mapParameter.put("status", inputParameter.get("status"));
                 List<LinkedHashMap> serviceSpecCharacteristicValues =
-                        buildServiceSpecCharacteristicsValues(inputParameter, parameterType);
+                    buildServiceSpecCharacteristicsValues(inputParameter, parameterType);
                 mapParameter.put("serviceSpecCharacteristicValue", serviceSpecCharacteristicValues);
                 serviceSpecCharacteristic.add(mapParameter);
             }
@@ -72,21 +78,21 @@ public class ToscaInfosProcessor {
         List<LinkedHashMap> resourceSpecifications =
                 (List<LinkedHashMap>) serviceCatalogResponse.get("resourceSpecification");
         for (LinkedHashMap resourceSpecification : resourceSpecifications) {
-            String id = (String) resourceSpecification.get("id");
-            LOGGER.debug("get tosca infos for service id: " + id);
-            LinkedHashMap toscaInfosFromResourceId = getToscaInfosFromResourceUUID(nodeTemplate, id);
-            if (toscaInfosFromResourceId != null) {
-                resourceSpecification.put("modelCustomizationId", toscaInfosFromResourceId.get("customizationUUID"));
-                resourceSpecification.put("modelCustomizationName", toscaInfosFromResourceId.get("name"));
+            if(resourceSpecification.get("id")!=null){
+                String id = (String) resourceSpecification.get("id");
+                LOGGER.debug("get tosca infos for service id: {0}", id);
+                LinkedHashMap toscaInfosFromResourceId = getToscaInfosFromResourceUUID(nodeTemplate, id);
+                if (toscaInfosFromResourceId != null && toscaInfosFromResourceId.get("customizationUUID")!=null) {
+                    resourceSpecification.put("modelCustomizationId", toscaInfosFromResourceId.get("customizationUUID"));
+                }
             }
-
         }
     }
 
     private List<LinkedHashMap> buildServiceSpecCharacteristicsValues(LinkedHashMap parameter, String parameterType) {
         List<LinkedHashMap> serviceSpecCharacteristicValues = new ArrayList<>();
         if (!"map".equalsIgnoreCase(parameterType) && !"list".equalsIgnoreCase(parameterType)) {
-            LOGGER.debug("get tosca infos for serviceSpecCharacteristicValues of type map or string : " + parameter);
+            LOGGER.debug("get tosca infos for serviceSpecCharacteristicValues of type map or string : {0}", parameter);
             Object aDefault = parameter.get("default");
             if (parameter.get("entry_schema") != null) {
                 ArrayList entrySchema = (ArrayList) parameter.get("entry_schema");
@@ -124,13 +130,17 @@ public class ToscaInfosProcessor {
 
 
     private LinkedHashMap getToscaInfosFromResourceUUID(LinkedHashMap node_templates, String name) {
-        for (Object nodeTemplateObject : node_templates.values()) {
-            LinkedHashMap nodeTemplate = (LinkedHashMap) nodeTemplateObject;
-            LinkedHashMap metadata = (LinkedHashMap) nodeTemplate.get("metadata");
-            String metadataUUID = (String) metadata.get("UUID");
-            String metadataType = (String) metadata.get("type");
-            if ("VF".equalsIgnoreCase(metadataType) && name.equalsIgnoreCase(metadataUUID)) {
-                return metadata;
+        if(node_templates!=null) {
+            for (Object nodeTemplateObject : node_templates.values()) {
+                LinkedHashMap nodeTemplate = (LinkedHashMap) nodeTemplateObject;
+                LinkedHashMap metadata = (LinkedHashMap) nodeTemplate.get("metadata");
+                if(metadata.get("UUID")!=null && metadata.get("type")!=null) {
+                    String metadataUUID = (String) metadata.get("UUID");
+                    String metadataType = (String) metadata.get("type");
+                    if ("VF".equalsIgnoreCase(metadataType) && name!=null &&  name.equalsIgnoreCase(metadataUUID)) {
+                        return metadata;
+                    }
+                }
             }
         }
         return null;
@@ -142,7 +152,7 @@ public class ToscaInfosProcessor {
         LinkedHashMap topologyTemplate = null;
 
         String toscaModelUrl = (String) sdcResponse.get("toscaModelURL");
-        String serviceId = (String) sdcResponse.get("uuid");
+        String serviceId = (String) sdcResponse.get("id");
         File toscaFile = sdcClient.callGetWithAttachment(toscaModelUrl);
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         String tempFolderName = serviceId + timestamp;
@@ -154,39 +164,48 @@ public class ToscaInfosProcessor {
             LOGGER.debug("temp folder for tosca files : " + folderTemp.getName());
 
             LinkedHashMap toscaMetaFileHashMap = parseToscaFile(tempFolderName + "/TOSCA-Metadata/TOSCA.meta");
-            if (toscaMetaFileHashMap.get("Entry-Definitions") == null) {
-                throw new NullPointerException("no Entry-Definitions node in TOSCA.meta");
-            }
+            topologyTemplate = getToscaTopologyTemplateNode(tempFolderName, toscaMetaFileHashMap);
+            return topologyTemplate;
+        } catch (TechnicalException e) {
+            LOGGER.error("unable to parse tosca file for id : " + serviceId, e);
+            return  topologyTemplate;
+        }
+        finally {
+            deleteTempFiles(serviceId, toscaFile, folderTemp);
+        }
+
+    }
+
+    private LinkedHashMap getToscaTopologyTemplateNode(String tempFolderName,LinkedHashMap toscaMetaFileHashMap) {
+        LinkedHashMap topologyTemplate = null;
+        if (toscaMetaFileHashMap.get("Entry-Definitions") != null) {
             String toscaFilePath = (String) toscaMetaFileHashMap.get("Entry-Definitions");
             LinkedHashMap toscaFileHashMap = parseToscaFile(tempFolderName + "/" + toscaFilePath);
-
-            if (toscaFileHashMap.get("topology_template") == null) {
-                throw new NullPointerException("no topology_template node in tosca file");
+            if (toscaFileHashMap.get("topology_template") != null) {
+                topologyTemplate = (LinkedHashMap) toscaFileHashMap.get("topology_template");
+            } else {
+                LOGGER.error("no Entry-Definitions node in TOSCA.meta");
             }
-            topologyTemplate = (LinkedHashMap) toscaFileHashMap.get("topology_template");
-
-        } catch (NullPointerException e) {
-            LOGGER.warn("unable to parse tosca file for id : " + serviceId, e);
-            return null;
+        } else {
+            LOGGER.error("no topology_template node in tosca file");
+        }
+        return topologyTemplate;
+    }
 
-        } finally {
 
-            try {
+    private void deleteTempFiles(String serviceId, File toscaFile, File folderTemp) {
+        try {
+            if(folderTemp!=null){
                 LOGGER.debug("deleting temp folder for tosca files : " + folderTemp.getName());
                 FileUtils.deleteDirectory(folderTemp);
-                LOGGER.debug("deleting tosca archive : " + toscaFile.getName());
-                FileUtils.forceDelete(toscaFile);
-                return topologyTemplate;
-
-            } catch (IOException e) {
-                LOGGER.error("unable to delete temp directory tosca file for id : " + serviceId, e);
-                return null;
             }
+            LOGGER.debug("deleting tosca archive : " + toscaFile.getName());
+            FileUtils.forceDelete(toscaFile);
+        } catch (IOException e) {
+            LOGGER.error("unable to delete temp directory tosca file for id : " + serviceId, e);
         }
-
     }
 
-
     private LinkedHashMap parseToscaFile(String fileName) {
 
         File toscaFile = new File(fileName);
index 8fd3002..698981b 100644 (file)
@@ -17,6 +17,9 @@ package org.onap.nbi.apis.serviceinventory;
 
 import java.util.LinkedHashMap;
 import org.onap.nbi.OnapComponentsUrlPaths;
+import org.onap.nbi.exceptions.BackendFunctionalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
@@ -39,6 +42,7 @@ public class AaiClient extends BaseClient {
 
     private static final String HEADER_AUTHORIZATION = "Authorization";
     private static final String X_FROM_APP_ID = "X-FromAppId";
+    private static final Logger LOGGER = LoggerFactory.getLogger(AaiClient.class);
 
     private HttpHeaders buildRequestHeaderForAAI() {
 
@@ -91,7 +95,12 @@ public class AaiClient extends BaseClient {
         String callUrlFormated = callURL.toString().replace(CUSTOMER_ID, customerId);
         callUrlFormated = callUrlFormated.replace("$serviceSpecName", serviceType);
 
-        ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI());
-        return (LinkedHashMap) response.getBody();
+        try{
+            ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI());
+            return (LinkedHashMap) response.getBody();
+        } catch (BackendFunctionalException e) {
+            LOGGER.error("error on calling {0} , {1}" , callUrlFormated, e);
+            return null;
+        }
     }
 }
index a4347d4..3208de4 100644 (file)
@@ -24,6 +24,7 @@ import org.onap.nbi.exceptions.BackendFunctionalException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.MultiValueMap;
 import org.springframework.util.StringUtils;
 
@@ -156,11 +157,14 @@ public class ServiceInventoryService {
         List<LinkedHashMap> serviceInstancesForServiceType =
                 (List<LinkedHashMap>) serviceInstancesInAaiForCustomer.get("service-instance");
 
-        // add service type for jolt
-        for (LinkedHashMap serviceInstanceForServiceType : serviceInstancesForServiceType) {
-            serviceInstanceForServiceType.put("service-type", serviceType);
+        if(!CollectionUtils.isEmpty(serviceInstancesForServiceType)){
+            // add service type for jolt
+            for (LinkedHashMap serviceInstanceForServiceType : serviceInstancesForServiceType) {
+                serviceInstanceForServiceType.put("service-type", serviceType);
+            }
+            serviceInstances.addAll(serviceInstancesForServiceType);
         }
-        serviceInstances.addAll(serviceInstancesForServiceType);
+
 
     }
 
index 5f10d63..ef4d8c3 100644 (file)
@@ -61,11 +61,9 @@ public class SoClient {
 
         String url = soHostname + OnapComponentsUrlPaths.MSO_CREATE_SERVICE_INSTANCE_PATH;
 
-        HttpEntity<MSOPayload> requestDetailEntity = new HttpEntity<>(msoPayload, buildRequestHeader());
-
         try {
             ResponseEntity<CreateServiceInstanceResponse> response = restTemplate.exchange(url, HttpMethod.POST,
-                    new HttpEntity<>(requestDetailEntity, buildRequestHeader()), CreateServiceInstanceResponse.class);
+                    new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
 
             logResponsePost(url, response);
             return response;
@@ -85,11 +83,9 @@ public class SoClient {
 
         String url = soHostname + OnapComponentsUrlPaths.MSO_DELETE_REQUEST_STATUS_PATH + serviceId;
 
-        HttpEntity<MSOPayload> requestDetailEntity = new HttpEntity<>(msoPayload, buildRequestHeader());
-
         try {
             ResponseEntity<CreateServiceInstanceResponse> response = restTemplate.exchange(url, HttpMethod.DELETE,
-                    new HttpEntity<>(requestDetailEntity, buildRequestHeader()), CreateServiceInstanceResponse.class);
+                    new HttpEntity<>(msoPayload, buildRequestHeader()), CreateServiceInstanceResponse.class);
 
             logResponsePost(url, response);
             return response;
index 3479f85..bef4183 100644 (file)
@@ -21,6 +21,8 @@ public class ModelInfo {
 
     private String modelInvariantId;
 
+    private String modelVersionId;
+
     private String modelNameVersionId;
 
     private String modelName;
@@ -87,11 +89,25 @@ public class ModelInfo {
         this.modelCustomizationId = modelCustomizationId;
     }
 
+    public String getModelVersionId() {
+        return modelVersionId;
+    }
+
+    public void setModelVersionId(String modelVersionId) {
+        this.modelVersionId = modelVersionId;
+    }
+
     @Override
     public String toString() {
-        return "ModelInfo{" + "modelType='" + modelType + '\'' + ", modelInvariantId='" + modelInvariantId + '\''
-                + ", modelNameVersionId='" + modelNameVersionId + '\'' + ", modelName='" + modelName + '\''
-                + ", modelVersion='" + modelVersion + '\'' + ", modelCustomizationName='" + modelCustomizationName
-                + '\'' + ", modelCustomizationId='" + modelCustomizationId + '\'' + '}';
+        return "ModelInfo{" +
+            "modelType='" + modelType + '\'' +
+            ", modelInvariantId='" + modelInvariantId + '\'' +
+            ", modelVersionId='" + modelVersionId + '\'' +
+            ", modelNameVersionId='" + modelNameVersionId + '\'' +
+            ", modelName='" + modelName + '\'' +
+            ", modelVersion='" + modelVersion + '\'' +
+            ", modelCustomizationName='" + modelCustomizationName + '\'' +
+            ", modelCustomizationId='" + modelCustomizationId + '\'' +
+            '}';
     }
 }
index 31a1853..e4bbfbb 100644 (file)
@@ -32,7 +32,7 @@ public class RequestParameters {
     }
 
     public void setSubscriptionServiceType(String subscriptionServiceType) {
-        subscriptionServiceType = subscriptionServiceType;
+        this.subscriptionServiceType = subscriptionServiceType;
     }
 
     public List<UserParams> getUserParams() {
index 1d1ef36..d623b89 100644 (file)
@@ -246,6 +246,7 @@ public class SOTaskProcessor {
         modelInfo.setModelType("service");
         modelInfo.setModelInvariantId((String) sdcInfos.get("invariantUUID"));
         modelInfo.setModelNameVersionId(orderItem.getService().getServiceSpecification().getId());
+        modelInfo.setModelVersionId(orderItem.getService().getServiceSpecification().getId());
         modelInfo.setModelName((String) sdcInfos.get("name"));
         modelInfo.setModelVersion((String) sdcInfos.get("version"));
         requestDetails.setModelInfo(modelInfo);
diff --git a/src/main/resources/certificate/AAF_RootCA.cer b/src/main/resources/certificate/AAF_RootCA.cer
new file mode 100644 (file)
index 0000000..e9a50d7
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV
+BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx
+NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK
+DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7
+XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn
+H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM
+pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7
+NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg
+2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY
+wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd
+ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM
+P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6
+aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY
+PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G
+A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ
+UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN
+BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz
+L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9
+7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx
+c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf
+jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2
+RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h
+PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF
+CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+
+Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A
+cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR
+ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX
+dYY=
+-----END CERTIFICATE-----
diff --git a/src/main/resources/certificate/aai.api.simpledemo.openecomp.org b/src/main/resources/certificate/aai.api.simpledemo.openecomp.org
new file mode 100644 (file)
index 0000000..85ae8a7
--- /dev/null
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----\r
+MIIDyzCCArMCCQDrA8zzZKXznDANBgkqhkiG9w0BAQsFADCBrTELMAkGA1UEBhMC\r
+VVMxCzAJBgNVBAgMAk5KMRMwEQYDVQQHDApCZWRtaW5zdGVyMRIwEAYDVQQKDAlP\r
+cGVuRUNPTVAxEzARBgNVBAsMCnNpbXBsZWRlbW8xKjAoBgNVBAMMIU9wZW5FQ09N\r
+UCBzaW1wbGVkZW1vIFNlcnZlciBDQSBYMTEnMCUGCSqGSIb3DQEJARYYc2ltcGxl\r
+ZGVtb0BvcGVuZWNvbXAub3JnMB4XDTE3MTEwMzIzNDUzNVoXDTE4MTIwNjIzNDUz\r
+NVowgaAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOSjEUMBIGA1UEBwwLQmVkbWlu\r
+aXN0ZXIxDTALBgNVBAoMBE9OQVAxKTAnBgNVBAMMIGFhaS5hcGkuc2ltcGxlZGVt\r
+by5vcGVuZWNvbXAub3JnMTQwMgYJKoZIhvcNAQkBFiVhYWktaG9zdEBhcGkuc2lt\r
+cGxlZGVtby5vcGVuZWNvbXAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\r
+CgKCAQEA6gFktbGZVt4o78kU6oeCdqx04yPNTd1qRmJ06CD87fgrIDCTXVC+PE7R\r
+hHd1V71aNnoElBzn+mwetn4qG4T9IqAJvFIXxrzLpS7WlKBxStFhe4GNXl+RDqWc\r
+UM+47+s32TwZ3czQrhMVR9VNENUHo2d6XylGaUDcVgrMYWbFYWfmIJ4tO1latW9n\r
+h+perB0nNBxNDK9nYtjLHQk6ukTmONSnldvCgu/TFX5C34qB49cI0LmCf5Lwk9tv\r
+8dmTZ6Um8A0EbQen+uPaaHeEXm/EtFy0FSVzoKmxuQS0g4JNhfnfNCHVDO7zGE+N\r
+pCb9VfUI2fXIZvjNBAemKN/b2i5d6QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBh\r
+93eaeAw0aA4ukAPpuWIODxxAnZlFfDH4uzwnv6smDJzO1biRwQ5BBZfL8qSVozrp\r
+aDKeIPWP7fZvjl3mGfCp8mLkI6WkfXVcZy5IlJGDTnW+G8Cpohq910W/Ibp1J9zx\r
+Ki4IdgKx7FbSYLpgwH2g2EPshHXQX2qFdxYvnEH0PzJjYBKeyyHV3N2kNr6+kM3Q\r
+HpXXIiLNbNcqLT+9zOmuJszN8ILLV56vu8Clzwxld+ru0tiO2OJk2eT+mtw2PI1/\r
+jcYqEEdOIZycrQiytxXgvte7A9VFQP/1Tl22BBYrAW2BhyW67kopATeiSunK1FmO\r
+DLcT7mR+59F964RV9BJR\r
+-----END CERTIFICATE-----\r
index cac223e..f0b3787 100644 (file)
@@ -8,6 +8,7 @@
       "invariantUUID": "invariantUUID",
       "toscaModelURL": "toscaModelURL",
       "toscaResourceName": "toscaResourceName",
+      "resourceInstanceName" : "modelCustomizationName",
       "category ": "category",
       "subcategory": "subcategory",
       "distributionStatus": "distributionStatus",
index 648241d..f67dda5 100644 (file)
@@ -37,6 +37,7 @@ public class ServiceCatalogAssertions {
                 .isEqualTo("/sdc/v1/catalog/services/1e3feeb0-8e36-46c6-862c-236d9c626439/toscaModel");
         assertThat(service.get("distributionStatus")).isEqualTo("DISTRIBUTED");
         assertThat(service.get("version")).isEqualTo("2.0");
+        assertThat(service.get("modelCustomizationName")).isEqualTo("vFW-vSINK 0");
         assertThat(service.get("lifecycleStatus")).isEqualTo("CERTIFIED");
         assertThat(service.get("@type")).isEqualTo("ONAPservice");
         assertThat(((ArrayList) service.get("attachment")).size()).isEqualTo(5);
diff --git a/src/test/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessorTest.java b/src/test/java/org/onap/nbi/apis/servicecatalog/ToscaInfosProcessorTest.java
new file mode 100644 (file)
index 0000000..6c116fb
--- /dev/null
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2018 Orange
+ *
+ * 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.
+ */
+package org.onap.nbi.apis.servicecatalog;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNull;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import org.junit.Test;
+import org.onap.nbi.exceptions.TechnicalException;
+
+
+public class ToscaInfosProcessorTest {
+
+    final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
+
+    ToscaInfosProcessor toscaInfosProcessor = new ToscaInfosProcessor();
+
+
+    private LinkedHashMap parseToscaFile(String fileName) {
+
+        File toscaFile = new File(fileName);
+        if (!toscaFile.exists()) {
+            throw new TechnicalException("unable to find  file : " + fileName);
+        }
+        try {
+            return (LinkedHashMap) mapper.readValue(toscaFile, Object.class);
+        } catch (IOException e) {
+            throw new TechnicalException("Unable to parse tosca file : " + fileName);
+
+        } catch (NullPointerException e) {
+            throw new TechnicalException("unable to find tosca file : " + fileName);
+        }
+    }
+
+
+    @Test
+    public void buildResponseWithToscaInfos() {
+
+        ClassLoader classLoader = getClass().getClassLoader();
+        File file = new File(classLoader.getResource("toscafile/service-TestNetwork-template.yml").getFile());
+        List<LinkedHashMap> resources = new ArrayList<>();
+        LinkedHashMap resource1 = new LinkedHashMap();
+        resource1.put("id", "e2b12ac6-cbb6-4517-9c58-b846d1f68caf");
+        resources.add(resource1);
+        LinkedHashMap toscaFile = parseToscaFile(file.getPath());
+        LinkedHashMap response = new LinkedHashMap();
+        response.put("resourceSpecification", resources);
+        toscaInfosProcessor.buildResponseWithToscaInfos((LinkedHashMap) toscaFile.get("topology_template"), response);
+
+        resources = (List<LinkedHashMap>) response.get("resourceSpecification");
+        assertNull(resources.get(0).get("modelCustomizationId"));
+        assertNull(resources.get(0).get("modelCustomizationName"));
+
+    }
+
+
+    @Test
+    public void buildResponseWithToscaInfosOk() {
+
+        ClassLoader classLoader = getClass().getClassLoader();
+        File file = new File(classLoader.getResource("toscafile/service-VfwService2vfBased-template.yml").getFile());
+        List<LinkedHashMap> resources = new ArrayList<>();
+        LinkedHashMap resource1 = new LinkedHashMap();
+        resource1.put("id", "e2b12ac6-cbb6-4517-9c58-b846d1f68caf");
+        resources.add(resource1);
+        LinkedHashMap toscaFile = parseToscaFile(file.getPath());
+        LinkedHashMap response = new LinkedHashMap();
+        response.put("resourceSpecification", resources);
+        toscaInfosProcessor.buildResponseWithToscaInfos((LinkedHashMap) toscaFile.get("topology_template"), response);
+
+        ArrayList toscaInfos = (ArrayList) response.get("serviceSpecCharacteristic");
+        assertThat(toscaInfos.size()).isEqualTo(4);
+
+        for (Object toscaInfo : toscaInfos) {
+            LinkedHashMap info = (LinkedHashMap) toscaInfo;
+            if (((String) info.get("name")).equalsIgnoreCase("fortigate_image_url")) {
+                assertThat(info.get("name")).isEqualTo("fortigate_image_url");
+                assertThat(info.get("description")).isNull();
+                assertThat(info.get("valueType")).isEqualTo("string");
+                assertThat(info.get("@type")).isEqualTo("ONAPserviceCharacteristic");
+                assertThat(info.get("required")).isEqualTo(false);
+                assertThat(info.get("status")).isNull();
+                assertThat(((ArrayList) info.get("serviceSpecCharacteristicValue")).size()).isEqualTo(0);
+
+            }
+
+            if (((String) info.get("name")).equalsIgnoreCase("flavor")) {
+                assertThat(info.get("name")).isEqualTo("flavor");
+                assertThat(info.get("description")).isNull();
+                assertThat(info.get("valueType")).isEqualTo("string");
+                assertThat(info.get("@type")).isEqualTo("ONAPserviceCharacteristic");
+                assertThat(info.get("required")).isNull();
+                assertThat(info.get("status")).isNull();
+                assertThat(((ArrayList) info.get("serviceSpecCharacteristicValue")).size()).isEqualTo(0);
+
+            }
+
+            if (((String) info.get("name")).equalsIgnoreCase("external_network_name")) {
+                assertThat(info.get("name")).isEqualTo("external_network_name");
+                assertThat(info.get("description")).isNull();
+                assertThat(info.get("valueType")).isEqualTo("string");
+                assertThat(info.get("@type")).isEqualTo("ONAPserviceCharacteristic");
+                assertThat(info.get("required")).isNull();
+                assertThat(info.get("status")).isEqualTo("inactive");
+                ;
+                assertThat(((ArrayList) info.get("serviceSpecCharacteristicValue")).size()).isEqualTo(0);
+
+            }
+
+            if (((String) info.get("name")).equalsIgnoreCase("cpus")) {
+                assertThat(info.get("name")).isEqualTo("cpus");
+                assertThat(info.get("description")).isEqualTo("Number of CPUs for the server.");
+                assertThat(info.get("valueType")).isEqualTo("integer");
+                assertThat(info.get("@type")).isEqualTo("ONAPserviceCharacteristic");
+                assertThat(info.get("required")).isNull();
+                assertThat(info.get("status")).isNull();
+                ;
+                assertThat(((ArrayList) info.get("serviceSpecCharacteristicValue")).size()).isEqualTo(4);
+                ArrayList serviceSpecCharacteristicValues = (ArrayList) info.get("serviceSpecCharacteristicValue");
+
+                for (Object serviceSpecCharacteristicValue : serviceSpecCharacteristicValues) {
+                    LinkedHashMap serviceSpecValue = (LinkedHashMap) serviceSpecCharacteristicValue;
+                    if (((String) serviceSpecValue.get("value")).equalsIgnoreCase("1")) {
+                        assertThat(serviceSpecValue.get("isDefault")).isEqualTo(false);
+                        assertThat(serviceSpecValue.get("value")).isEqualTo("1");
+                        assertThat(serviceSpecValue.get("valueType")).isEqualTo("integer");
+                    }
+                    if (((String) serviceSpecValue.get("value")).equalsIgnoreCase("2")) {
+                        assertThat(serviceSpecValue.get("isDefault")).isEqualTo(true);
+                        assertThat(serviceSpecValue.get("value")).isEqualTo("2");
+                        assertThat(serviceSpecValue.get("valueType")).isEqualTo("integer");
+                    }
+                    if (((String) serviceSpecValue.get("value")).equalsIgnoreCase("3")) {
+                        assertThat(serviceSpecValue.get("isDefault")).isEqualTo(false);
+                        assertThat(serviceSpecValue.get("value")).isEqualTo("3");
+                        assertThat(serviceSpecValue.get("valueType")).isEqualTo("integer");
+                    }
+                    if (((String) serviceSpecValue.get("value")).equalsIgnoreCase("4")) {
+                        assertThat(serviceSpecValue.get("isDefault")).isEqualTo(false);
+                        assertThat(serviceSpecValue.get("value")).isEqualTo("4");
+                        assertThat(serviceSpecValue.get("valueType")).isEqualTo("integer");
+                    }
+
+                }
+
+
+            }
+
+        }
+
+
+    }
+}
\ No newline at end of file
index 5582990..4995025 100644 (file)
           },
           {
             "service-type": "vFW",
-            "resource-version": "1519660513613"
+            "resource-version": "1519660513613",
+            "service-instances": {
+              "service-instance": [
+                {
+                  "service-instance-id": "39ff3f9d-f210-4566-9d19-fa37edf1697d",
+                  "service-instance-name": "vPCRF",
+                  "model-invariant-id": "a09e799f-58eb-4c00-bfcc-4fa371a557e3",
+                  "model-version-id": "4c393977-09ea-42c2-bcd9-f50302ebba48",
+                  "resource-version": "1524672125232"
+                }
+              ]
+            }
+
           }
         ]
     },
index 6aa4dc5..c04ecae 100644 (file)
@@ -1,7 +1,7 @@
 {
     "request": {
         "method": "GET",
-        "url": "/sdc/v1/catalog/services/"
+        "url": "/sdc/v1/catalog/services"
     },
     "response": {
         "status": 200,
diff --git a/src/test/resources/toscafile/service-TestNetwork-template.yml b/src/test/resources/toscafile/service-TestNetwork-template.yml
new file mode 100755 (executable)
index 0000000..0a62221
--- /dev/null
@@ -0,0 +1,96 @@
+#
+#     Copyright (c) 2018 Orange
+#
+#     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.
+#
+
+tosca_definitions_version: tosca_simple_yaml_1_1
+metadata:
+  invariantUUID: c4b53838-852e-465b-9912-d386228e8784
+  UUID: 5349c430-8bf7-4033-be37-ef33d0f9823e
+  name: test network
+  description: '12345'
+  type: Service
+  category: Network L1-3
+  serviceType: ''
+  serviceRole: ''
+  serviceEcompNaming: true
+  ecompGeneratedNaming: true
+  namingPolicy: ''
+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
+- service-test network-interface:
+    file: service-TestNetwork-template-interface.yml
+- resource-Generic NeutronNet:
+    file: resource-GenericNeutronnet-template.yml
+topology_template:
+  node_templates:
+    Generic NeutronNet 0:
+      type: org.openecomp.resource.vl.GenericNeutronNet
+      metadata:
+        invariantUUID: 185ad0e3-0031-4d34-9ac2-d6ad30f7f34d
+        UUID: e2b12ac6-cbb6-4517-9c58-b846d1f68caf
+        customizationUUID: 27f40057-902a-4cbf-870e-0db55f97283e
+        version: '1.0'
+        name: Generic NeutronNet
+        description: Generic NeutronNet
+        type: VL
+        category: Generic
+        subcategory: Network Elements
+        resourceVendor: ATT (Tosca)
+        resourceVendorRelease: 1.0.0.wd03
+        resourceVendorModelNumber: ''
+      properties:
+        network_role: TestNetwork.test
+        network_assignments:
+          is_external_network: 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
+  substitution_mappings:
+    node_type: org.openecomp.service.TestNetwork
+    capabilities:
+      genericneutronnet0.feature:
+      - genericneutronnet0
+      - feature
+      genericneutronnet0.virtual_linkable:
+      - genericneutronnet0
+      - virtual_linkable
+    requirements:
+      genericneutronnet0.dependency:
+      - genericneutronnet0
+      - dependency
diff --git a/src/test/resources/toscafile/service-VfwService2vfBased-template.yml b/src/test/resources/toscafile/service-VfwService2vfBased-template.yml
new file mode 100644 (file)
index 0000000..b96b139
--- /dev/null
@@ -0,0 +1,1890 @@
+#
+#     Copyright (c) 2018 Orange
+#
+#     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.
+#
+
+tosca_definitions_version: tosca_simple_yaml_1_1
+metadata:
+  invariantUUID: b58a118e-eeb9-4f6e-bdca-e292f84d17df
+  UUID: 1e3feeb0-8e36-46c6-862c-236d9c626439
+  name: vFW-service-2VF-based
+  description: vFW service based on 2 VF from 2 VSP
+  type: Service
+  category: Network Service
+  serviceType: ''
+  serviceRole: ''
+  serviceEcompNaming: true
+  ecompGeneratedNaming: true
+  namingPolicy: ''
+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
+- service-vFW-service-2VF-based-interface:
+    file: service-VfwService2vfBased-template-interface.yml
+- resource-vFW-vSINK:
+    file: resource-VfwVsink-template.yml
+- resource-vFW-vSINK-interface:
+    file: resource-VfwVsink-template-interface.yml
+- resource-vPkG:
+    file: resource-Vpkg-template.yml
+- resource-vPkG-interface:
+    file: resource-Vpkg-template-interface.yml
+topology_template:
+  inputs:
+    fortigate_image_url:
+      type: string
+      required: false
+      default: 
+    flavor:
+      type: string
+      default: '2z'
+    external_network_name:
+      type: string
+      default: 'GATEWAY_NET'
+      status: inactive
+    cpus:
+      type: integer
+      description: Number of CPUs for the server.
+      default: 2
+      entry_schema:
+      - constraints:
+          - valid_values: [ 1, 2, 4, 8 ]
+  node_templates:
+    vPkG 0:
+      type: org.openecomp.resource.vf.Vpkg
+      metadata:
+        invariantUUID: 8d8a20c0-746c-4d5e-a1a2-fa49fa5786ad
+        UUID: 31961e27-2a2c-4beb-87c9-bfe0067088f5
+        customizationUUID: 067f5672-51ec-48a6-8ffd-0a7874672666
+        version: '2.0'
+        name: vPkG
+        description: vPacketGenerator
+        type: VF
+        category: Application L4+
+        subcategory: Firewall
+        resourceVendor: Generic
+        resourceVendorRelease: '1.0'
+        resourceVendorModelNumber: ''
+      properties:
+        vf_module_id: vTrafficPNG
+        repo_url_blob: https://nexus.onap.org/content/sites/raw
+        unprotected_private_subnet_id: zdfw1fwl01_unprotected_sub
+        public_net_id: 715a1ca1-cbc6-4d00-84bb-0f8667a748ce
+        vfw_private_ip_0: 192.168.10.100
+        onap_private_subnet_id: 51a5a838-7318-464d-858a-974bef8d49e3
+        onap_private_net_cidr: 10.4.2.0/24
+        image_name: ubuntu-14.04-daily
+        flavor_name: onap.medium
+        vnf_id: vPNG_Firewall_demo_app
+        vpg_name_0: zdfw1fwl01pgn01
+        vpg_private_ip_1: 10.4.2.200
+        vsn_private_ip_0: 192.168.20.250
+        vpg_private_ip_0: 192.168.10.200
+        protected_private_net_cidr: 192.168.20.0/24
+        unprotected_private_net_cidr: 192.168.10.0/24
+        nf_naming:
+          ecomp_generated_naming: true
+        onap_private_net_id: 715a1ca1-cbc6-4d00-84bb-0f8667a748ce
+        unprotected_private_net_id: zdfw1fwl01_unprotected
+        availability_zone_max_count: 1
+        demo_artifacts_version: 1.2.0
+        key_name: onap_key_LnHa
+        repo_url_artifacts: https://nexus.onap.org/content/groups/staging
+        install_script_version: 1.2.0-SNAPSHOT
+        cloud_env: openstack
+      capabilities:
+        network.incoming.bytes.rate_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.read.bytes_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes.rate_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.allocation_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        endpoint_vpg:
+          properties:
+            secure: true
+        cpu_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.bytes.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes.rate_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.bytes.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.iops_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.usage_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.usage_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.bytes_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.bytes_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.requests_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.capacity_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.latency_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.requests.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.packets.rate_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.allocation_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.ephemeral.size_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.requests.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.bytes.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.iops_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        instance_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.capacity_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.requests_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu_util_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory.usage_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.requests.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.read.requests_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu.delta_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes.rate_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.bytes_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.packets.rate_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        scalable_vpg:
+          properties:
+            max_instances: 1
+            min_instances: 1
+        vcpus_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.root.size_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.requests_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vpg_vpg_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.read.bytes.rate_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory.resident_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.latency_vpg:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets_vpg_vpg_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+    vFW-vSINK 0:
+      type: org.openecomp.resource.vf.VfwVsink
+      metadata:
+        invariantUUID: 18b90934-aa82-456f-938e-e74a07a426f3
+        UUID: 89a6b4c5-3973-4c19-b651-fae3713ca8d5
+        customizationUUID: f7ae574e-fd5f-41e7-9b21-75e001561c96
+        version: '2.0'
+        name: vFW-vSINK
+        description: vFW and vSink in one VSP
+        type: VF
+        category: Application L4+
+        subcategory: Firewall
+        resourceVendor: Generic
+        resourceVendorRelease: '1.0'
+        resourceVendorModelNumber: ''
+      properties:
+        vf_module_id: vFirewallCL
+        repo_url_blob: https://nexus.onap.org/content/sites/raw
+        vfw_private_ip_1: 192.168.20.100
+        unprotected_private_subnet_id: zdfw1fwl01_unprotected_sub
+        public_net_id: 715a1ca1-cbc6-4d00-84bb-0f8667a748ce
+        vfw_private_ip_0: 192.168.10.100
+        onap_private_subnet_id: 51a5a838-7318-464d-858a-974bef8d49e3
+        vfw_private_ip_2: 10.4.2.201
+        vfw_name_0: zdfw1fwl01fwl01
+        onap_private_net_cidr: 10.4.2.0/24
+        image_name: ubuntu-14.04-daily
+        flavor_name: onap.medium
+        dcae_collector_ip: 10.4.2.38
+        vnf_id: vFirewall_demo_app
+        dcae_collector_port: '8080'
+        protected_private_subnet_id: zdfw1fwl01_protected_sub
+        vsn_private_ip_0: 192.168.20.250
+        vsn_private_ip_1: 10.4.2.202
+        vpg_private_ip_0: 192.168.10.200
+        protected_private_net_cidr: 192.168.20.0/24
+        unprotected_private_net_cidr: 192.168.10.0/24
+        nf_naming:
+          ecomp_generated_naming: true
+        vsn_name_0: zdfw1fwl01snk01
+        onap_private_net_id: 715a1ca1-cbc6-4d00-84bb-0f8667a748ce
+        unprotected_private_net_id: zdfw1fwl01_unprotected
+        availability_zone_max_count: 1
+        demo_artifacts_version: 1.2.0
+        key_name: onap_key_LnHa
+        repo_url_artifacts: https://nexus.onap.org/content/groups/staging
+        install_script_version: 1.2.0-SNAPSHOT
+        protected_private_net_id: zdfw1fwl01_protected
+        cloud_env: openstack
+      capabilities:
+        network.outgoing.bytes_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        end_point:
+          properties:
+            protocol: tcp
+            initiator: source
+            network_name: PRIVATE
+            secure: false
+        disk.device.write.bytes_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        memory.usage_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        scalable_vsn:
+          properties:
+            max_instances: 1
+            min_instances: 1
+        network.incoming.packets_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes.rate_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.read.requests_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.allocation_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        instance_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.latency_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory.resident_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.incoming.bytes.rate_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.incoming.bytes_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.write.bytes.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.write.requests.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes.rate_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.packets.rate_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.incoming.packets_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.bytes.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.usage_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.usage_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.ephemeral.size_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.read.bytes_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.bytes_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.latency_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.bytes_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        memory_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.write.requests_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.allocation_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.read.requests_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        vcpus_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.requests.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.read.bytes_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.bytes.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        endpoint_vfw:
+          properties:
+            secure: true
+        disk.device.read.requests.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.capacity_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.packets.rate_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.packets.rate_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.root.size_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.packets.rate_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.read.bytes.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.bytes_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.write.requests_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.incoming.packets.rate_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.capacity_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outpoing.packets_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu_util_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        cpu_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.iops_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.incoming.bytes.rate_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory.usage_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.write.bytes_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.usage_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.bytes.rate_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes.rate_vsn_vsn_private_1_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        memory.resident_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.latency_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.write.requests.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.ephemeral.size_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.read.bytes_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.bytes.rate_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        instance_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.allocation_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.iops_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        scalable_vfw:
+          properties:
+            max_instances: 1
+            min_instances: 1
+        disk.device.read.bytes.rate_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.usage_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.write.bytes.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu.delta_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.bytes.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu.delta_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.capacity_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.read.bytes_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.read.requests_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.read.requests.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.bytes_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.write.requests_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.allocation_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        vcpus_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.iops_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outpoing.packets_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.read.bytes.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets.rate_vfw_vfw_private_1_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.bytes.rate_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.write.requests_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        memory_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.root.size_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.packets.rate_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.incoming.packets_vfw_vfw_private_2_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.write.requests.rate_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        disk.device.capacity_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.read.requests_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        disk.device.latency_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        endpoint_vsn:
+          properties:
+            secure: true
+        disk.iops_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        network.outgoing.bytes.rate_vsn_vsn_private_0_port:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+        network.outgoing.bytes.rate_vfw_vfw_private_0_port:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu_util_vfw:
+          properties:
+            unit: packet
+            description: Number of incoming packets
+            type: Cumulative
+            category: network
+        cpu_vsn:
+          properties:
+            unit: request
+            description: Number of write requests
+            type: Cumulative
+            category: compute
+  groups:
+    vpkg0..Vpkg..base_vpkg..module-0:
+      type: org.openecomp.groups.VfModule
+      metadata:
+        vfModuleModelName: Vpkg..base_vpkg..module-0
+        vfModuleModelInvariantUUID: 2b625799-0359-418e-8003-d92adcdb595c
+        vfModuleModelUUID: 4a82f066-ae9d-4b13-961a-1cf04550887d
+        vfModuleModelVersion: '2'
+        vfModuleModelCustomizationUUID: fc2f14df-ac8c-4631-bc59-440f3d823229
+      properties:
+        min_vf_module_instances: 1
+        vf_module_label: base_vpkg
+        max_vf_module_instances: 1
+        vfc_list:
+        vf_module_type: Base
+        vf_module_description:
+        initial_count: 1
+        volume_group: false
+        availability_zone_count:
+    vfwvsink0..VfwVsink..base_vfw..module-0:
+      type: org.openecomp.groups.VfModule
+      metadata:
+        vfModuleModelName: VfwVsink..base_vfw..module-0
+        vfModuleModelInvariantUUID: 1408337c-b197-4c3f-9fe4-f63a74a38fbf
+        vfModuleModelUUID: 16771d83-0c95-4dbe-a8be-1364f9c568ae
+        vfModuleModelVersion: '2'
+        vfModuleModelCustomizationUUID: 2ff6be2e-e80b-474c-9e72-6d7f897d0ba0
+      properties:
+        min_vf_module_instances: 1
+        vf_module_label: base_vfw
+        max_vf_module_instances: 1
+        vfc_list:
+        vf_module_type: Base
+        vf_module_description:
+        initial_count: 1
+        volume_group: false
+        availability_zone_count:
+  substitution_mappings:
+    node_type: org.openecomp.service.VfwService2vfBased
+    capabilities:
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_0_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.incoming.bytes.rate_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.incoming.bytes.rate_vpg_vpg_private_0_port
+      vfwvsink0.vfw.abstract_vfw.disk.device.write.bytes.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.write.bytes.rate_vfw
+      vpkg0.vpg.abstract_vpg.host_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.host_vpg
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.outgoing.bytes_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.outgoing.bytes_vpg_vpg_private_0_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.outgoing.bytes.rate_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.outgoing.bytes.rate_vpg_vpg_private_1_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.attachment_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.attachment_vfw_vfw_private_1_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.incoming.packets.rate_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.incoming.packets.rate_vsn_vsn_private_0_port
+      vfwvsink0.vfw.abstract_vfw.disk.read.bytes.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.read.bytes.rate_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.iops_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.iops_vfw
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.feature_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.feature_vpg_vpg_private_1_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_1_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.binding_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.binding_vsn_vsn_private_0_port
+      vpkg0.vpg.abstract_vpg.disk.device.read.requests.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.read.requests.rate_vpg
+      vfwvsink0.vsn.abstract_vsn.memory.resident_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.memory.resident_vsn
+      vpkg0.vpg.abstract_vpg.disk.write.requests.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.write.requests.rate_vpg
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_1_port
+      vfwvsink0.vsn.abstract_vsn.disk.write.bytes.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.write.bytes.rate_vsn
+      vfwvsink0.vfw.abstract_vfw.instance_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.instance_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.write.requests.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.write.requests.rate_vfw
+      vfwvsink0.vfw.abstract_vfw.binding_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.binding_vfw
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_0_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.incoming.bytes_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.incoming.bytes_vpg_vpg_private_0_port
+      vfwvsink0.unprotected_private_network.feature:
+      - vfwvsink0
+      - unprotected_private_network.feature
+      vpkg0.vpg.abstract_vpg.disk.read.bytes.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.read.bytes.rate_vpg
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.binding_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.binding_vpg_vpg_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.incoming.packets_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.incoming.packets_vsn_vsn_private_1_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.outgoing.packets.rate_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.outgoing.packets.rate_vpg_vpg_private_1_port
+      vfwvsink0.vfw.abstract_vfw.disk.device.read.requests_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.read.requests_vfw
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.outgoing.bytes_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.outgoing.bytes_vsn_vsn_private_1_port
+      vfwvsink0.vsn.abstract_vsn.cpu_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.cpu_vsn
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.attachment_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.attachment_vsn_vsn_private_1_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.binding_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.binding_vfw_vfw_private_2_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.outgoing.bytes.rate_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.outgoing.bytes.rate_vsn_vsn_private_0_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.feature_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.feature_vfw_vfw_private_1_port
+      vfwvsink0.vfw.abstract_vfw.disk.usage_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.usage_vfw
+      vpkg0.vpg.abstract_vpg.vcpus_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.vcpus_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.device.allocation_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.allocation_vfw
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.attachment_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.attachment_vsn_vsn_private_0_port
+      vfwvsink0.vsn.abstract_vsn.memory_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.memory_vsn
+      vfwvsink0.vfw.abstract_vfw.os_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.os_vfw
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.feature_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.feature_vsn_vsn_private_0_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.outpoing.packets_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.outpoing.packets_vpg_vpg_private_1_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.binding_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.binding_vfw_vfw_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.incoming.packets.rate_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.incoming.packets.rate_vsn_vsn_private_1_port
+      vfwvsink0.vfw.abstract_vfw.disk.device.write.requests_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.write.requests_vfw
+      vpkg0.vpg.abstract_vpg.cpu_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.cpu_vpg
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.outgoing.packets.rate_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.outgoing.packets.rate_vsn_vsn_private_1_port
+      vfwvsink0.vsn.abstract_vsn.disk.device.write.bytes_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.write.bytes_vsn
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.feature_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.feature_vfw_vfw_private_2_port
+      vfwvsink0.vsn.abstract_vsn.host_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.host_vsn
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.attachment_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.attachment_vpg_vpg_private_1_port
+      vfwvsink0.vfw.abstract_vfw.disk.device.write.bytes_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.write.bytes_vfw
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_2_port
+      vfwvsink0.vfw.abstract_vfw.memory.resident_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.memory.resident_vfw
+      vfwvsink0.vsn.abstract_vsn.vcpus_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.vcpus_vsn
+      vfwvsink0.vfw.abstract_vfw.disk.read.requests_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.read.requests_vfw
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.incoming.packets_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.incoming.packets_vpg_vpg_private_1_port
+      vfwvsink0.unprotected_private_network.link:
+      - vfwvsink0
+      - unprotected_private_network.link
+      vpkg0.vpg.abstract_vpg.disk.device.latency_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.latency_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.write.requests_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.write.requests_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.capacity_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.capacity_vsn
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_2_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_2_port
+      vfwvsink0.vsn.abstract_vsn.scalable_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.scalable_vsn
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.incoming.bytes_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.incoming.bytes_vsn_vsn_private_1_port
+      vfwvsink0.vfw.abstract_vfw.disk.write.bytes_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.write.bytes_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.device.read.bytes.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.read.bytes.rate_vfw
+      vpkg0.vpg.abstract_vpg.disk.write.bytes_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.write.bytes_vpg
+      vpkg0.vpg.abstract_vpg.disk.device.write.bytes.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.write.bytes.rate_vpg
+      vpkg0.vpg.abstract_vpg.memory.usage_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.memory.usage_vpg
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.outpoing.packets_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.outpoing.packets_vsn_vsn_private_1_port
+      vfwvsink0.vsn.abstract_vsn.memory.usage_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.memory.usage_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.device.read.bytes.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.read.bytes.rate_vsn
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.incoming.bytes_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.incoming.bytes_vsn_vsn_private_0_port
+      vfwvsink0.vfw.abstract_vfw.disk.ephemeral.size_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.ephemeral.size_vfw
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.attachment_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.attachment_vfw_vfw_private_0_port
+      vfwvsink0.vsn.abstract_vsn.binding_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.binding_vsn
+      vfwvsink0.vfw.abstract_vfw.cpu.delta_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.cpu.delta_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.read.bytes.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.read.bytes.rate_vsn
+      vfwvsink0.vfw.abstract_vfw.disk.latency_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.latency_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.device.latency_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.latency_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.latency_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.latency_vsn
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.outgoing.packets.rate_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.outgoing.packets.rate_vpg_vpg_private_0_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.incoming.packets.rate_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.incoming.packets.rate_vpg_vpg_private_1_port
+      vfwvsink0.vsn.abstract_vsn.instance_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.instance_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.device.allocation_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.allocation_vsn
+      vpkg0.vpg.abstract_vpg.disk.allocation_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.allocation_vpg
+      vfwvsink0.vsn.abstract_vsn.disk.read.bytes_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.read.bytes_vsn
+      vpkg0.vpg.abstract_vpg.disk.device.write.requests_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.write.requests_vpg
+      vpkg0.vpg.abstract_vpg.disk.device.write.requests.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.write.requests.rate_vpg
+      vpkg0.vpg.abstract_vpg.disk.device.read.bytes_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.read.bytes_vpg
+      vpkg0.vpg.abstract_vpg.disk.device.read.requests_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.read.requests_vpg
+      vfwvsink0.vsn.abstract_vsn.cpu_util_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.cpu_util_vsn
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.incoming.packets_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.incoming.packets_vpg_vpg_private_0_port
+      vpkg0.vpg.abstract_vpg.disk.device.read.bytes.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.read.bytes.rate_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.read.bytes_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.read.bytes_vfw
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.outgoing.packets.rate_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.outgoing.packets.rate_vsn_vsn_private_0_port
+      vpkg0.vpg.abstract_vpg.disk.read.requests_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.read.requests_vpg
+      vpkg0.vpg.abstract_vpg.disk.root.size_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.root.size_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.device.write.requests.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.write.requests.rate_vfw
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_0_port
+      vfwvsink0.vfw.abstract_vfw.cpu_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.cpu_vfw
+      vpkg0.vpg.abstract_vpg.cpu_util_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.cpu_util_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.write.bytes.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.write.bytes.rate_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.ephemeral.size_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.ephemeral.size_vsn
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.outgoing.bytes_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.outgoing.bytes_vsn_vsn_private_0_port
+      vfwvsink0.vsn.abstract_vsn.disk.root.size_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.root.size_vsn
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.binding_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.binding_vfw_vfw_private_0_port
+      vpkg0.vpg.abstract_vpg.scalable_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.scalable_vpg
+      vpkg0.vpg.abstract_vpg.disk.usage_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.usage_vpg
+      vfwvsink0.unprotected_private_network.end_point:
+      - vfwvsink0
+      - unprotected_private_network.end_point
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.incoming.bytes.rate_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.incoming.bytes.rate_vsn_vsn_private_1_port
+      vfwvsink0.vfw.abstract_vfw.vcpus_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.vcpus_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.device.read.requests.rate_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.read.requests.rate_vfw
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.outpoing.packets_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.outpoing.packets_vsn_vsn_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.attachment_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.attachment_vfw_vfw_private_2_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.binding_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.binding_vpg_vpg_private_0_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_1_port
+      vpkg0.vpg.abstract_vpg.disk.write.bytes.rate_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.write.bytes.rate_vpg
+      vfwvsink0.protected_private_network.feature:
+      - vfwvsink0
+      - protected_private_network.feature
+      vpkg0.vpg.abstract_vpg.disk.capacity_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.capacity_vpg
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.outgoing.bytes_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.outgoing.bytes_vpg_vpg_private_1_port
+      vfwvsink0.protected_private_network.attachment:
+      - vfwvsink0
+      - protected_private_network.attachment
+      vfwvsink0.vfw.abstract_vfw.disk.device.read.bytes_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.read.bytes_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.capacity_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.capacity_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.write.bytes_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.write.bytes_vsn
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.feature_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.feature_vfw_vfw_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.outgoing.bytes.rate_vfw_vfw_private_2_port
+      vfwvsink0.vfw.abstract_vfw.memory.usage_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.memory.usage_vfw
+      vfwvsink0.vfw.abstract_vfw.disk.root.size_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.root.size_vfw
+      vfwvsink0.vsn.abstract_vsn.feature_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.feature_vsn
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_2_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.incoming.bytes.rate_vfw_vfw_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.feature_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.feature_vsn_vsn_private_1_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.incoming.packets_vfw_vfw_private_1_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.incoming.packets.rate_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.incoming.packets.rate_vpg_vpg_private_0_port
+      vfwvsink0.vfw.abstract_vfw.disk.device.iops_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.iops_vfw
+      vpkg0.vpg.abstract_vpg.disk.device.iops_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.iops_vpg
+      vpkg0.vpg.abstract_vpg.endpoint_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.endpoint_vpg
+      vfwvsink0.vsn.abstract_vsn.disk.device.write.requests_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.write.requests_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.read.requests_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.read.requests_vsn
+      vfwvsink0.vsn.abstract_vsn.endpoint_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.endpoint_vsn
+      vfwvsink0.vfw.abstract_vfw.cpu_util_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.cpu_util_vfw
+      vpkg0.vpg.abstract_vpg.os_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.os_vpg
+      vfwvsink0.vsn.abstract_vsn.disk.device.usage_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.usage_vsn
+      vfwvsink0.unprotected_private_network.attachment:
+      - vfwvsink0
+      - unprotected_private_network.attachment
+      vpkg0.vpg.abstract_vpg.disk.device.usage_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.usage_vpg
+      vfwvsink0.vfw.abstract_vfw.memory_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.memory_vfw
+      vpkg0.vpg.abstract_vpg.disk.latency_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.latency_vpg
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.outgoing.bytes_vfw_vfw_private_2_port
+      vfwvsink0.vsn.abstract_vsn.disk.device.read.requests_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.read.requests_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.write.requests.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.write.requests.rate_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.device.capacity_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.capacity_vsn
+      vpkg0.vpg.abstract_vpg.disk.ephemeral.size_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.ephemeral.size_vpg
+      vpkg0.vpg.abstract_vpg.disk.iops_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.iops_vpg
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.incoming.bytes_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.incoming.bytes_vpg_vpg_private_1_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.network.incoming.bytes.rate_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.network.incoming.bytes.rate_vpg_vpg_private_1_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.incoming.packets_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.incoming.packets_vsn_vsn_private_0_port
+      vpkg0.vpg.abstract_vpg.feature_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.feature_vpg
+      vpkg0.vpg.abstract_vpg.instance_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.instance_vpg
+      vfwvsink0.protected_private_network.end_point:
+      - vfwvsink0
+      - protected_private_network.end_point
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.network.incoming.bytes.rate_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.network.incoming.bytes.rate_vsn_vsn_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_2_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.feature_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.feature_vpg_vpg_private_0_port
+      vfwvsink0.vfw.abstract_vfw.host_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.host_vfw
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.binding_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.binding_vsn_vsn_private_1_port
+      vpkg0.vpg.abstract_vpg.disk.device.capacity_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.capacity_vpg
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.network.outgoing.bytes.rate_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.network.outgoing.bytes.rate_vsn_vsn_private_1_port
+      vfwvsink0.vsn.abstract_vsn.disk.device.write.requests.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.write.requests.rate_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.device.write.bytes.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.write.bytes.rate_vsn
+      vpkg0.vpg.abstract_vpg.disk.write.requests_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.write.requests_vpg
+      vfwvsink0.vsn.abstract_vsn.disk.allocation_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.allocation_vsn
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_1_port
+      vpkg0.vpg.abstract_vpg.cpu.delta_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.cpu.delta_vpg
+      vfwvsink0.vfw.abstract_vfw.disk.device.latency_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.latency_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.device.read.requests.rate_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.read.requests.rate_vsn
+      vpkg0.vpg.abstract_vpg.memory_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.memory_vpg
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.incoming.packets.rate_vfw_vfw_private_0_port
+      vfwvsink0.vsn.abstract_vsn.disk.device.iops_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.iops_vsn
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.outpoing.packets_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.outpoing.packets_vpg_vpg_private_0_port
+      vfwvsink0.vsn.abstract_vsn.disk.usage_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.usage_vsn
+      vfwvsink0.vfw.abstract_vfw.disk.device.capacity_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.capacity_vfw
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.network.outgoing.bytes.rate_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.network.outgoing.bytes.rate_vpg_vpg_private_0_port
+      vpkg0.vpg.abstract_vpg.disk.device.write.bytes_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.write.bytes_vpg
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_2_port
+      vfwvsink0.vfw.abstract_vfw.feature_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.feature_vfw
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.outgoing.packets.rate_vfw_vfw_private_0_port
+      vfwvsink0.vsn.abstract_vsn.os_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.os_vsn
+      vfwvsink0.vfw.abstract_vfw.disk.device.usage_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.device.usage_vfw
+      vfwvsink0.vsn.abstract_vsn.disk.iops_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.iops_vsn
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.network.incoming.bytes_vfw_vfw_private_0_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.attachment_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.attachment_vpg_vpg_private_0_port
+      vpkg0.vpg.abstract_vpg.memory.resident_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.memory.resident_vpg
+      vfwvsink0.vfw.abstract_vfw.scalable_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.scalable_vfw
+      vfwvsink0.vsn.abstract_vsn.cpu.delta_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.cpu.delta_vsn
+      vpkg0.vpg.abstract_vpg.disk.device.allocation_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.device.allocation_vpg
+      vfwvsink0.protected_private_network.link:
+      - vfwvsink0
+      - protected_private_network.link
+      vfwvsink0.vfw.abstract_vfw.disk.allocation_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.disk.allocation_vfw
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.network.outpoing.packets_vfw_vfw_private_1_port
+      vpkg0.vpg.abstract_vpg.binding_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.binding_vpg
+      vpkg0.vpg.abstract_vpg.disk.read.bytes_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.disk.read.bytes_vpg
+      vfwvsink0.vsn.abstract_vsn.disk.device.read.bytes_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.device.read.bytes_vsn
+      vfwvsink0.vsn.abstract_vsn.disk.write.requests_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.disk.write.requests_vsn
+      vfwvsink0.vfw.abstract_vfw.endpoint_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.endpoint_vfw
+    requirements:
+      vfwvsink0.vfw.abstract_vfw.local_storage_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.local_storage_vfw
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.dependency_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.dependency_vfw_vfw_private_1_port
+      vpkg0.vpg.abstract_vpg.local_storage_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.local_storage_vpg
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.dependency_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.dependency_vpg_vpg_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.dependency_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.dependency_vsn_vsn_private_1_port
+      vfwvsink0.vsn_vsn_private_1_port.abstract_vsn.link_vsn_vsn_private_1_port:
+      - vfwvsink0
+      - vsn_vsn_private_1_port.abstract_vsn.link_vsn_vsn_private_1_port
+      vpkg0.vpg_vpg_private_1_port.abstract_vpg.link_vpg_vpg_private_1_port:
+      - vpkg0
+      - vpg_vpg_private_1_port.abstract_vpg.link_vpg_vpg_private_1_port
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.link_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.link_vfw_vfw_private_0_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.link_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.link_vsn_vsn_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.link_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.link_vfw_vfw_private_2_port
+      vfwvsink0.vfw.abstract_vfw.dependency_vfw:
+      - vfwvsink0
+      - vfw.abstract_vfw.dependency_vfw
+      vfwvsink0.vsn.abstract_vsn.local_storage_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.local_storage_vsn
+      vfwvsink0.unprotected_private_network.dependency:
+      - vfwvsink0
+      - unprotected_private_network.dependency
+      vfwvsink0.vfw_vfw_private_0_port.abstract_vfw.dependency_vfw_vfw_private_0_port:
+      - vfwvsink0
+      - vfw_vfw_private_0_port.abstract_vfw.dependency_vfw_vfw_private_0_port
+      vfwvsink0.vsn.abstract_vsn.dependency_vsn:
+      - vfwvsink0
+      - vsn.abstract_vsn.dependency_vsn
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.dependency_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.dependency_vpg_vpg_private_0_port
+      vfwvsink0.vsn_vsn_private_0_port.abstract_vsn.dependency_vsn_vsn_private_0_port:
+      - vfwvsink0
+      - vsn_vsn_private_0_port.abstract_vsn.dependency_vsn_vsn_private_0_port
+      vfwvsink0.vfw_vfw_private_2_port.abstract_vfw.dependency_vfw_vfw_private_2_port:
+      - vfwvsink0
+      - vfw_vfw_private_2_port.abstract_vfw.dependency_vfw_vfw_private_2_port
+      vfwvsink0.vfw_vfw_private_1_port.abstract_vfw.link_vfw_vfw_private_1_port:
+      - vfwvsink0
+      - vfw_vfw_private_1_port.abstract_vfw.link_vfw_vfw_private_1_port
+      vpkg0.vpg_vpg_private_0_port.abstract_vpg.link_vpg_vpg_private_0_port:
+      - vpkg0
+      - vpg_vpg_private_0_port.abstract_vpg.link_vpg_vpg_private_0_port
+      vpkg0.vpg.abstract_vpg.dependency_vpg:
+      - vpkg0
+      - vpg.abstract_vpg.dependency_vpg
+      vfwvsink0.protected_private_network.dependency:
+      - vfwvsink0
+      - protected_private_network.dependency