+ http://<Any_K8S_Node_IP_Address>:30202/restconf/config/GENERIC-RESOURCE-API:services/service/4545562a-cbe3-409a-8227-0b863f5bc34e/service-data/vnfs/vnf/0e905228-c719-489a-9bcc-4470f3254e87/vnf-data/vf-modules/vf-module/793df714-106e-40a6-a28a-746b65f9e247/vf-module-data/vf-module-topology/
+
+See below an example of VF module topology. It can be stored in SDNC either using CDS (see Section 2) or manual preload (see Section 5).
+
+::
+
+ {
+ "vf-module-topology": {
+ "onap-model-information": {
+ "model-name": "VlbCds..vdns..module-3",
+ "model-invariant-uuid": "b985f371-4c59-45f7-b53e-36f970946469",
+ "model-version": "1",
+ "model-customization-uuid": "613b6877-0231-4ca4-90e4-4aa3374674ef",
+ "model-uuid": "739e4a32-f744-47be-9208-5dcf15772306"
+ },
+ "vf-module-parameters": {
+ "param": [
+ {
+ "name": "vfc_customization_uuid",
+ "value": "770af15f-564d-438c-ba3e-6df318c2b1fe",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "key_name",
+ "value": "${key_name}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vdns_flavor_name",
+ "value": "m1.medium",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "cloud_env",
+ "value": "openstack",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnfc-model-customization-uuid",
+ "value": "770af15f-564d-438c-ba3e-6df318c2b1fe",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vf-module-name",
+ "value": "RegionOne_ONAP-NF_20191010T013003141Z_vdns_Expansion_003",
+ "resource-resolution-data": {
+ "capability-name": "generate-name",
+ "resource-key": [
+ {
+ "name": "VF_MODULE_LABEL",
+ "value": "vdns"
+ },
+ {
+ "name": "resource-name",
+ "value": "vf-module-name"
+ },
+ {
+ "name": "resource-value",
+ "value": "${vf-module-name}"
+ },
+ {
+ "name": "naming-type",
+ "value": "VF-MODULE"
+ },
+ {
+ "name": "VNF_NAME",
+ "value": "RegionOne_ONAP-NF_20191010T013003141Z"
+ },
+ {
+ "name": "external-key",
+ "value": "793df714-106e-40a6-a28a-746b65f9e247_vf-module-name"
+ },
+ {
+ "name": "policy-instance-name",
+ "value": "SDNC_Policy.Config_MS_ONAP_VNF_NAMING_TIMESTAMP"
+ },
+ {
+ "name": "VF_MODULE_TYPE",
+ "value": "Expansion"
+ }
+ ],
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnfc-model-version",
+ "value": "1.0",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "pktgen_private_net_cidr",
+ "value": "${pktgen_private_net_cidr}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnf_model_customization_uuid",
+ "value": "c7be2fca-9a5c-4364-8c32-801e64f90ccd",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "service-instance-id",
+ "value": "4545562a-cbe3-409a-8227-0b863f5bc34e",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vlb_private_net_cidr",
+ "value": "192.168.10.0/24",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "install_script_version",
+ "value": "1.5.0-SNAPSHOT",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vlb_int_private_ip_0",
+ "value": "192.168.10.50",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnfc-model-invariant-uuid",
+ "value": "49e70b6f-87e7-4f68-b1ec-958e68c7cbf5",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "pub_key",
+ "value": "${pub_key}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "onap_private_net_cidr",
+ "value": "10.0.0.0/8",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vdns_int_private_ip_0",
+ "value": "192.168.10.54",
+ "resource-resolution-data": {
+ "capability-name": "netbox-ip-assign",
+ "resource-key": [
+ {
+ "name": "external_key",
+ "value": "0e905228-c719-489a-9bcc-4470f3254e87-vdns_int_private_ip_0"
+ },
+ {
+ "name": "vnf-id",
+ "value": "0e905228-c719-489a-9bcc-4470f3254e87"
+ },
+ {
+ "name": "service-instance-id",
+ "value": "4545562a-cbe3-409a-8227-0b863f5bc34e"
+ },
+ {
+ "name": "prefix-id",
+ "value": "2"
+ }
+ ],
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnf_id",
+ "value": "0e905228-c719-489a-9bcc-4470f3254e87",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "nfc-naming-code",
+ "value": "vdns",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "onap_private_subnet_id",
+ "value": "oam_network_qXyY",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vf_module_customization_uuid",
+ "value": "613b6877-0231-4ca4-90e4-4aa3374674ef",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vf_module_type",
+ "value": "Expansion",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vlb_onap_private_ip_0",
+ "value": "10.0.101.32",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vf_module_id",
+ "value": "793df714-106e-40a6-a28a-746b65f9e247",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vdns_name_0",
+ "value": "RegionOne_ONAP-NF_20191010T013003141Z_vdns_003",
+ "resource-resolution-data": {
+ "capability-name": "generate-name",
+ "resource-key": [
+ {
+ "name": "resource-name",
+ "value": "vdns_name_0"
+ },
+ {
+ "name": "resource-value",
+ "value": "${vdns_name_0}"
+ },
+ {
+ "name": "naming-type",
+ "value": "VNFC"
+ },
+ {
+ "name": "VNF_NAME",
+ "value": "RegionOne_ONAP-NF_20191010T013003141Z"
+ },
+ {
+ "name": "external-key",
+ "value": "793df714-106e-40a6-a28a-746b65f9e247_vdns_name_0"
+ },
+ {
+ "name": "policy-instance-name",
+ "value": "SDNC_Policy.Config_MS_ONAP_VNF_NAMING_TIMESTAMP"
+ },
+ {
+ "name": "NFC_NAMING_CODE",
+ "value": "vdns"
+ }
+ ],
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vm-type",
+ "value": "vdns",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vlb_int_pktgen_private_ip_0",
+ "value": "192.168.20.35",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "onap_private_net_id",
+ "value": "oam_network_qXyY",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "nb_api_version",
+ "value": "1.2.0",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vdns_image_name",
+ "value": "${image_name}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vdns_onap_private_ip_0",
+ "value": "10.0.101.35",
+ "resource-resolution-data": {
+ "capability-name": "netbox-ip-assign",
+ "resource-key": [
+ {
+ "name": "external_key",
+ "value": "0e905228-c719-489a-9bcc-4470f3254e87-vdns_onap_private_ip_0"
+ },
+ {
+ "name": "vnf-id",
+ "value": "0e905228-c719-489a-9bcc-4470f3254e87"
+ },
+ {
+ "name": "service-instance-id",
+ "value": "4545562a-cbe3-409a-8227-0b863f5bc34e"
+ },
+ {
+ "name": "prefix-id",
+ "value": "3"
+ }
+ ],
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "aai-vf-module-put",
+ "value": "SUCCESS",
+ "resource-resolution-data": {
+ "capability-name": "aai-vf-module-put",
+ "resource-key": [
+ {
+ "name": "vf-module",
+ "value": "vf-module"
+ }
+ ],
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "aic-cloud-region",
+ "value": "${aic-cloud-region}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "nfc-function",
+ "value": "${nf-role}",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "sec_group",
+ "value": "onap_sg_qXyY",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "vnf_name",
+ "value": "RegionOne_ONAP-NF_20191010T013003141Z",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "nexus_artifact_repo",
+ "value": "https://nexus.onap.org",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ },
+ {
+ "name": "public_net_id",
+ "value": "external",
+ "resource-resolution-data": {
+ "capability-name": "RA Resolved",
+ "status": "SUCCESS"
+ }
+ }
+ ]
+ },
+ "tenant": "41d6d38489bd40b09ea8a6b6b852dcbd",
+ "sdnc-generated-cloud-resources": true,
+ "vf-module-topology-identifier": {
+ "vf-module-id": "793df714-106e-40a6-a28a-746b65f9e247",
+ "vf-module-name": "vfModuleName",
+ "vf-module-type": "VlbCds..vdns..module-3"
+ },
+ "aic-cloud-region": "RegionOne"
+ }}
+
+Search for the reconfiguration parameters in the vf-module-topology.vf-module-parameters.param array. The user should count (starting from 0, as in most programming languages) the number of array elements to determine the exact location of the parameters of interest. For the VNF described in this documentation, the parameters of interest are "vdns_int_private_ip_0" and "vdns_onap_private_ip_0", which correspond to "ip-addr" and "onap-ip-addr" in the scale out request, respectively. As the user can see by counting the number of array locations (starting from 0), "vdns_int_private_ip_0" and "vdns_onap_private_ip_0" are stored at locations 16 and 30, respectively. As such, the complete resolution path to reconfiguration parameters for the VNF described in this documentation is:
+
+::
+
+ [{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[16].value","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[30].value"}]
+
+In future releases, we plan to leverage CDS to model post scaling VNF reconfiguration, so as to remove the dependency from JSON paths and simplify the overall process.
+
+
+PART 2 - Scale Out Use Case Instantiation
+-----------------------------------------
+Manual queries with POSTMAN
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This step is only required if CDS is used, otherwise you can use VID to instantiate the service and the VNF.
+Note that the POSTMAN collection linked at the top of this page, does provide some level of automatic scripting that will automatically get values between requests and provision the following queries
+
+You must enter in the postman config different variables:
+- "k8s" -> The k8s loadBalancer cluster node
+- "cds-service-model" -> The SDC service name distributed
+- "cds-instance-name" -> A name of your choice for the vnf instance (This must be changed each time you launch the instantiation)
+
+These useful requests are:
+CDS#1 - SDC Catalog Service -> This gets the Sdc service and provision some variables
+CDS#2 - SO Catalog DB Service VNFs - CDS -> This gets info in SO and provision some variables for the instantiation
+CDS#3 - SO Self-Serve Service Assign & Activate -> This starts the Service/vnf instantiation
+Open the body and replace the values like tenantId, Owning entity, region, and all the openstack values everywhere in the payload
+
+Note that you may have to add "onap_private_net_cidr":"10.0.0.0/16" in the "instanceParams" array depending of your openstack network configuration.
+
+CDS#4 - SO infra Active Request -> Used to get the status of the previous query
+
+Manual queries without POSTMAN
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+GET information from SDC catalogdb
+
+::
+
+ curl -X GET \
+ 'https://{{k8s}}:30204/sdc/v1/catalog/services' \
+ -H 'Authorization: Basic dmlkOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU=' \
+ -H 'X-ECOMP-InstanceID: VID' \
+ -H 'cache-control: no-cache'
+
+
+In the response you should find values for:
+
+* service-uuid
+* service-invariantUUID
+* service-name
+
+
+GET informations from SO catalogdb.
+
+::
+
+ curl -X GET \
+ 'http://{{k8s}}:30744/ecomp/mso/catalog/v2/serviceVnfs?serviceModelName={{service-name}}' \
+ -H 'Authorization: Basic YnBlbDpwYXNzd29yZDEk' \
+ -H 'cache-control: no-cache'
+
+
+In the response you should find values for:
+
+* vnf-modelinfo-modelname
+* vnf-modelinfo-modeluuid
+* vnf-modelinfo-modelinvariantuuid
+* vnf-modelinfo-modelcustomizationuuid
+* vnf-modelinfo-modelinstancename
+* vnf-vfmodule-0-modelinfo-modelname
+* vnf-vfmodule-0-modelinfo-modeluuid
+* vnf-vfmodule-0-modelinfo-modelinvariantuuid
+* vnf-vfmodule-0-modelinfo-modelcustomizationuuid
+* vnf-vfmodule-1-modelinfo-modelname
+* vnf-vfmodule-1-modelinfo-modeluuid
+* vnf-vfmodule-1-modelinfo-modelinvariantuuid
+* vnf-vfmodule-1-modelinfo-modelcustomizationuuid
+* vnf-vfmodule-2-modelinfo-modelname
+* vnf-vfmodule-2-modelinfo-modeluuid
+* vnf-vfmodule-2-modelinfo-modelinvariantuuid
+* vnf-vfmodule-2-modelinfo-modelcustomizationuuid
+* vnf-vfmodule-3-modelinfo-modelname
+* vnf-vfmodule-3-modelinfo-modeluuid
+* vnf-vfmodule-3-modelinfo-modelinvariantuuid
+* vnf-vfmodule-3-modelinfo-modelcustomizationuuid
+
+
+Note : all those informations are also available in the TOSCA service template in the SDC
+
+You need after:
+
+* the SSH public key value that will allow you to connect to the VM.
+* the cloudSite name and TenantId where to deploy the service
+* the name of the security group that will be used in the tenant for your service
+* the name of the network that will be used to connect your VM
+* the name of your OpenStack image
+* the name of your OpenStack VM flavor
+
+We supposed here that we are using some already declared informations:
+
+* customer named "Demonstration"
+* subscriptionServiceType named "vLB"
+* projectName named "Project-Demonstration"
+* owningEntityName named "OE-Demonstration"
+* platformName named "test"
+* lineOfBusinessName named "someValue"
+
+Having all those information, you are now able to build the SO Macro request
+that will instantiate Service, VNF, VF modules and Heat stacks:
+
+::
+
+ curl -X POST \
+ 'http://{{k8s}}:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
+ -H 'Content-Type: application/json' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "requestDetails":{
+ "subscriberInfo":{
+ "globalSubscriberId":"Demonstration"
+ },
+ "requestInfo":{
+ "suppressRollback":false,
+ "productFamilyId":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "requestorId":"adt",
+ "instanceName":"{{cds-instance-name}}",
+ "source":"VID"
+ },
+ "cloudConfiguration":{
+ "lcpCloudRegionId":"RegionOne",
+ "tenantId":"41d6d38489bd40b09ea8a6b6b852dcbd",
+ "cloudOwner":"CloudOwner"
+ },
+ "requestParameters":{
+ "subscriptionServiceType":"vLB",
+ "userParams":[
+ {
+ "Homing_Solution":"none"
+ },
+ {
+ "service":{
+ "instanceParams":[
+
+ ],
+ "instanceName":"{{cds-instance-name}}",
+ "resources":{
+ "vnfs":[
+ {
+ "modelInfo":{
+ "modelName":"{{vnf-modelinfo-modelname}}",
+ "modelVersionId":"{{vnf-modelinfo-modeluuid}}",
+ "modelInvariantUuid":"{{vnf-modelinfo-modelinvariantuuid}}",
+ "modelVersion":"1.0",
+ "modelCustomizationId":"{{vnf-modelinfo-modelcustomizationuuid}}",
+ "modelInstanceName":"{{vnf-modelinfo-modelinstancename}}"
+ },
+ "cloudConfiguration":{
+ "lcpCloudRegionId":"RegionOne",
+ "tenantId":"41d6d38489bd40b09ea8a6b6b852dcbd"
+ },
+ "platform":{
+ "platformName":"test"
+ },
+ "lineOfBusiness":{
+ "lineOfBusinessName":"LOB-Demonstration"
+ },
+ "productFamilyId":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+ "instanceName":"{{vnf-modelinfo-modelinstancename}}",
+ "instanceParams":[
+ {
+ "onap_private_net_id":"oam_network_qXyY",
+ "dcae_collector_ip":"10.12.5.214",
+ "onap_private_subnet_id":"oam_network_qXyY",
+ "pub_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKXDgoo3+WOqcUG8/5uUbk81+yczgwC4Y8ywTmuQqbNxlY1oQ0YxdMUqUnhitSXs5S/yRuAVOYHwGg2mCs20oAINrP+mxBI544AMIb9itPjCtgqtE2EWo6MmnFGbHB4Sx3XioE7F4VPsh7japsIwzOjbrQe+Mua1TGQ5d4nfEOQaaglXLLPFfuc7WbhbJbK6Q7rHqZfRcOwAMXgDoBqlyqKeiKwnumddo2RyNT8ljYmvB6buz7KnMinzo7qB0uktVT05FH9Rg0CTWH5norlG5qXgP2aukL0gk1ph8iAt7uYLf1ktp+LJI2gaF6L0/qli9EmVCSLr1uJ38Q8CBflhkh",
+ "sec_group":"onap_sg_qXyY",
+ "install_script_version":"1.5.0",
+ "demo_artifacts_version":"1.5.0",
+ "cloud_env":"openstack",
+ "flavor_name":"m1.medium",
+ "public_net_id":"external",
+ "image_name":"ubuntu-16-04-cloud-amd64"
+ }
+ ],
+ "vfModules":[
+ {
+ "modelInfo":{
+ "modelName":"{{vnf-vfmodule-0-modelinfo-modelname}}",
+ "modelVersionId":"{{vnf-vfmodule-0-modelinfo-modeluuid}}",
+ "modelInvariantUuid":"{{vnf-vfmodule-0-modelinfo-modelinvariantuuid}}",
+ "modelVersion":"1",
+ "modelCustomizationId":"{{vnf-vfmodule-0-modelinfo-modelcustomizationuuid}}"
+ },
+ "instanceName":"{{vnf-vfmodule-0-modelinfo-modelname}}",
+ "instanceParams":[
+ {
+ "sec_group":"onap_sg_imAd",
+ "public_net_id":"external"
+ }
+ ]
+ },
+ {
+ "modelInfo":{
+ "modelName":"{{vnf-vfmodule-1-modelinfo-modelname}}",
+ "modelVersionId":"{{vnf-vfmodule-1-modelinfo-modeluuid}}",
+ "modelInvariantUuid":"{{vnf-vfmodule-1-modelinfo-modelinvariantuuid}}",
+ "modelVersion":"1",
+ "modelCustomizationId":"{{vnf-vfmodule-1-modelinfo-modelcustomizationuuid}}"
+ },
+ "instanceName":"{{vnf-vfmodule-1-modelinfo-modelname}}",
+ "instanceParams":[
+ {
+ "sec_group":"onap_sg_imAd",
+ "public_net_id":"external"
+ }
+ ]
+ },
+ {
+ "modelInfo":{
+ "modelName":"{{vnf-vfmodule-2-modelinfo-modelname}}",
+ "modelVersionId":"{{vnf-vfmodule-2-modelinfo-modeluuid}}",
+ "modelInvariantUuid":"{{vnf-vfmodule-2-modelinfo-modelinvariantuuid}}",
+ "modelVersion":"1",
+ "modelCustomizationId":"{{vnf-vfmodule-2-modelinfo-modelcustomizationuuid}}"
+ },
+ "instanceName":"{{vnf-vfmodule-2-modelinfo-modelname}}",
+ "instanceParams":[
+ {
+ "sec_group":"onap_sg_imAd",
+ "public_net_id":"external"
+ }
+ ]
+ },
+ {
+ "modelInfo":{
+ "modelName":"{{vnf-vfmodule-3-modelinfo-modelname}}",
+ "modelVersionId":"{{vnf-vfmodule-3-modelinfo-modeluuid}}",
+ "modelInvariantUuid":"{{vnf-vfmodule-3-modelinfo-modelinvariantuuid}}",
+ "modelVersion":"1",
+ "modelCustomizationId":"{{vnf-vfmodule-3-modelinfo-modelcustomizationuuid}}"
+ },
+ "instanceName":"{{vnf-vfmodule-3-modelinfo-modelname}}",
+ "instanceParams":[
+ {
+ "sec_group":"onap_sg_imAd",
+ "public_net_id":"external"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "modelInfo":{
+ "modelVersion":"1.0",
+ "modelVersionId":"{{service-uuid}}",
+ "modelInvariantId":"{{service-invariantUUID}}",
+ "modelName":"{{service-name}}",
+ "modelType":"service"
+ }
+ }
+ }
+ ],
+ "aLaCarte":false
+ },
+ "project":{
+ "projectName":"Project-Demonstration"
+ },
+ "owningEntity":{
+ "owningEntityId":"6f6c49d0-8a8c-4704-9174-321bcc526cc0",
+ "owningEntityName":"OE-Demonstration"
+ },
+ "modelInfo":{
+ "modelVersion":"1.0",
+ "modelVersionId":"{{service-uuid}}",
+ "modelInvariantId":"{{service-invariantUUID}}",
+ "modelName":"{{service-name}}",
+ "modelType":"service"}}}'
+
+Note that the "dcae_collector_ip" parameter has to contain the IP address of one of the Kubernetes cluster nodes, 10.12.5.214 in the example above. In the response to the Macro request, the user will obtain a requestId that will be usefulto follow the instantiation request status in the ONAP SO:
+
+::
+
+ curl -X GET \
+ 'http://{{k8s}}:30086/infraActiveRequests/{{requestid}}' \
+ -H 'cache-control: no-cache'
+
+
+
+
+
+PART 3 - Post Instantiation Operations
+--------------------------------------
+
+3-1 Post Instantiation VNF configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CDS executes post-instantiation VNF configuration if the "skip-post-instantiation" flag in the SDC service model is set to false, which is the default behavior. Manual post-instantiation configuration is necessary if the "skip-post-instantiation" flag in the service model is set to true or if the VNF is instantiated using the preload approach, which doesn't include CDS. Regardless, this step is NOT required during scale out operations, as VNF reconfiguration will be triggered by SO and executed by APPC.
+
+If VNF post instantiation is executed manually, in order to change the state of the vLB the users should run the following REST call, replacing the IP addresses in the VNF endpoint and JSON object to match the private IP addresses of their vDNS instance:
+
+::
+
+ curl -X PUT \
+ http://10.12.5.78:8183/restconf/config/vlb-business-vnf-onap-plugin:vlb-business-vnf-onap-plugin/vdns-instances/vdns-instance/192.168.10.59 \
+ -H 'Accept: application/json' \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: a708b064-adb1-4804-89a7-ee604f5fe76f' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "vdns-instance": [
+ {
+ "ip-addr": "192.168.10.59",
+ "oam-ip-addr": "10.0.101.49",
+ "enabled": true
+ }
+ ]
+ }'
+
+At this point, the VNF is fully set up.
+
+
+3-2 Updating AAI with VNF resources
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To allow automated scale out via closed loop, the users need to inventory the VNF resources in AAI. This is done by running the heatbridge python script in /root/oom/kubernetes/robot in the Rancher VM in the Kubernetes cluster:
+
+::
+
+ ./demo-k8s.sh onap heatbridge <vLB stack_name in OpenStack> <service_instance_id> vLB vlb_onap_private_ip_0
+
+Note that "vlb_onap_private_ip_0" used in the heatbridge call is the actual parameter name, not its value (e.g. the actual IP address). Heatbridge is needed for control loops because DCAE and Policy runs queries against AAI using vServer names as key.
+
+
+PART 4 - Triggering Scale Out Manually
+--------------------------------------
+For scale out with manual trigger, VID is not supported at this time.
+
+Manual queries with POSTMAN
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Note that the POSTMAN collection linked at the top of this page, does provide some level of automatic scripting that will automatically get values between requests and provision the following queries
+
+You must enter in the postman config different variables:
+- "k8s" -> The k8s loadBalancer cluster node
+- "cds-service-model" -> The SDC service name distributed
+- "cds-instance-name" -> A name of your choice for the vnf instance (This must be changed each time you launch the instantiation)
+
+CDS#5 - SO ScaleOut -> This will initiate a Scaleout manually
+CDS#7 - SO ScaleIn -> This will initiate a ScaleIn manually
+
+Manual queries without POSTMAN
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Users can run the use case by directly calling SO APIs:
+
+::
+
+ curl -X POST \
+ http://<Any_K8S_Node_IP_Address>:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances/7d3ca782-c486-44b3-9fe5-39f322d8ee80/vnfs/9d33cf2d-d6aa-4b9e-a311-460a6be5a7de/vfModules/scaleOut \
+ -H 'Accept: application/json' \
+ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
+ -H 'Cache-Control: no-cache' \
+ -H 'Connection: keep-alive' \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: 12f2601a-4eb2-402c-a51a-f29502359501,9befda68-b2c9-4e7a-90ca-1be9c24ef664' \
+ -H 'User-Agent: PostmanRuntime/7.15.0' \
+ -H 'accept-encoding: gzip, deflate' \
+ -H 'cache-control: no-cache' \
+ -H 'content-length: 2422' \
+ -H 'cookie: JSESSIONID=B3BA24216367F9D39E3DF5E8CBA4BC64' \
+ -b JSESSIONID=B3BA24216367F9D39E3DF5E8CBA4BC64 \
+ -d '{
+ "requestDetails": {
+ "modelInfo": {
+ "modelCustomizationName": "VdnsloadbalancerCds..vdns..module-3",
+ "modelCustomizationId": "ded42059-2f35-42d4-848b-16e1ab1ad197",
+ "modelInvariantId": "2815d321-c6b4-4f21-b7f7-fa5adf8ed7d9",
+ "modelVersionId": "524e34ed-9789-453e-ab73-8eff30eafef3",
+ "modelName": "VdnsloadbalancerCds..vdns..module-3",
+ "modelType": "vfModule",
+ "modelVersion": "1"
+ },
+ "cloudConfiguration": {
+ "lcpCloudRegionId": "RegionOne",
+ "tenantId": "d570c718cbc545029f40e50b75eb13df",
+ "cloudOwner": "CloudOwner"
+ },
+ "requestInfo": {
+ "instanceName": "vDNS-VM-02",
+ "source": "VID",
+ "suppressRollback": false,
+ "requestorId": "demo"
+ },
+ "requestParameters": {
+ "userParams": []
+ },
+ "relatedInstanceList": [
+ {
+ "relatedInstance": {
+ "instanceId": "7d3ca782-c486-44b3-9fe5-39f322d8ee80",
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "dfabdcae-cf50-4801-9885-9a3a9cc07e6f",
+ "modelVersionId": "ee55b537-7be5-4377-93c1-5d92931b6a78",
+ "modelName": "vLoadBalancerCDS",
+ "modelVersion": "1.0"
+ }
+ }
+ },
+ {
+ "relatedInstance": {
+ "instanceId": "9d33cf2d-d6aa-4b9e-a311-460a6be5a7de",
+ "modelInfo": {
+ "modelType": "vnf",
+ "modelInvariantId": "a77f9280-5c02-46cd-b1fc-855975db9df9",
+ "modelVersionId": "ff0e99ce-a521-44b5-b11b-da7e07ac83fc",
+ "modelName": "vLoadBalancerCDS",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "b8b8a25d-19de-4581-bb63-f2dc8c0d79a7"
+ }
+ }
+ }
+ ],
+ "configurationParameters": [
+ {
+ "ip-addr": "$.vf-module-topology.vf-module-parameters.param[17].value",
+ "oam-ip-addr": "$.vf-module-topology.vf-module-parameters.param[31].value"
+ }
+ ]
+ }
+ }'
+
+
+To fill in the JSON object, users need to download the Service Model TOSCA template from the SDC Portal using one of the standard SDC users (for example user: cs0008, password: demo123456!). After logging to SDC, the user should select from the catalog the vLB service that they created, click the "TOSCA Artifacts" link on the left, and finally the download button on the right, as shown in the figure below:
+
+.. figure:: files/scaleout/tosca_template_fig.png
+ :align: center
+
+For the example described below, users can refer to the TOSCA template linked at the top of the page. The template contains all the model (invariant/version/customization) IDs of service, VNF, and VF modules that the input request to SO needs.
+
+The values of modelInvariantId, modelVersionId, and modelName in the relatedInstance item identified by "modelType": "service" in the JSON request to SO have to match invariantUUID, UUID, and name, respectively, in the TOSCA template:
+::
+
+ {
+ "relatedInstance": {
+ "instanceId": "7d3ca782-c486-44b3-9fe5-39f322d8ee80",
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "dfabdcae-cf50-4801-9885-9a3a9cc07e6f",
+ "modelVersionId": "ee55b537-7be5-4377-93c1-5d92931b6a78",
+ "modelName": "vLoadBalancerCDS",
+ "modelVersion": "1.0"
+ }
+ }
+ }
+
+.. figure:: files/scaleout/service.png
+ :align: center
+
+
+The values of modelInvariantId, modelVersionId, modelName, and modelVersion in the relatedInstance item identified by "modelType": "vnf" in the JSON request to SO have to match invariantUUID, UUID, name, and version, respectively, in the TOSCA template:
+
+::
+
+ {
+ "relatedInstance": {
+ "instanceId": "9d33cf2d-d6aa-4b9e-a311-460a6be5a7de",
+ "modelInfo": {
+ "modelType": "vnf",
+ "modelInvariantId": "a77f9280-5c02-46cd-b1fc-855975db9df9",
+ "modelVersionId": "ff0e99ce-a521-44b5-b11b-da7e07ac83fc",
+ "modelName": "vLoadBalancerCDS",
+ "modelVersion": "1.0",
+ "modelCustomizationId": "b8b8a25d-19de-4581-bb63-f2dc8c0d79a7"
+ }
+ }
+ }
+
+.. figure:: files/scaleout/vnf.png
+ :align: center
+
+
+The modelCustomizationId, modelInvariantId, modelVersionId, modelName, and modelVersion in the modelInfo item identified by "modelType": "vfModule" in the JSON request to SO have to match vfModuleModelCustomizationUUID, vfModuleModelInvariantUUID, vfModuleModelUUID, vfModuleModelName, and vfModuleModelVersion, respectively, in the TOSCA template. The modelCustomizationName parameter in the SO object can be set as the modelName parameter in the same JSON object:
+
+::
+
+ "modelInfo": {
+ "modelCustomizationName": "Vloadbalancercds..vdns..module-3",
+ "modelCustomizationId": "ded42059-2f35-42d4-848b-16e1ab1ad197",
+ "modelInvariantId": "2815d321-c6b4-4f21-b7f7-fa5adf8ed7d9",
+ "modelVersionId": "524e34ed-9789-453e-ab73-8eff30eafef3",
+ "modelName": "Vloadbalancercds..vdns..module-3",
+ "modelType": "vfModule",
+ "modelVersion": "1"
+ }
+
+The vLB-vDNS-vPacketGenerator VNF that we use to describe the scale out use case supports the scaling of the vDNS VF module only. As such, in the TOSCA template users should refer to the section identified by "vfModuleModelName": "Vloadbalancercds..vdns..module-3", as highlighted below:
+
+.. figure:: files/scaleout/service.png
+ :align: center
+
+
+Note that both Service and VNF related instances have a field called "instanceId" that represent the Service and VNF instance ID, respectively. These IDs are assigned at Service and VNF instantiation time and can be retrieved from AAI, querying for generic VNF objects:
+
+::
+
+ curl -k -X GET \
+ https://<Any_K8S_Node_IP_Address>:30233/aai/v16/network/generic-vnfs \
+ -H 'Accept: application/json' \
+ -H 'Authorization: Basic QUFJOkFBSQ==' \
+ -H 'Content-Type: application/json' \
+ -H 'X-FromAppId: AAI' \
+ -H 'X-TransactionId: get_aai_subscr'
+
+From the list of VNFs reported by AAI, search for the name of the VNF that was previously instantiated, for example "vLB_VNF_01" in the example below:
+
+::
+
+ {
+ "vnf-id": "9d33cf2d-d6aa-4b9e-a311-460a6be5a7de",
+ "vnf-name": "vLB_VNF_01",
+ "vnf-type": "vLoadBalancer/vLoadBalancer 0",
+ "prov-status": "ACTIVE",
+ "equipment-role": "",
+ "orchestration-status": "Active",
+ "ipv4-oam-address": "10.0.220.10",
+ "in-maint": true,
+ "is-closed-loop-disabled": false,
+ "resource-version": "1565817789379",
+ "model-invariant-id": "a77f9280-5c02-46cd-b1fc-855975db9df9",
+ "model-version-id": "ff0e99ce-a521-44b5-b11b-da7e07ac83fc",
+ "model-customization-id": "b8b8a25d-19de-4581-bb63-f2dc8c0d79a7",
+ "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/7d3ca782-c486-44b3-9fe5-39f322d8ee80/service-data/vnfs/vnf/9d33cf2d-d6aa-4b9e-a311-460a6be5a7de/vnf-data/vnf-topology/",
+ "relationship-list": {
+ "relationship": [
+ {
+ "related-to": "service-instance",
+ "relationship-label": "org.onap.relationships.inventory.ComposedOf",
+ "related-link": "/aai/v16/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vRAR/service-instances/service-instance/7d3ca782-c486-44b3-9fe5-39f322d8ee80",
+ "relationship-data": [
+ {
+ "relationship-key": "customer.global-customer-id",
+ "relationship-value": "Demonstration"
+ },
+ {
+ "relationship-key": "service-subscription.service-type",
+ "relationship-value": "vLB"
+ },
+ {
+ "relationship-key": "service-instance.service-instance-id",
+ "relationship-value": "7d3ca782-c486-44b3-9fe5-39f322d8ee80"
+ }
+ ],
+ "related-to-property": [
+ {
+ "property-key": "service-instance.service-instance-name",
+ "property-value": "vLB-Service-0814-1"
+ }
+ ]
+ }
+ ...
+ }
+
+To identify the VNF ID, look for the "vnf-id" parameter at the top of the JSON object, while to determine the Service ID, look for the "relationship-value" parameter corresponding to the "relationship-key": "service-instance.service-instance-id" item in the "relationship-data" list. In the example above, the Service instance ID is 7d3ca782-c486-44b3-9fe5-39f322d8ee80, while the VNF ID is 9d33cf2d-d6aa-4b9e-a311-460a6be5a7de.
+
+These IDs are also used in the URL request to SO:
+
+::
+
+ http://<Any_K8S_Node_IP_Address>:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances/7d3ca782-c486-44b3-9fe5-39f322d8ee80/vnfs/9d33cf2d-d6aa-4b9e-a311-460a6be5a7de/vfModules/scaleOut
+
+
+Finally, the "configurationParameters" section in the JSON request to SO contains the parameters that will be used to reconfigure the VNF after scaling. Please see Section 1-7 for an in-depth description of how to set the parameters correctly.
+
+::
+
+ "configurationParameters": [
+ {
+ "ip-addr": "$.vf-module-topology.vf-module-parameters.param[16].value",
+ "oam-ip-addr": "$.vf-module-topology.vf-module-parameters.param[30].value"
+ }
+ ]
+
+
+PART 5 - Running the Scale Out Use Case with Configuration Preload
+------------------------------------------------------------------
+
+While CDS can be used to model and automate the generation of cloud configuration for VNF instantiation, the manual preload approach is still supported for scale out with manual trigger (no closed loop). Note that preload operations must be executed before VF modules are created or scaled, as the instantiation process will use the preload to determine the VF module configuration.
+
+The procedure is similar to one described above, with some minor changes:
+
+1) **Service Design and Creation**: The heat template used to create a vendor software product in SDC is the same. However, during property assignment (Section 1-2) "sdnc_artifact_name", "sdnc_model_version", "sdnc_model_name" **must be** left blank, as they are used for CDS only.
+
+2) As closed loop with preload is not supported for scale out, DCAE blueprint and Policy onboarding (Section 1-2), deployment of naming policy (Section 1-3), and closed loop design and deployment from CLAMP (Section 1-4) are not necessary.
+
+3) **Creation of VNF template with CDT** works as described in Section 1-5.
+
+4) **Controller type selection** in SO works as described in Section 1-6.
+
+5) **VNF instantiation from VID**: users can use VID to create the service, the VNF, and instantiate the VF modules. In the VID main page, users should select GR API (this should be the default option).
+
+.. figure:: files/scaleout/vid.png
+ :align: center
+
+Based on the Heat template structure, there are four VF modules:
+
+ * module-0: base module that contains resources, such as internal private networks and public key, shared across the VNF elements
+ * module-1: vLB resource descriptor
+ * module-2: vPacketGen resource descriptor
+ * module-3: vDNS resource descriptor
+
+These VF modules have to be installed in the following order, so as to satisfy heat dependencies: module-0, module-1, module-2, module-3. The parameters defined in the Heat environment files can be overridden by loading cloud configuration to SDNC before the VF modules are instantiated. See example of preloads below. They need to be customized based on the OpenStack cloud and execution environment in which the VF modules are going to be instantiated.
+
+Module-0 Preload
+~~~~~~~~~~~~~~~~
+
+::
+
+ curl -X POST \
+ http://<Any_K8S_Node_IP_Address>:30202/restconf/operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: 0a7abc62-9d8f-4f63-8b05-db7cc4c3e28b' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "input": {
+ "preload-vf-module-topology-information": {
+ "vf-module-topology": {
+ "vf-module-topology-identifier": {
+ "vf-module-name": "vNetworks-0211-1"
+ },
+ "vf-module-parameters": {
+ "param": [
+ {
+ "name": "vlb_private_net_id",
+ "value": "vLBMS_zdfw1lb01_private_ms"
+ },
+ {
+ "name": "pktgen_private_net_id",
+ "value": "vLBMS_zdfw1pktgen01_private_ms"
+ },
+ {
+ "name": "vlb_private_net_cidr",
+ "value": "192.168.10.0/24"
+ },
+ {
+ "name": "pktgen_private_net_cidr",
+ "value": "192.168.9.0/24"
+ },
+ {
+ "name": "vlb_0_int_pktgen_private_port_0_mac",
+ "value": "fa:16:3e:00:01:10"
+ },
+ {
+ "name": "vpg_0_int_pktgen_private_port_0_mac",
+ "value": "fa:16:3e:00:01:20"
+ },
+ {
+ "name": "vnf_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vnf_name",
+ "value": "vLBMS"
+ },
+ {
+ "name": "key_name",
+ "value": "vlb_key"
+ },
+ {
+ "name": "pub_key",
+ "value": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQXYJYYi3/OUZXUiCYWdtc7K0m5C0dJKVxPG0eI8EWZrEHYdfYe6WoTSDJCww+1qlBSpA5ac/Ba4Wn9vh+lR1vtUKkyIC/nrYb90ReUd385Glkgzrfh5HdR5y5S2cL/Frh86lAn9r6b3iWTJD8wBwXFyoe1S2nMTOIuG4RPNvfmyCTYVh8XTCCE8HPvh3xv2r4egawG1P4Q4UDwk+hDBXThY2KS8M5/8EMyxHV0ImpLbpYCTBA6KYDIRtqmgS6iKyy8v2D1aSY5mc9J0T5t9S2Gv+VZQNWQDDKNFnxqYaAo1uEoq/i1q63XC5AD3ckXb2VT6dp23BQMdDfbHyUWfJN"
+ }
+ ]
+ }
+ },
+ "vnf-topology-identifier-structure": {
+ "vnf-name": "vLoadBalancer-Vnf-0211-1",
+ "vnf-type": "vLoadBalancer/vLoadBalancer 0"
+ },
+ "vnf-resource-assignments": {
+ "availability-zones": {
+ "availability-zone": [
+ "nova"
+ ],
+ "max-count": 1
+ },
+ "vnf-networks": {
+ "vnf-network": []
+ }
+ }
+ },
+ "request-information": {
+ "request-id": "robot12",
+ "order-version": "1",
+ "notification-url": "openecomp.org",
+ "order-number": "1",
+ "request-action": "PreloadVfModuleRequest"
+ },
+ "sdnc-request-header": {
+ "svc-request-id": "robot12",
+ "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
+ "svc-action": "reserve"
+ }
+ }
+ }'
+
+
+Module-1 Preload
+~~~~~~~~~~~~~~~~
+
+::
+
+ curl -X POST \
+ http://<Any_K8S_Node_IP_Address>:30202/restconf/operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: 662914ac-29fc-414d-8823-1691fb2c718a' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "input": {
+ "preload-vf-module-topology-information": {
+ "vf-module-topology": {
+ "vf-module-topology-identifier": {
+ "vf-module-name": "vLoadBalancer-0211-1"
+ },
+ "vf-module-parameters": {
+ "param": [
+ {
+ "name": "vlb_image_name",
+ "value": "ubuntu-16-04-cloud-amd64"
+ },
+ {
+ "name": "vlb_flavor_name",
+ "value": "m1.medium"
+ },
+ {
+ "name": "public_net_id",
+ "value": "public"
+ },
+ {
+ "name": "int_private_net_id",
+ "value": "vLBMS_zdfw1lb01_private_ms"
+ },
+ {
+ "name": "int_private_subnet_id",
+ "value": "vLBMS_zdfw1lb01_private_sub_ms"
+ },
+ {
+ "name": "int_pktgen_private_net_id",
+ "value": "vLBMS_zdfw1pktgen01_private_ms"
+ },
+ {
+ "name": "int_pktgen_private_subnet_id",
+ "value": "vLBMS_zdfw1pktgen01_private_sub_ms"
+ },
+ {
+ "name": "onap_private_net_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "onap_private_subnet_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "vlb_private_net_cidr",
+ "value": "192.168.10.0/24"
+ },
+ {
+ "name": "pktgen_private_net_cidr",
+ "value": "192.168.9.0/24"
+ },
+ {
+ "name": "onap_private_net_cidr",
+ "value": "10.0.0.0/16"
+ },
+ {
+ "name": "vlb_int_private_ip_0",
+ "value": "192.168.10.111"
+ },
+ {
+ "name": "vlb_onap_private_ip_0",
+ "value": "10.0.150.1"
+ },
+ {
+ "name": "vlb_int_pktgen_private_ip_0",
+ "value": "192.168.9.111"
+ },
+ {
+ "name": "vdns_int_private_ip_0",
+ "value": "192.168.10.211"
+ },
+ {
+ "name": "vdns_onap_private_ip_0",
+ "value": "10.0.150.3"
+ },
+ {
+ "name": "vpg_int_pktgen_private_ip_0",
+ "value": "192.168.9.110"
+ },
+ {
+ "name": "vpg_onap_private_ip_0",
+ "value": "10.0.150.2"
+ },
+ {
+ "name": "vlb_name_0",
+ "value": "vlb-0211-1"
+ },
+ {
+ "name": "vlb_0_mac_address",
+ "value": "fa:16:3e:00:01:10"
+ },
+ {
+ "name": "vpg_0_mac_address",
+ "value": "fa:16:3e:00:01:20"
+ },
+ {
+ "name": "vip",
+ "value": "192.168.9.112"
+ },
+ {
+ "name": "gre_ipaddr",
+ "value": "192.168.10.112"
+ },
+ {
+ "name": "vnf_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vf_module_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vnf_name",
+ "value": "vLBMS"
+ },
+ {
+ "name": "dcae_collector_ip",
+ "value": "10.12.5.20"
+ },
+ {
+ "name": "dcae_collector_port",
+ "value": "30235"
+ },
+ {
+ "name": "demo_artifacts_version",
+ "value": "1.6.0-SNAPSHOT"
+ },
+ {
+ "name": "install_script_version",
+ "value": "1.6.0-SNAPSHOT"
+ },
+ {
+ "name": "nb_api_version",
+ "value": "1.2.0"
+ },
+ {
+ "name": "keypair",
+ "value": "vlb_key"
+ },
+ {
+ "name": "cloud_env",
+ "value": "openstack"
+ },
+ {
+ "name": "nexus_artifact_repo",
+ "value": "https://nexus.onap.org"
+ },
+ {
+ "name": "sec_group",
+ "value": "default"
+ }
+ ]
+ }
+ },
+ "vnf-topology-identifier-structure": {
+ "vnf-name": "vLoadBalancer-Vnf-0211-1",
+ "vnf-type": "vLoadBalancer/vLoadBalancer 0"
+ },
+ "vnf-resource-assignments": {
+ "availability-zones": {
+ "availability-zone": [
+ "nova"
+ ],
+ "max-count": 1
+ },
+ "vnf-networks": {
+ "vnf-network": []
+ }
+ }
+ },
+ "request-information": {
+ "request-id": "robot12",
+ "order-version": "1",
+ "notification-url": "openecomp.org",
+ "order-number": "1",
+ "request-action": "PreloadVfModuleRequest"
+ },
+ "sdnc-request-header": {
+ "svc-request-id": "robot12",
+ "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
+ "svc-action": "reserve"
+ }
+ }
+ }'
+
+
+Module-2 Preload
+~~~~~~~~~~~~~~~~
+::
+
+
+ curl -X POST \
+ http://<Any_K8S_Node_IP_Address>:30202/restconf/operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: 5f2490b3-6e4a-4512-9a0d-0aa6f6fa0ea8' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "input": {
+ "preload-vf-module-topology-information": {
+ "vf-module-topology": {
+ "vf-module-topology-identifier": {
+ "vf-module-name": "vPacketGen-0211-1"
+ },
+ "vf-module-parameters": {
+ "param": [
+ {
+ "name": "vpg_image_name",
+ "value": "ubuntu-16-04-cloud-amd64"
+ },
+ {
+ "name": "vpg_flavor_name",
+ "value": "m1.medium"
+ },
+ {
+ "name": "public_net_id",
+ "value": "public"
+ },
+ {
+ "name": "int_pktgen_private_net_id",
+ "value": "vLBMS_zdfw1pktgen01_private_ms"
+ },
+ {
+ "name": "int_pktgen_private_subnet_id",
+ "value": "vLBMS_zdfw1pktgen01_private_sub_ms"
+ },
+ {
+ "name": "onap_private_net_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "onap_private_subnet_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "pktgen_private_net_cidr",
+ "value": "192.168.9.0/24"
+ },
+ {
+ "name": "onap_private_net_cidr",
+ "value": "10.0.0.0/16"
+ },
+ {
+ "name": "vlb_int_pktgen_private_ip_0",
+ "value": "192.168.9.111"
+ },
+ {
+ "name": "vpg_int_pktgen_private_ip_0",
+ "value": "192.168.9.110"
+ },
+ {
+ "name": "vpg_onap_private_ip_0",
+ "value": "10.0.150.2"
+ },
+ {
+ "name": "vpg_name_0",
+ "value": "vpg-0211-1"
+ },
+ {
+ "name": "vlb_0_mac_address",
+ "value": "fa:16:3e:00:01:10"
+ },
+ {
+ "name": "vpg_0_mac_address",
+ "value": "fa:16:3e:00:01:20"
+ },
+ {
+ "name": "pg_int",
+ "value": "192.168.9.109"
+ },
+ {
+ "name": "vnf_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vf_module_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vnf_name",
+ "value": "vLBMS"
+ },
+ {
+ "name": "demo_artifacts_version",
+ "value": "1.6.0-SNAPSHOT"
+ },
+ {
+ "name": "install_script_version",
+ "value": "1.6.0-SNAPSHOT"
+ },
+ {
+ "name": "nb_api_version",
+ "value": "1.2.0"
+ },
+ {
+ "name": "keypair",
+ "value": "vlb_key"
+ },
+ {
+ "name": "cloud_env",
+ "value": "openstack"
+ },
+ {
+ "name": "nexus_artifact_repo",
+ "value": "https://nexus.onap.org"
+ },
+ {
+ "name": "sec_group",
+ "value": "default"
+ }
+ ]
+ }
+ },
+ "vnf-topology-identifier-structure": {
+ "vnf-name": "vLoadBalancer-Vnf-0211-1",
+ "vnf-type": "vLoadBalancer/vLoadBalancer 0"
+ },
+ "vnf-resource-assignments": {
+ "availability-zones": {
+ "availability-zone": [
+ "nova"
+ ],
+ "max-count": 1
+ },
+ "vnf-networks": {
+ "vnf-network": []
+ }
+ }
+ },
+ "request-information": {
+ "request-id": "robot12",
+ "order-version": "1",
+ "notification-url": "openecomp.org",
+ "order-number": "1",
+ "request-action": "PreloadVfModuleRequest"
+ },
+ "sdnc-request-header": {
+ "svc-request-id": "robot12",
+ "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
+ "svc-action": "reserve"
+ }
+ }
+ }'
+
+
+Module-3 Preload
+~~~~~~~~~~~~~~~~
+
+::
+
+ curl -X POST \
+ http://<Any_K8S_Node_IP_Address>:30202/restconf/operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation \
+ -H 'Content-Type: application/json' \
+ -H 'Postman-Token: fd0a4706-f955-490a-875e-08ddd8fe002e' \
+ -H 'cache-control: no-cache' \
+ -d '{
+ "input": {
+ "preload-vf-module-topology-information": {
+ "vf-module-topology": {
+ "vf-module-topology-identifier": {
+ "vf-module-name": "vDNS-0125-1"
+ },
+ "vf-module-parameters": {
+ "param": [
+ {
+ "name": "vdns_image_name",
+ "value": "ubuntu-16-04-cloud-amd64"
+ },
+ {
+ "name": "vdns_flavor_name",
+ "value": "m1.medium"
+ },
+ {
+ "name": "public_net_id",
+ "value": "public"
+ },
+ {
+ "name": "int_private_net_id",
+ "value": "vLBMS_zdfw1lb01_private"
+ },
+ {
+ "name": "int_private_subnet_id",
+ "value": "vLBMS_zdfw1lb01_private_sub_ms"
+ },
+ {
+ "name": "onap_private_net_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "onap_private_subnet_id",
+ "value": "oam_onap_vnf_test"
+ },
+ {
+ "name": "vlb_private_net_cidr",
+ "value": "192.168.10.0/24"
+ },
+ {
+ "name": "onap_private_net_cidr",
+ "value": "10.0.0.0/16"
+ },
+ {
+ "name": "vlb_int_private_ip_0",
+ "value": "192.168.10.111"
+ },
+ {
+ "name": "vlb_onap_private_ip_0",
+ "value": "10.0.150.1"
+ },
+ {
+ "name": "vlb_int_pktgen_private_ip_0",
+ "value": "192.168.9.111"
+ },
+ {
+ "name": "vdns_int_private_ip_0",
+ "value": "192.168.10.212"
+ },
+ {
+ "name": "vdns_onap_private_ip_0",
+ "value": "10.0.150.4"
+ },
+ {
+ "name": "vdns_name_0",
+ "value": "vdns-0211-1"
+ },
+ {
+ "name": "vnf_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vf_module_id",
+ "value": "vLoadBalancerMS"
+ },
+ {
+ "name": "vnf_name",
+ "value": "vLBMS"
+ },
+ {
+ "name": "install_script_version",
+ "value": "1.6.0-SNAPSHOT"
+ },
+ {
+ "name": "nb_api_version",
+ "value": "1.2.0"
+ },
+ {
+ "name": "keypair",
+ "value": "vlb_key"
+ },
+ {
+ "name": "cloud_env",
+ "value": "openstack"
+ },
+ {
+ "name": "sec_group",
+ "value": "default"
+ },
+ {
+ "name": "nexus_artifact_repo",
+ "value": "https://nexus.onap.org"
+ }
+ ]
+ }
+ },
+ "vnf-topology-identifier-structure": {
+ "vnf-name": "vLoadBalancer-Vnf-0125-1",
+ "vnf-type": "vLoadBalancer/vLoadBalancer 0"
+ },
+ "vnf-resource-assignments": {
+ "availability-zones": {
+ "availability-zone": [
+ "nova"
+ ],
+ "max-count": 1
+ },
+ "vnf-networks": {
+ "vnf-network": []
+ }
+ }
+ },
+ "request-information": {
+ "request-id": "robot12",
+ "order-version": "1",
+ "notification-url": "openecomp.org",
+ "order-number": "1",
+ "request-action": "PreloadVfModuleRequest"
+ },
+ "sdnc-request-header": {
+ "svc-request-id": "robot12",
+ "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
+ "svc-action": "reserve"
+ }
+ }
+ }'
+
+The Heat environment files already set many parameters used for VF module instantiation. Those parameters can be reused in the SDNC preload too, while placeholders like "PUT THE IP ADDRESS HERE" or "PUT THE PUBLIC KEY HERE" must be overridden.
+
+To instantiate VF modules, please refer to this wiki page: https://wiki.onap.org/display/DW/Tutorial+vIMS%3A+VID+Instantiate+the+VNF using vLB as ServiceType.
+
+6) **Post Instantiation Actions**: Please refer to Sections 3-1 for vLB configuration and Section 3-2 for resource orchestration with heatbridge.
+
+7) **Triggering Scale Out Manually**: Please refer to Section 4 to trigger scale out manually with direct API call to SO.
+
+
+PART 6 - Known Issues and Resolutions
+-------------------------------------
+1) When running closed loop-enabled scale out, the closed loop designed in CLAMP conflicts with the default closed loop defined for the old vLB/vDNS use case
+
+Resolution: Change TCA configuration for the old vLB/vDNS use case
+
+- Connect to Consul: http://ANY_K8S_IP:30270 and click on "Key/Value" → "dcae-tca-analytics"
+- Change "eventName" in the vLB default policy to something different, for example "vLB" instead of the default value "vLoadBalancer"
+- Change "subscriberConsumerGroup" in the TCA configuration to something different, for example "OpenDCAE-c13" instead of the default value "OpenDCAE-c12"
+- Click "UPDATE" to upload the new TCA configuration
+
+2) During Guilin testing, it has been noticed that there is an issue between SO and APPC for Healthcheck queries, this does not prevent the use case to proceed but limit APPC capabilities