/
ONAP Beijing: Understanding the vFWCL use-case mechanism

ONAP Beijing: Understanding the vFWCL use-case mechanism

Author: Badr Eddine Aouled Yahia - Orange

Reviewed by:Jose Manuel Sanchez Vilchez, Christian Destré - Orange

This page provides a deep investigation on the mechanisms of deployment and closed loop for the vFW use-case on ONAP Beijing release.

Sections

  1. General overview
    1. vFWCL service overview
    2. Service deployment in ONAP
    3. SO overview
    4. Closed loop
  2. vFW deployment mechanism
    1. Service deployment overview
    2. Service instance creation
    3. VNF creation
    4. VF-module creation
    5. Analysis
  3. vFW closed loop mechanism
    1. vFW VES measurements reporting
    2. Closed loop execution mechanism
    3. Analysis


General overview

vFWCL service overview

The vFW service is composed of the following components:

vPKG VNF:

–Packet generator: sends periodically different volumes of traffic to the sink through the firewall (vFw)

vFWSNK VNF:

–Firewall: reports the volume of traffic passing through to the DCAE collector (VES collector). The vFW has no real firewalling functionality.

–Traffic sink: provides a graphical representation (bar charts) showing the volume of incoming traffic.


The vFW close loop scenario consists in applying policy rules that aim to re-adjust the traffic volume when high threshold (700 packets/10s) or low threshold (300 packets/10s) are crossed. In fact, the DCAE collects events from the vFW, applies analytics (Threshold Crossing Analytics: TCA microservice) and publishes events to DMaap. When detecting the triggering event, the policy engine executes the operational policy via the APP-C that modifies vPKG application configurations in order to adjust the traffic volume to 500 packet per 10 seconds.

Service deployment in ONAP

After onboarding and distributing a service, ONAP execution-time provides tools and processes to deploy a service.

From an ONAP user perspective, the operation of service deployment in ONAP consists in an ordered set of actions performed through scripts or using the VID portal to trigger instantiation in SO.

In general, a service in ONAP is the composition of several elements that consists in VNFs, Networks, VF-modules and volume groups.

In order to fully deploy a service via VID portal, three levels of instantiation are identified:

  • Service instantiation
  • VNF and/or network instantiation
  • VF-module and/or volume group instantiation

Each step of instantiation corresponds to a set of orchestration tasks performed by the SO component. In fact, when recieving a request to create a service instance, the SO selects a process that defines a workflow of actions in order to accomplish the service instantiation. The process includes series of tasks to be executed by ONAP execution-time components.

SO overview


Service deployment involves the following main SO components:

  • API Handler
    - The SO exposes a restful interface to northbound clients (VID in this case) that handles service-level and infrastrcuture requests (APIs for service, vnf, network, vf-module ... creation/deletion ...).
    - When receiving a request, the API Handler stores a record in the request DB and maps the requests with the appropriate orchestration reciepe (a BPMN flow) based on request attributes (service-type, action ...) or based on service model and action. And then, it forwards data to BPMN flows.
  • BPMN Execution Engine
    - This component is responsible for execution BPMN flows. It sequences orchestration tasks and allows interaction with other ONAP components in order to update the inventory, manages cloud resources via openstack adaptors and configures network resources via SDN-C adapter.
  • Resource/Controller adapters
    These interfaces allow the SO to interact with infrastructure and ONAP controllers. This layer hides infrastructure complex details and supports the execution of BPMN tasks by providing SOAP and REST APIs.

Closed loop

The closed loop concept in ONAP allows an automatic recovery of faults reported by traps or alarms and provides automated capacity management when performance thresholds are crossed.It uses feedbacks to control and optimize the behavior of monitored elements in order to automatically respond to service conditions without human intervention.

The execution of a closed loop involves several components. In fact, the DCAE is responsible for collecting and analysing collected data in order to publish events to DMaap. The policy engine allows to trigger a response according to configuration policies when detecting critical events. Finally, an operational policy is executed by ONAP orchestrator or controllers.

The closed loop design is provided by CLAMP that allows the creation and distribution of a CL workflow.

vFW deployment mechanism

vFW service deployment overview

After design and distribution stages, the vFW service is ready to be deployed.Three main user actions are performed in VID portal in order to fully deploy the service. These actions correspond to three HTTP requests sent to SO.

  1. Instantiate service ↔ Service instance creation request
  2. Add node ↔ VNF instance creation request
  3. Add VF-module ↔ VF-module creation request

From a high level perspective, each VID request towards SO triggers the execution of an orchestration workflow. In fact, When receiving a request, the API Handler stores an orchestration request in request_db and selects a BPMN workflow from Camunda_db to be executed by the orchestration engine (Camunda). The workflow specifies a sequence of orchestration tasks to be performed by ONAP execution-time components. The process includes recursive calls to other orchestration sub-processes.

To each BPMN corresponds a groovy script executed by the camunda engine that allows to perform actions or invoke other ONAP components to execute an action via Resource and Controller adapters.

Service instance creation

In the VID portal, the demo user deploys the service:

The user specifies the input data and confirms:

User action in VID portal:























The user action corresponds to an HTTP POST request from VID towards SO to trigger service instance creation: POST /ecomp/mso/infra/serviceInstances/v6

Http POST request: Json payload for service instance creation
POST /ecomp/mso/infra/serviceInstances/v6 HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: dffdfdbb-b42e-43b6-b2e0-199181141abd
Content-Type: application/json
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

