Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 15 Next »

Background

In R2, SO is the only consumer of OOF. When it sends out homing requests, OOF will respond with the most appropriate flavors accordingly.

Taking the VNF vG inside vCPE use case as an example:

Inside the vG VNF Resources, there's one VFC(or VNFC) called vG(could be multiple VFCs inside one VNF Resource, but only got one here in this example). And for the vG VFC, there's a vG VF Module which is somewhat a deployment unit in HEAT for that VFC. And the vG VF Module can be used to deploy multiple vG VFCs in one time.

When SO sends out a request containing the vG VNF information to OOF,  OOF will respond with flavor for each VFC inside vG VNF Resources. And let SO do the extra steps of deployments.

 

Now in R3, OOF is going to support both two orchestrators (SO and VF-C) in ONAP. As they are using two different Models(HEAT and Pure Tosca), the expression differs from each other. In order to make OOF capable to process these two different requests within the same engine, we'd like to combine these expressions together inside a single Policy. 


Sample Policy Schema

Thus a data block called 'directives' and some attributes(type and id) will be added inside policy to transfer the information that needed by OOF. And it also contains two parts, one includes the flavor at a VNFC level, the other contains the specific information needed by such hpa-feature.

The newly added attributes 'id' and 'type' will be used by VF-C to identify each vdu(a corresponding concept to VNFC) and the 'directive' data block will be used as a placeholder for the values provided by Policy or AAI. 

R3 HPA Policy example
#
#Example 1: vFW, Basic Capability
#one VNFC(VFC) with one basic capability requirement
#
{
  "service": "hpaPolicy",
  "policyName": "oofCasablanca.hpaPolicy_vFW",
  "description": "HPA policy for vFW",
  "templateVersion": "0.0.1",
  "version": "1.0",
  "priority": "3",
  "riskType": "test",
  "riskLevel": "2",
  "guard": "False",
  "content": {
    "resources": "vFW",
    "identity": "hpaPolicy_vFW",
    "policyScope": ["vFW", "US", "INTERNATIONAL", "ip", "vFW"],
    "policyType": "hpaPolicy",
    "flavorFeatures": [
      {
        "id" : "<vdu.Name>",
        "type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
        "directives":[  
           {  
             "directive_name":"flavor",
             "attributes":[  
                {  
                  "attribute_name":" oof_returned_flavor_for_firewall ", //Admin needs to ensure that this value is same as flavor parameter in HOT 
                  "attribute_value": "<Blank>" 
                } 
               ]
           }
          ]
        "flavorProperties": [
          {
            "hpa-feature": "basicCapabilities",
            "mandatory": "True",
            "architecture": "generic",
            "hpa-feature-attributes": [
              { "hpa-attribute-key": "numVirtualCpu", "hpa-attribute-value": "6", "operator": "=", "unit": "" }
            ]
          },
          {
            "hpa-feature": "basicCapabilities",
            "mandatory": "True",
            "architecture": "generic",
            "hpa-feature-attributes": [
              { "hpa-attribute-key": "virtualMemSize", "hpa-attribute-value": "6", "operator": "=", "unit": "GB" },
            ]
          }
        ]
      }
    ]
  }
}






