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.
...
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.
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
# #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": "" } ] } ] } ] } } |
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#
#Example 1: vCPE vgw, Burstable QoS
#vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS
#
{
"service": "cloudPolicy",
"policyName": "oofCasablanca.cloudPolicy_vgw",
"description": "Cloud policy for vgw",
"templateVersion": "0.0.1",
"version": "1.0",
"priority": "3",
"riskType": "test",
"riskLevel": "2",
"guard": "False",
"content": {
"resources": "vgw",
"identity": "cloudPolicy_vgw",
"policyScope": ["vgw", "US", "INTERNATIONAL", "ip", "vgw"],
"policyType": "hpaPolicy",
"flavorFeatures": [
{
"id" : "<vdu.Name>",
"type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
"directives":[
{
"directive_name":"flavor",
"attributes":[
{
"attribute_name":" oof_returned_flavor_for_vgw ", //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":"Infrastructure Resource Isolation for VNF", "hpa-attribute-value": "Burstable QoS","operator": "=", "unit": ""},
{"hpa-attribute-key":"Burstable QoS Oversubscription Percentage", "hpa-attribute-value": "25","operator": "=", "unit": ""},
]
},
]
}
]
}
}
#
#Example 2: vCPE vgw, Guaranteed QoS
#vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS
#
{
"service": "cloudPolicy",
"policyName": "oofCasablanca.cloudPolicy_vgw",
"description": "Cloud policy for vgw",
"templateVersion": "0.0.1",
"version": "1.0",
"priority": "3",
"riskType": "test",
"riskLevel": "2",
"guard": "False",
"content": {
"resources": "vgw",
"identity": "cloudPolicy_vgw",
"policyScope": ["vgw", "US", "INTERNATIONAL", "ip", "vgw"],
"policyType": "hpaPolicy",
"flavorFeatures": [
{
"id" : "<vdu.Name>",
"type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
"directives":[
{
"directive_name":"flavor",
"attributes":[
{
"attribute_name":" oof_returned_flavor_for_vgw ", //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":"Infrastructure Resource Isolation for VNF", "hpa-attribute-value": "Guaranteed QoS","operator": "=", "unit": ""},
]
},
]
}
]
}
}
#
#Example 3: vDNS, Burstable QoS & Infra HA
#vDNS: Infrastructure Resource Isolation for VNF with Burstable QoS & Infrastructure HA
#
{
"service": "cloudPolicy",
"policyName": "oofCasablanca.cloudPolicy_vdns",
"description": "Cloud policy for vdns",
"templateVersion": "0.0.1",
"version": "1.0",
"priority": "3",
"riskType": "test",
"riskLevel": "2",
"guard": "False",
"content": {
"resources": "vdns",
"identity": "cloudPolicy_vdns",
"policyScope": ["vgw", "US", "INTERNATIONAL", "ip", "vdns"],
"policyType": "hpaPolicy",
"flavorFeatures": [
{
"id" : "<vdu.Name>",
"type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
"directives":[
{
"directive_name":"flavor",
"attributes":[
{
"attribute_name":" oof_returned_flavor_for_vdns ", //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":"Infrastructure Resource Isolation for VNF", "hpa-attribute-value": "Burstable QoS","operator": "=", "unit": ""},
{"hpa-attribute-key":"Burstable QoS Oversubscription Percentage", "hpa-attribute-value": "25","operator": "=", "unit": ""},
{"hpa-attribute-key":"Infrastructure High Availability for VNF", "hpa-attribute-value": "","operator": "", "unit": ""},
]
},
]
}
]
}
}
#
#Example 4: vDNS, Guaranteed QoS & Infra HA
#vDNS: Infrastructure Resource Isolation for VNF with Burstable QoS & Infrastructure HA
#
{
"service": "cloudPolicy",
"policyName": "oofCasablanca.cloudPolicy_vdns",
"description": "Cloud policy for vdns",
"templateVersion": "0.0.1",
"version": "1.0",
"priority": "3",
"riskType": "test",
"riskLevel": "2",
"guard": "False",
"content": {
"resources": "vdns",
"identity": "cloudPolicy_vdns",
"policyScope": ["vgw", "US", "INTERNATIONAL", "ip", "vdns"],
"policyType": "hpaPolicy",
"flavorFeatures": [
{
"id" : "<vdu.Name>",
"type":"vnfc/tocsa.nodes.nfv.Vdu.Compute",
"directives":[
{
"directive_name":"flavor",
"attributes":[
{
"attribute_name":" oof_returned_flavor_for_vdns ", //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":"Infrastructure Resource Isolation for VNF", "hpa-attribute-value": "Guaranteed QoS","operator": "=", "unit": ""},
{"hpa-attribute-key":"Infrastructure High Availability for VNF", "hpa-attribute-value": "","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.
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
{ "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/).
...