{  
   "requestDetails":{  
      "requestInfo":{  
         "instanceName":"vfw_svc_1607",
         "source":"VID",
         "suppressRollback":false,
         "requestorId":"demo"
      },
      "modelInfo":{  
         "modelType":"service",
         "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
         "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d",
         "modelName":"vfw_svc",
         "modelVersion":"2.0"
      },
      "requestParameters":{  
         "userParams":[  

         ],
         "subscriptionServiceType":"vFWCL",
         "aLaCarte":true
      },
      "subscriberInfo":{  
         "globalSubscriberId":"Demonstration",
         "subscriberName":"Demonstration"
      },
      "project":{  
         "projectName":"Project-Demonstration"
      },
      "owningEntity":{  
         "owningEntityId":"75c646bf-6b09-4759-b65d-ae366a40da91",
         "owningEntityName":"OE-Demonstration"
      }
   }
}
SO response
HTTP/1.1 202 Accepted

{"requestReferences":{"instanceId":"d39d0833-ea8a-45be-8863-76715697cdb3","requestId":"08390a82-88f8-429f-9dd9-fa673bf5ed38"}}


The VID request triggers the execution of CreateGenericALaCarteServiceInstance BPMN process.

This BPMN process calls respectively two sub-processes: DecomposeService and DoCreateServiceInstance

the DoCerateServiceInstance BPMN process includes GenericPutService process that allows to put service instance in the inventory via HTTP PUT request sent by Camunda engine.

PUT /business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}

Exchanges between SO and A&AI components are encrypted.

We can verify that service is created in the inventory: GET https://<aai1_ip>:8443/aai/v13//business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL/service-instances/service-instance/ce035b11-77f5-41ff-a6e8-e38fc8d4ccd4

The VID follows the service orchestration request status by sending GET requests to SO:

Get orchestration request status
GET /ecomp/mso/infra/orchestrationRequests/v6/08390a82-88f8-429f-9dd9-fa673bf5ed38 HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: 2ea804d4-9d5f-4ece-bf1e-95bc963c22ae
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
SO response
HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
X-Powered-By: Undertow/1
Server: WildFly/10
Pragma: no-cache
Date: Thu, 19 Jul 2018 14:50:05 GMT
Connection: keep-alive
Content-Type: application/json
Content-Length: 1133

{  
   "request":{  
      "requestId":"08390a82-88f8-429f-9dd9-fa673bf5ed38",
      "startTime":"Thu, 19 Jul 2018 14:49:55 GMT",
      "requestScope":"service",
      "requestType":"createInstance",
      "requestDetails":{  
         "modelInfo":{  
            "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
            "modelType":"service",
            "modelName":"vfw_svc",
            "modelVersion":"2.0",
            "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d"
         },
         "requestInfo":{  
            "source":"VID",
            "instanceName":"vfw_svc_1607",
            "suppressRollback":false,
            "requestorId":"demo"
         },
         "subscriberInfo":{  
            "globalSubscriberId":"Demonstration",
            "subscriberName":"Demonstration"
         },
         "requestParameters":{  
            "alaCarte":true,
            "subscriptionServiceType":"vFWCL",
            "aLaCarte":true
         },
         "project":{  
            "projectName":"Project-Demonstration"
         },
         "owningEntity":{  
            "owningEntityId":"75c646bf-6b09-4759-b65d-ae366a40da91",
            "owningEntityName":"OE-Demonstration"
         }
      },
      "instanceReferences":{  
         "serviceInstanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
         "serviceInstanceName":"vfw_svc_1607",
         "requestorId":"demo"
      },
      "requestStatus":{  
         "requestState":"COMPLETE",
         "statusMessage":"Service Instance was created successfully.",
         "percentProgress":100,
         "finishTime":"Thu, 19 Jul 2018 14:49:56 GMT"
      }
   }
}

Mechanism analysis will be explained only for the vFWSNK vnf and its module

The vFW service includes two vnfs, the mechanism is the same for the two vnfs and their vf-module. So we will explain it for the vFWSNK vnf only.

VNF creation (vFWSNK vnf)

In the VID portal, the user adds a VNF node instance:

The user action corresponds to an HTTP POST request from VID towards SO to trigger vnf instance creation: POST /ecomp/mso/infra/serviceInstances/v6/{service_instance_id}/vnfs

Http POST request: Json payload for vnf instance creation
POST /ecomp/mso/infra/serviceInstances/v6/d39d0833-ea8a-45be-8863-76715697cdb3/vnfs HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: 41dc6f28-b847-4190-9573-a762cb77ab30
Content-Type: application/json
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 1018