#
#Example 2: vFW, Pcie Passthrough
#one VNFC(VFC) with two Pcie Passthrough requirements
#
{
  "service": "hpaPolicy",
  "policyName": "oofCasablanca.hpaPolicy_vFW",
  "description": "HPA policy for vFW",
  "templateVersion": "0.0.1",
  "version": "1.0",
  "priority": "3",
  "riskType": "test",
  "riskLevel": "2",
  "guard": "False",
  "content": {
    "resources": "vFW",
    "identity": "hpaPolicy_vFW",
    "policyScope": ["vFW", "US", "INTERNATIONAL", "ip", "vFW"],
    "policyType": "hpaPolicy",
    "flavorFeatures": [
      {
        "id" : "<vdu.Name>",
        "type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
        "directives":[  
           {  
             "directive_name":"flavor",
             "attributes":[  
                {  
                  "attribute_name":" oof_returned_flavor_for_firewall ", //Admin needs to ensure that this value is same as flavor parameter in HOT 
                  "attribute_value": "<Blank>" 
                } 
               ]
           }
          ]
        "flavorProperties": [
          {
            "hpa-feature": "pciePassthrough",
            "mandatory": "True",
            "architecture": "generic",
            "directives" : [
              {
                "directive_name": "pciePassthrough_directive",
                "attributes": [
                   { "attribute_name": "oof_returned_vnic_type_for_firewall_protected",
                     "attribute_value": "direct"
                   },
                   { "attribute_name": "oof_returned_provider_network_for_firewall_protected",
                     "attribute_value": "physnet1"
                   }
                ]
              }
            ],
            "hpa-feature-attributes": [
              { "hpa-attribute-key": "pciVendorId", "hpa-attribute-value": "1234", "operator": "=", "unit": "" },
              { "hpa-attribute-key": "pciDeviceId", "hpa-attribute-value": "5678", "operator": "=", "unit": "" },
              { "hpa-attribute-key": "pciCount", "hpa-attribute-value": "1", "operator": ">=", "unit": "" }
            ]
          },
          {
            "hpa-feature": "pciePassthrough",
            "mandatory": "True",
            "architecture": "generic",
            "directives" : [
              {
                "directive_name": "pciePassthrough_directive",
                "attributes": [
                   { "attribute_name": "oof_returned_vnic_type_for_firewall_unprotected",
                     "attribute_value": "direct"
                   }
                   { "attribute_name": "oof_returned_provider_for_firewall_unprotected",
                     "attribute_value": "physnet2"
                   }
                ]
              }
            ],
            "hpa-feature-attributes": [
              { "hpa-attribute-key": "pciVendorId", "hpa-attribute-value": "3333", "operator": "=", "unit": "" },
              { "hpa-attribute-key": "pciDeviceId", "hpa-attribute-value": "7777", "operator": "=", "unit": "" },
              { "hpa-attribute-key": "pciCount", "hpa-attribute-value": "1", "operator": ">=", "unit": "" }
            ]
          }
        ]
      }
    ]
  }
}



HAS Homing Response after changes

Accordingly, the data structure 'directives' will also be added inside OOF HAS response. Since currently the pcie_directives can be get from either Policy or AAI,  HAS still need to process the pcie_directives.

 Sample directive data in AAI

hpa-feature=”pciePassthrough”,

architecture=”{hw_arch}",

version=”v1”,

Hpa-attribute-key

Hpa-attribute-value

pciVendorId

2345

pciDeviceId

6789

pciCount

1

directive

[

{"attribute_name": "vnic-type", "attribute_value": "direct"},

{"attribute_name": "physical-network", "attribute_value": "physnet2"},

]

'id' and 'type' will help VF-C to filter one VDU(VNFC in HEAT accordingly), and attributes inside will be used to pass down values of SRIOV NIC information. 

In order to make the response more generic and extensible, all the attributes added will be add inside that 'directive' data block.  Please find the sample below for vG.

Status - Done