{  
   "requestDetails":{  
      "requestInfo":{  
         "instanceName":"vfw-vf",
         "source":"VID",
         "suppressRollback":false,
         "requestorId":"demo",
         "productFamilyId":"8eba27fe-89eb-4c32-9ee6-aa5428c7d962"
      },
      "modelInfo":{  
         "modelType":"vnf",
         "modelInvariantId":"c7582c77-5a11-471c-a24f-5347ec811cdd",
         "modelVersionId":"db0fbb27-fd0d-40eb-8491-0f4a48adaefe",
         "modelName":"vsp_vfwsnk_1607",
         "modelVersion":"2.0",
         "modelCustomizationId":"5365f464-3e2e-40be-9dc2-480c916bcf10",
         "modelCustomizationName":"vsp_vfwsnk_1607 0"
      },
      "requestParameters":{  
         "userParams":[  

         ]
      },
      "cloudConfiguration":{  
         "lcpCloudRegionId":"fr2",
         "tenantId":"324b90de6e9a4ad88e93a100c2cedd5d"
      },
      "lineOfBusiness":{  
         "lineOfBusinessName":"LOB-Demonstration"
      },
      "platform":{  
         "platformName":"Platform-Demonstration"
      },
      "relatedInstanceList":[  
         {  
            "relatedInstance":{  
               "instanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
               "modelInfo":{  
                  "modelType":"service",
                  "modelName":"vfw_svc",
                  "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
                  "modelVersion":"2.0",
                  "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d"
               }
            }
         }
      ]
   }
}
SO response
HTTP/1.1 202 Accepted

{"requestReferences":{"instanceId":"415932c3-f295-462a-b130-bdf5f33ced06","requestId":"e4c03a55-5d64-4867-9177-ee2cf9146dc4"}}

The VID request triggers the execution of CreateVnfInfra BPMN process:

The main actions of this process are defined in the sub process DoCreateVnf.

As specified in this sub process building blocks, the VNF instance creation invokes the following main actions:
•Populate A&AI with a VNF instance data: Create (Put) Generic Vnf (GenericPutVnf sub-process)
•Call SDN-C adapter VNF topology assign: Call SDNC Adapter VNF Topology Assign
•Call SDN-C adapter VNF topology activate: Call SDNC Adapter VNF Topology Activate
•Update orchestration status to active in A&AI: Update AAI Orchestration status to Active

As SDNC interaction is not enabled, only the first action (Create Generic Vnf) is performed.

GenericPutVnf sub-process populates the inventory with the vnf instance data via Http PUT request (PUT /network/generic-vnfs/generic-vnf/{vnf-id}) and establishes the relation between the vnf instance and service instance.

We can verify that vnf instances and relationship with service instance were created in the inventory: https://<aai1_ip>:8443/aai/v13/network/generic-vnfs/generic-vnf/e1a9ac1b-b9a0-4424-8659-69426c8bfdc8

The VID follows the vnf orchestration request status by sending GET requests to SO:

Get orchestration request status
GET /ecomp/mso/infra/orchestrationRequests/v6/cfeb170d-7b0f-44db-81e3-ff440fce43ea HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: 0eaa4f8f-b6f0-4183-8f6b-bb1ba847efc8
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-aliv
SO response
HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
X-Powered-By: Undertow/1
Server: WildFly/10
Pragma: no-cache
Date: Thu, 19 Jul 2018 14:50:50 GMT
Connection: keep-alive
Content-Type: application/json
Content-Length: 1511

{  
   "request":{  
      "requestId":"cfeb170d-7b0f-44db-81e3-ff440fce43ea",
      "startTime":"Thu, 19 Jul 2018 14:50:40 GMT",
      "requestScope":"vnf",
      "requestType":"createInstance",
      "requestDetails":{  
         "modelInfo":{  
            "modelCustomizationName":"vsp_vfwsnk_1607 0",
            "modelInvariantId":"c7582c77-5a11-471c-a24f-5347ec811cdd",
            "modelType":"vnf",
            "modelName":"vsp_vfwsnk_1607",
            "modelVersion":"2.0",
            "modelVersionId":"db0fbb27-fd0d-40eb-8491-0f4a48adaefe",
            "modelCustomizationId":"5365f464-3e2e-40be-9dc2-480c916bcf10"
         },
         "requestInfo":{  
            "productFamilyId":"8eba27fe-89eb-4c32-9ee6-aa5428c7d962",
            "source":"VID",
            "instanceName":"vfw-vf",
            "suppressRollback":false,
            "requestorId":"demo"
         },
         "relatedInstanceList":[  
            {  
               "relatedInstance":{  
                  "instanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
                  "modelInfo":{  
                     "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
                     "modelType":"service",
                     "modelName":"vfw_svc",
                     "modelVersion":"2.0",
                     "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d"
                  }
               }
            }
         ],
         "cloudConfiguration":{  
            "tenantId":"324b90de6e9a4ad88e93a100c2cedd5d",
            "lcpCloudRegionId":"fr2"
         },
         "requestParameters":{  

         },
         "platform":{  
            "platformName":"Platform-Demonstration"
         },
         "lineOfBusiness":{  
            "lineOfBusinessName":"LOB-Demonstration"
         }
      },
      "instanceReferences":{  
         "serviceInstanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
         "vnfInstanceId":"e1a9ac1b-b9a0-4424-8659-69426c8bfdc8",
         "vnfInstanceName":"vfw-vf",
         "requestorId":"demo"
      },
      "requestStatus":{  
         "requestState":"COMPLETE",
         "statusMessage":"Vnf has been created successfully.",
         "percentProgress":100,
         "finishTime":"Thu, 19 Jul 2018 14:50:41 GMT"
      }
   }
}

VF-module creation (vFWSNK VF-module)

In the vFW use-case, before creating the vf-module two steps should be performed: Create vnf profile (in sdnc portal) and preload sdnc with vnf data (using sdnc api http://<sdnc_ip>:8282/apidoc/explorer/index.html ).

In the VID portal, user demo adds then vf-module:

The VID triggers vf-module creation via Http POST request towards SO: POST /ecomp/mso/infra/serviceInstances/v6/{service_instance_id}/vnfs/{vnf_id}/vfModules

Http Post request: Json payload for vf-module creation (vFWSNK module)
POST /ecomp/mso/infra/serviceInstances/v6/d39d0833-ea8a-45be-8863-76715697cdb3/vnfs/e1a9ac1b-b9a0-4424-8659-69426c8bfdc8/vfModules HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: 329b557c-3e3f-42c6-8b41-241a9bc0eb27
Content-Type: application/json
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 1272

{  
   "requestDetails":{  
      "requestInfo":{  
         "instanceName":"vfw-vf-module",
         "source":"VID",
         "suppressRollback":false,
         "requestorId":"demo"
      },
      "modelInfo":{  
         "modelType":"vfModule",
         "modelInvariantId":"08fa9f0d-4fb5-41ae-8cc3-8282333ff6aa",
         "modelVersionId":"f8d43f3f-8189-4eac-a122-b5a5e06ad3ab",
         "modelName":"VspVfwsnk1607..base_vfw..module-0",
         "modelVersion":"2",
         "modelCustomizationId":"bb084cb1-e8eb-4030-a2b7-931a3ae1c91f",
         "modelCustomizationName":"VspVfwsnk1607..base_vfw..module-0"
      },
      "requestParameters":{  
         "usePreload":true
      },
      "cloudConfiguration":{  
         "lcpCloudRegionId":"fr2",
         "tenantId":"324b90de6e9a4ad88e93a100c2cedd5d"
      },
      "relatedInstanceList":[  
         {  
            "relatedInstance":{  
               "instanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
               "modelInfo":{  
                  "modelType":"service",
                  "modelName":"vfw_svc",
                  "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
                  "modelVersion":"2.0",
                  "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d"
               }
            }
         },
         {  
            "relatedInstance":{  
               "instanceId":"e1a9ac1b-b9a0-4424-8659-69426c8bfdc8",
               "modelInfo":{  
                  "modelType":"vnf",
                  "modelName":"vsp_vfwsnk_1607",
                  "modelInvariantId":"c7582c77-5a11-471c-a24f-5347ec811cdd",
                  "modelVersion":"2.0",
                  "modelVersionId":"db0fbb27-fd0d-40eb-8491-0f4a48adaefe",
                  "modelCustomizationId":"5365f464-3e2e-40be-9dc2-480c916bcf10",
                  "modelCustomizationName":"vsp_vfwsnk_1607 0"
               }
            }
         }
      ]
   }
}
SO response
HTTP/1.1 202 Accepted
{"requestReferences":{"instanceId":"be0ae48e-029a-4efc-af46-d11bcf58c403","requestId":"7b1b5758-d274-4305-aefc-289f1e614d7d"}}

The API handler selects a BPMN workflow called CreateVfModuleInfra.

In addition to vf-module creation, this BPMN process could perform scale out operation for a vf-module instance but it is not the case for the vFW.

The DoCreateVfModule is the main subprocess that defines steps for creating the vf-module. It includes the following actions that are performed in the vFW use-case deployment:

  1. Query AAI for orchestration status

  2. CreateAAIVfModule: subprocess that creates a vf-module instance object in the inventory:HTTP PUT /network/generic-vnfs/generic-vnf/{vnf-id}/vf-modules/vf-module/{vf-module-id}

We can verify the vf-module instance in the inventory with GET request.

GET https://<aai1_ip>:8443/aai/v13/network/generic-vnfs/generic-vnf/e1a9ac1b-b9a0-4424-8659-69426c8bfdc8/vf-modules/

3. Call SDNC adapter: Vf-module topology assign

To perform this action, Camunda engine calls SDNC adapter via Http request:POST /restconf/operations/VNF-API:vnf-topology-operation

SO Http POST request towards SDNC to trigger vf-module topology assign
<?xml version="1.0" encoding="UTF-8"?>
<input xmlns="org:onap:sdnctl:vnf">
   <sdnc-request-header>
      <svc-request-id>7b1b5758-d274-4305-aefc-289f1e614d7d-1532011988473</svc-request-id>
      <svc-action>assign</svc-action>
      <svc-notification-url>http://c1.vm1.mso.simpledemo.openecomp.org:8080/adapters/rest/SDNCNotify</svc-notification-url>
   </sdnc-request-header>
   <request-information>
      <request-id>7b1b5758-d274-4305-aefc-289f1e614d7d</request-id>
      <request-action>VNFActivateRequest</request-action>
      <source>VID</source>
      <notification-url />
   </request-information>
   <service-information>
      <service-id>null</service-id>
      <service-type>null</service-type>
      <service-instance-id>d39d0833-ea8a-45be-8863-76715697cdb3</service-instance-id>
      <subscriber-name>notsurewecare</subscriber-name>
   </service-information>
   <vnf-request-information>
      <vnf-id>be0ae48e-029a-4efc-af46-d11bcf58c403</vnf-id>
      <vnf-type>VspVfwsnk1607..base_vfw..module-0</vnf-type>
      <vnf-name>vfw-vf-module</vnf-name>
      <generic-vnf-id>e1a9ac1b-b9a0-4424-8659-69426c8bfdc8</generic-vnf-id>
      <generic-vnf-name>vfw-vf</generic-vnf-name>
      <generic-vnf-type>vfw_svc/vsp_vfwsnk_1607 0</generic-vnf-type>
      <aic-cloud-region>fr2</aic-cloud-region>
      <tenant>324b90de6e9a4ad88e93a100c2cedd5d</tenant>
      <use-preload>Y</use-preload>
   </vnf-request-information>
</input>

This request triggers the execution of a set of Directed Graphs

Git repository of VNF-API DG json: https://git.onap.org/sdnc/oam/tree/platform-logic/vnfapi/src/main/json?h=beijing

You can see Directed graphs by importing Json (to clipboard) in the SDNC- DG dashboard http://<sdnc_ip>:3000

    • vnf-topology-operation DG

A DG implements a method that initiates a RPC when executed.

By parsing the request body fields, this DG calls a specific second DG based on the use-preload value

This condition figures out in the POST request body with Y as value as  we have manually preloaded SDNC with vnf data.

This DG calls a second called vnf-topology-preload-operation

    • vnf-topology-preload-operation DG


    • vnf-topology-assign DG

This DG vnf-topology-assign includes a sequence of nodes that execute respectively these actions:
1.Return failure if:
a)VF-module is already assigned
b)The VF-module does not exist in A&AI
2.Call vnf-topology-assign-vfmodule DG: this DG constructs a data structure called service-data to be stored in its internal DB and potentially used to perform other actions
3.Establish relationships between vf-module and networks in A&AI (if there are networks specified in service data)
4.Update the vf-module orchestration status in A&AI (value = PendingCreate)
5.Update order status in service data in SDN-C

    • vnf-topology-assign-vfmodule 