HAS Homing response (JSON)
{
  "plans": [
    {
      "status": "done",
      "id": "plan_id",
      "name": "Plan Name 1",
      "links": [
        [
          {
            "href": "http://conductor:8091/v1/plans/plan_id",
            "rel": "self"
          }
        ]
      ],
      "recommendations": [
        {
          "vG": {
            "inventory_provider": "aai",
            "candidate": {
              "candidate_id": "DLLSTX1A",
              "cloud_owner": "CloudOwner1",
              "inventory_type": "cloud",
              "location_id": "DLLSTX1A",
              "location_type": "openstack-cloud"
            },
            "attributes": {
              "directives": [
                {"id": "<vdu.Name>",
                 "type": "<vnfc/vdu>",
                 "directives": [
                   {"type": "flavor_directives",
                    "attributes": [
                      {"attribute_name":"flavor_label_1",
                       "attribute_value": "vim_flavor_X",
                      }
                    ]
                   },
                   {"type": "pciePassthrough_directive",
                    "attributes": [
                      {"attribute_name": "vnic_label_1",
                       "attribute_value": "direct"
                      }, 
                      {"attribute_name":"physicalNetwork",
                       "attribute_value": "physnet1"
                      }
                     ]
                   },
                   {"type": "pciePassthrough_directive",
                    "attributes": [
                      {"attribute_name": "vnic_label_2",
                       "attribute_value": "direct"
                      }, 
                      {"attribute_name":"physicalNetwork",
                       "attribute_value": "physnet2"
                      }
                     ]
                   }
                ]
              },  
              "cloud_owner": "CloudOwner1",
              "physical-location-id": "DLLSTX1A",
              "cloud_version": "3.0",
			  "vim-id": "CloudOwner1_DLLSTX1A"
            }
          }
        },
        {
          "vGMuxInfra": {
            "attributes": {
              "host_id": "vgmux_host_name",
              "cloud_owner": "CloudOwner1",
              "physical-location-id": "DLLSTX1A",
              "service_instance_id": "21d5f3e8-e714-4383-8f99-cc480144505a",
              "cloud_version": "3.0",
			  "vim-id": "CloudOwner1_DLLSTX1A"
            },
            "inventory_provider": "aai",
            "service_resource_id": "12345",
            "candidate": {
              "is_rehome": "false",
              "location_id": "DLLSTX1A",
              "inventory_type": "service",
              "candidate_id": "21d5f3e8-e714-4383-8f99-cc480144505a",
              "host_id": "vgmux_host_name",
              "cloud_owner": "CloudOwner1",
              "location_type": "openstack-cloud"
            }
          }
        }
      ]
    }
  ]
}



OOF Asynchronous Response after changes

The asynchronous will be changed accordingly. And it also aligns with the schema from Multicloud( Gerrit link: https://gerrit.onap.org/r/#/c/60691/).

OOF Asynchronous Homing response (JSON)
{
  "requestId": "xxxx",
  "transactionId": " xxxx ",
  "statusMessage": " xxxx ",
  "requestStatus": "completed",
  "solutions": {
    "placementSolutions": [
      [
        { "resourceModuleName": " vG ",
          "serviceResourceId": " xxxx ",
          "solution": {
           "identifierType": "serviceInstanceId",
           "identifiers": [
             " xxxx "
             ],
           "cloudOwner": " xxxx "
          },
         "assignmentInfo": [
            {  "key":"isRehome",
               "value":"false"    },
            {  "key":"locationId",
               "value":"DLLSTX1A"    },
            {  "key":"locationType",
               "value":"openstack-cloud" },
            {  "key":"vimId",
               "value":"rackspace_DLLSTX1A"  },
            {  "key":"physicalLocationId",
               "value":"DLLSTX1223"    },           
            {  "key":"oofDirectives",
               "value": { "directives":[
                { "id":"<vdu.name>",   
                  "type":"vnfc",
                  "directives":[                                  
                     {  "type":"flavor_directive",
                        "attributes":[
                            {   "attribute_name":"flavor_label_1",
                                "attribute_value":"<flavor_name>"  #VIM Flavor, which oof seleted.
                            }
                        ]
                     },
                     {  "type": "pciePassthrough_directive",
                        "attributes":[
                            {"attribute_name":"vnic_label_1", "attribute_value":"direct"},
                            {"attribute_name":"provider_network", "attribute_value":"physnet1"}     
                        ]
                     },
                     {  "type": "pciePassthrough_directive",
                        "attributes": [
                            {"attribute_name":"vnic_label_2", "attribute_value":"direct"},                 
                            {"attribute_name":"provider_network", "attribute_value":"physnet2"}
                        ]       
                      }                
                    ]                                         
                  }
                ]
               }
             }
           ]
         }  
      ]
    ],
    "licenseSoutions": [
      {
       "resourceModuleName": "string",
       "serviceResourceId": "string",
       "entitlementPoolUUID": [
         "string"
        ],
       "licenseKeyGroupUUID": [
         "string"
        ],
       "entitlementPoolInvariantUUID": [
         "string"
        ],
       "licenseKeyGroupInvariantUUID": [
         "string"
        ]
      }
    ]
  }
}


  • No labels