This DG begins with constructing service-data structure by concatenating preload input and vnf-topology-operation input

Then the service-data is consolidated by information related to l3-networks (id, name, neutron network id, contrail network fqdn, ipv4/6 subnets)

The DG logic:

For network in preload data
•See if there is a network with the same role in the input vnf-topology-operation
→  YES, and this network exists in AAI → Set these information in service-data
→ NO --> Use preload data to be set in service-data

Summary of the vf-module topology assign step

The SO request towards SDN-C (POST /restconf/operations/VNF-API:vnf-topology-operation) triggers the execution of a sequence of Directed graphs.

The main goals of this operation are:
•Construct the service-data structure in the SDN-C
•Establish relationship between VF-module and networks using service-data
•Update the vf-module orchestration status in the inventory
•Update the order status in service-data

In the vFWCL use-case, no networks were defined in the preload data or in vnf-topology-operation input

  • The SDN-C actions at this stage are limited to updates of vf-module orchestration status in AAI

→ Communications with AAI are done through sdn-c aai-service plugin
→ No relationships were established between vf-module and l3-networks in the vFWCL use-case.

4.Update vf-module orchestration-status in the inventory to assigned

5. Query SDNC for vf-module topology

In order to get vf-module topology, the SO requests SDNC via its controller adapter: GET /restconf/config/VNF-API:vnfs/vnf-list/be0ae48e-029a-4efc-af46-d11bcf58c403

Http GET Vf-module topology response (vFWSNK vnf)
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=1czkavx1g5yq715qw2lx7wcbfq;Path=/restconf
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/restconf; Max-Age=0; Expires=Wed, 18-Jul-2018 14:53:16 GMT
Content-Type: application/yang.data+xml
Vary: Accept-Encoding, User-Agent
Transfer-Encoding: chunked

<?xml version="1.0" encoding="UTF-8"?>
<vnf-list xmlns="org:onap:sdnctl:vnf">
   <vnf-id>be0ae48e-029a-4efc-af46-d11bcf58c403</vnf-id>
   <service-data>
      <vnf-request-information>
         <vnf-type>VspVfwsnk1607..base_vfw..module-0</vnf-type>
         <vnf-id>be0ae48e-029a-4efc-af46-d11bcf58c403</vnf-id>
         <generic-vnf-name>vfw-vf</generic-vnf-name>
         <use-preload>Y</use-preload>
         <generic-vnf-type>vfw_svc/vsp_vfwsnk_1607 0</generic-vnf-type>
         <tenant>324b90de6e9a4ad88e93a100c2cedd5d</tenant>
         <vnf-name>vfw-vf-module</vnf-name>
         <aic-cloud-region>fr2</aic-cloud-region>
         <generic-vnf-id>e1a9ac1b-b9a0-4424-8659-69426c8bfdc8</generic-vnf-id>
      </vnf-request-information>
      <vnf-topology-information>
         <vnf-parameters>
            <vnf-parameter-name>unprotected_private_net_id</vnf-parameter-name>
            <vnf-parameter-value>unprotected_net</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>protected_private_net_id</vnf-parameter-name>
            <vnf-parameter-value>protected_net</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>ext_private_net_id</vnf-parameter-name>
            <vnf-parameter-value>external_net</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>protected_private_net_cidr</vnf-parameter-name>
            <vnf-parameter-value>192.168.20.0/24</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>key_name</vnf-parameter-name>
            <vnf-parameter-value>vfw_key</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_flavor_name</vnf-parameter-name>
            <vnf-parameter-value>n2.cw.standard-1</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>cloud_env</vnf-parameter-name>
            <vnf-parameter-value>openstack</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>ext_private_net_cidr</vnf-parameter-name>
            <vnf-parameter-value>192.168.30.0/24</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vsn_name_0</vnf-parameter-name>
            <vnf-parameter-value>vsn</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>onap_private_net_id</vnf-parameter-name>
            <vnf-parameter-value>oam_onap_tR3O</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>unprotected_private_subnet_id</vnf-parameter-name>
            <vnf-parameter-value>unprotected_subnet</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>repo_url_artifacts</vnf-parameter-name>
            <vnf-parameter-value>https://nexus.onap.org/content/repositories/releases</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_name_0</vnf-parameter-name>
            <vnf-parameter-value>vfw-vf</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>repo_url_blob</vnf-parameter-name>
            <vnf-parameter-value>https://nexus.onap.org/content/sites/raw</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>dcae_collector_port</vnf-parameter-name>
            <vnf-parameter-value>8081</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>public_net_id</vnf-parameter-name>
            <vnf-parameter-value>public</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vf_module_id</vnf-parameter-name>
            <vnf-parameter-value>vFirewallCL</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>onap_private_net_cidr</vnf-parameter-name>
            <vnf-parameter-value>10.0.0.0/16</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vnf_id</vnf-parameter-name>
            <vnf-parameter-value>vFirewall_demo_app</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_image_name</vnf-parameter-name>
            <vnf-parameter-value>Ubuntu 14.04</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>onap_private_subnet_id</vnf-parameter-name>
            <vnf-parameter-value>oam_onap_tR3O</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>install_script_version</vnf-parameter-name>
            <vnf-parameter-value>1.2.1</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vpg_private_ip_0</vnf-parameter-name>
            <vnf-parameter-value>192.168.10.200</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_private_ip_3</vnf-parameter-name>
            <vnf-parameter-value>192.168.30.101</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_private_ip_2</vnf-parameter-name>
            <vnf-parameter-value>10.0.100.1</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>demo_artifacts_version</vnf-parameter-name>
            <vnf-parameter-value>1.2.1</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_private_ip_1</vnf-parameter-name>
            <vnf-parameter-value>192.168.20.100</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vfw_private_ip_0</vnf-parameter-name>
            <vnf-parameter-value>192.168.10.100</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vsn_private_ip_2</vnf-parameter-name>
            <vnf-parameter-value>192.168.30.102</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vsn_private_ip_1</vnf-parameter-name>
            <vnf-parameter-value>10.0.100.3</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>vsn_private_ip_0</vnf-parameter-name>
            <vnf-parameter-value>192.168.20.250</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>pub_key</vnf-parameter-name>
            <vnf-parameter-value>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY15cdBmIs2XOpe4EiFCsaY6bmUmK/GysMoLl4UG51JCfJwvwoWCoA+6mDIbymZxhxq9IGxilp/yTA6WQ9s/5pBag1cUMJmFuda9PjOkXl04jgqh5tR6I+GZ97AvCg93KAECis5ubSqw1xOCj4utfEUtPoF1OuzqM/lE5mY4N6VKXn+fT7pCD6cifBEs6JHhVNvs5OLLp/tO8Pa3kKYQOdyS0xc3rh+t2lrzvKUSWGZbX+dLiFiEpjsUL3tDqzkEMNUn4pdv69OJuzWHCxRWPfdrY9Wg0j3mJesP29EBht+w+EC9/kBKq+1VKdmsXUXAcjEvjovVL8l1BrX3BY0R8D</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>ext_private_subnet_id</vnf-parameter-name>
            <vnf-parameter-value>external_subnet</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>dcae_collector_ip</vnf-parameter-name>
            <vnf-parameter-value>84.39.39.157</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>protected_private_subnet_id</vnf-parameter-name>
            <vnf-parameter-value>protected_subnet</vnf-parameter-value>
         </vnf-parameters>
         <vnf-parameters>
            <vnf-parameter-name>unprotected_private_net_cidr</vnf-parameter-name>
            <vnf-parameter-value>192.168.10.0/24</vnf-parameter-value>
         </vnf-parameters>
         <vnf-topology-identifier>
            <service-type>d39d0833-ea8a-45be-8863-76715697cdb3</service-type>
            <vnf-type>VspVfwsnk1607..base_vfw..module-0</vnf-type>
            <generic-vnf-name>vfw-vf</generic-vnf-name>
            <generic-vnf-type>vsp_vfwsnk_1607 0</generic-vnf-type>
            <vnf-name>vfw-vf-module</vnf-name>
         </vnf-topology-identifier>
      </vnf-topology-information>
      <service-information>
         <service-id>null</service-id>
         <service-type>null</service-type>
         <service-instance-id>d39d0833-ea8a-45be-8863-76715697cdb3</service-instance-id>
         <subscriber-name>notsurewecare</subscriber-name>
      </service-information>
      <vnf-id>be0ae48e-029a-4efc-af46-d11bcf58c403</vnf-id>
      <sdnc-request-header>
         <svc-notification-url>http://c1.vm1.mso.simpledemo.openecomp.org:8080/adapters/rest/SDNCNotify</svc-notification-url>
         <svc-request-id>7b1b5758-d274-4305-aefc-289f1e614d7d-1532011988473</svc-request-id>
         <svc-action>assign</svc-action>
      </sdnc-request-header>
      <oper-status>
         <order-status>PendingCreate</order-status>
      </oper-status>
      <request-information>
         <request-action>VNFActivateRequest</request-action>
         <source>VID</source>
         <request-id>7b1b5758-d274-4305-aefc-289f1e614d7d</request-id>
      </request-information>
   </service-data>
   <service-status>
      <final-indicator>Y</final-indicator>
      <request-status>synccomplete</request-status>
      <response-code>200</response-code>
      <vnfsdn-action>VNFActivateRequest</vnfsdn-action>
      <rpc-name>vnf-topology-operation</rpc-name>
      <rpc-action>assign</rpc-action>
      <response-timestamp>2018-07-19T14:53:09.027Z</response-timestamp>
   </service-status>
</vnf-list>

6. Call VNF adapter to create vf-module

This step of the DoCreateVfModule subprocess corresponds to the allocation of the service related virtual resources and the deployment of the stacks. In fact, the SO invokes the infrastrcuture orchestration services (Heat in the case of Openstack-based infrastructure) via its VNF-adapters. The stack is created using heat template available in SO catalog.

7. Update AAI vf-module

8. Call SDNC adapter: Vf-module topology activate

Same as the second step of this BPMN subprocess, this step corresponds to the execution of a set of Directed Graphs.

The SO HTTP Post request triggers the execution of vnf-topology-operation DG

SO Http POST request to trigger vf-module topology activate (vFWSNK vnf)
POST /restconf/operations/VNF-API:vnf-topology-operation HTTP/1.1
Accept: application/yang.data+xml
Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==
Content-type: application/xml
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.8.0_171
Host: c1.vm1.sdnc.simpledemo.openecomp.org:8282
Connection: keep-alive
Content-Length: 1272

<?xml version="1.0" encoding="UTF-8"?>
<input xmlns="org:onap:sdnctl:vnf">
   <sdnc-request-header>
      <svc-request-id>7b1b5758-d274-4305-aefc-289f1e614d7d-1532012022299</svc-request-id>
      <svc-action>activate</svc-action>
      <svc-notification-url>http://c1.vm1.mso.simpledemo.openecomp.org:8080/adapters/rest/SDNCNotify</svc-notification-url>
   </sdnc-request-header>
   <request-information>
      <request-id>7b1b5758-d274-4305-aefc-289f1e614d7d</request-id>
      <request-action>VNFActivateRequest</request-action>
      <source>VID</source>
      <notification-url />
   </request-information>
   <service-information>
      <service-id>null</service-id>
      <service-type>null</service-type>
      <service-instance-id>d39d0833-ea8a-45be-8863-76715697cdb3</service-instance-id>
      <subscriber-name>notsurewecare</subscriber-name>
   </service-information>
   <vnf-request-information>
      <vnf-id>be0ae48e-029a-4efc-af46-d11bcf58c403</vnf-id>
      <vnf-type>VspVfwsnk1607..base_vfw..module-0</vnf-type>
      <vnf-name>vfw-vf-module</vnf-name>
      <generic-vnf-id>e1a9ac1b-b9a0-4424-8659-69426c8bfdc8</generic-vnf-id>
      <generic-vnf-name>vfw-vf</generic-vnf-name>
      <generic-vnf-type>vfw_svc/vsp_vfwsnk_1607 0</generic-vnf-type>
      <aic-cloud-region>fr2</aic-cloud-region>
      <tenant>324b90de6e9a4ad88e93a100c2cedd5d</tenant>
      <use-preload>Y</use-preload>
   </vnf-request-information>
</input>

Based on the POST request yang payload, (use-preload = Yes, svc-action = activate):

vnf-topology-operation DG → vnf-topology-preload-operation DG → vnf-topology-activate DG.

    • vnf-topology-activate DG

This DG "vnf-topology-activate" includes a sequence of nodes that execute the following actions:
1.Return failure if the vf-module is not assigned
2.Return failure if the order status is not PendingCreate or PendingUpdate
3.Set last order status in service-data as with the actual value of order status (PendingCreate or PendingUpdate)
4.Set order status in service-data  as active
5.Set last action in service-data as VNFActivateRequest
6.Update the vf-module orchestration status in A&AI (value=  active)
7.Set service-data with the actual vnf-topology-operation input


Finally, the VID Gets the orchestration status of the vf-module creation operation

Get orchestration request status
GET /ecomp/mso/infra/orchestrationRequests/v6/18c536e3-9208-46e5-8c7f-131f9e645439 HTTP/1.1
Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==
X-FromAppId: VID
X-ECOMP-RequestID: 1a14556b-0e01-49db-a6e4-e000505d6116
User-Agent: Jersey/2.23.1 (HttpUrlConnection 1.8.0_171)
Cache-Control: no-cache
Pragma: no-cache
Host: vm1.mso.simpledemo.onap.org:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Get orchestration request status
HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
X-Powered-By: Undertow/1
Server: WildFly/10
Pragma: no-cache
Date: Thu, 19 Jul 2018 14:53:48 GMT
Connection: keep-alive
Content-Type: application/json
Content-Length: 1863

{ 
   "request":{ 
      "requestId":"7b1b5758-d274-4305-aefc-289f1e614d7d",
      "startTime":"Thu, 19 Jul 2018 14:53:08 GMT",
      "requestScope":"vfModule",
      "requestType":"createInstance",
      "requestDetails":{ 
         "modelInfo":{ 
            "modelCustomizationName":"VspVfwsnk1607..base_vfw..module-0",
            "modelInvariantId":"08fa9f0d-4fb5-41ae-8cc3-8282333ff6aa",
            "modelType":"vfModule",
            "modelName":"VspVfwsnk1607..base_vfw..module-0",
            "modelVersion":"2",
            "modelVersionId":"f8d43f3f-8189-4eac-a122-b5a5e06ad3ab",
            "modelCustomizationId":"bb084cb1-e8eb-4030-a2b7-931a3ae1c91f"
         },
         "requestInfo":{ 
            "source":"VID",
            "instanceName":"vfw-vf-module",
            "suppressRollback":false,
            "requestorId":"demo"
         },
         "relatedInstanceList":[ 
            { 
               "relatedInstance":{ 
                  "instanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
                  "modelInfo":{ 
                     "modelInvariantId":"46c0d35f-4a34-4f5b-9ee3-fd65f6f74ac2",
                     "modelType":"service",
                     "modelName":"vfw_svc",
                     "modelVersion":"2.0",
                     "modelVersionId":"84909c11-1a62-47b3-9aed-59c2ec5c891d"
                  }
               }
            },
            { 
               "relatedInstance":{ 
                  "instanceId":"e1a9ac1b-b9a0-4424-8659-69426c8bfdc8",
                  "modelInfo":{ 
                     "modelCustomizationName":"vsp_vfwsnk_1607 0",
                     "modelInvariantId":"c7582c77-5a11-471c-a24f-5347ec811cdd",
                     "modelType":"vnf",
                     "modelName":"vsp_vfwsnk_1607",
                     "modelVersion":"2.0",
                     "modelVersionId":"db0fbb27-fd0d-40eb-8491-0f4a48adaefe",
                     "modelCustomizationId":"5365f464-3e2e-40be-9dc2-480c916bcf10"
                  }
               }
            }
         ],
         "cloudConfiguration":{ 
            "tenantId":"324b90de6e9a4ad88e93a100c2cedd5d",
            "lcpCloudRegionId":"fr2"
         },
         "requestParameters":{ 
            "usePreload":true
         }
      },
      "instanceReferences":{ 
         "serviceInstanceId":"d39d0833-ea8a-45be-8863-76715697cdb3",
         "vnfInstanceId":"e1a9ac1b-b9a0-4424-8659-69426c8bfdc8",
         "vfModuleInstanceId":"be0ae48e-029a-4efc-af46-d11bcf58c403",
         "vfModuleInstanceName":"vfw-vf-module",
         "requestorId":"demo"
      },
      "requestStatus":{ 
         "requestState":"COMPLETE",
         "statusMessage":"Vf Module has been created successfully.",
         "percentProgress":100,
         "finishTime":"Thu, 19 Jul 2018 14:53:43 GMT"
      }
   }
}

Analysis

The vFW service deployment corresponds to three user operations on VID portal. These user actions trigger respectively service, vnf node and vf-module instantiation by the SO.

Service and vnf instantiation corresponds to the creation of an object instance in the inventory.

The vf-module creation invoques several ONAP components in order to create the vf-module object instance in the inventory and deploy service virtualized resources in the infrastructure.

The SO BPMN processes invoked in the vFW deployment are generic and service creation is based on requests parameters. ( a la carte )

The SDNC role in the vFW deployment is limited to the creation of service related records (service-data) in the SDNC local data base. This is due to the vFW service itself because it doesn't include networks defined within the service models.



vFW closed loop mechanism

vFW VES measurements reporting

Before running the close loop, let's investigate what happens on the vfW service side and how the vFW component interacts with DCAE.

The packet generator sends UDP packets to the sink through the vfirewall. The sink shows in its graphs periodical traffic volumes:

Meanwhile, the vFW component includes a VES agent that reports measurements to DCAE collector (VES or VNF Event Stream) on port 8081.

Example 1: High traffic ~ 1000 packets (100 packets x 10 streams)

VES agent reporting
POST /eventListener/v5 HTTP/1.1
Authorization: Basic Og==
User-Agent: libcurl-agent/1.0
Host: 84.39.39.157:8081
Accept: */*
Content-type: application/json
Content-Length: 1020

{ 
   "event":{ 
      "commonEventHeader":{ 
         "domain":"measurementsForVfScaling",
         "eventId":"TrafficStats_1.2.3.4",
         "eventName":"vFirewallBroadcastPackets",
         "lastEpochMicrosec":1532032611090627,
         "priority":"Normal",
         "reportingEntityName":"fwll",
         "sequence":2012,
         "sourceName":"vfw-vf",
         "startEpochMicrosec":1532032600902328,
         "version":3,
         "eventType":"HTTP request rate",
         "reportingEntityId":"No UUID available",
         "sourceId":"4087b997-db38-42c9-929b-10d223388159",
         "nfcNamingCode":"vVNF",
         "nfNamingCode":"vVNF"
      },
      "measurementsForVfScalingFields":{ 
         "measurementInterval":10,
         "cpuUsageArray":[ 
            { 
               "cpuIdentifier":"cpu1",
               "cpuIdle":100.000000,
               "cpuUsageSystem":0.000000,
               "cpuUsageUser":0.000000,
               "percentUsage":0.000000
            }
         ],
         "requestRate":9862,
         "vNicUsageArray":[ 
            { 
               "receivedOctetsDelta":43731.000000,
               "receivedTotalPacketsDelta":1016.000000,
               "transmittedOctetsDelta":0.000000,
               "transmittedTotalPacketsDelta":0.000000,
               "valuesAreSuspect":"true",
               "vNicIdentifier":"eth0"
            }
         ],
         "measurementsForVfScalingVersion":2.1
      }
   }
}

Ano