...
- Parse Template (e.g. OpenStack Heat Template)
- For each VNFC, instance type in the template
- Fetch Cloud-Agnostic Workload Deployment Policy (Intent) based on VNFC (e.g. vGW)
- Value/Content: <Policy JSON>
- Parse Policy JSON
- Modify template (if needed) according to Intent
- Intent examples of interest for R3
- "Infrastructure High Availability (HA) for VNF"
- "Infrastructure Resource Isolation for VNF"
- "Burstable QoS"
- "Infrastructure Resource Isolation for VNF"
- "Guaranteed QoS"
- Intent examples of interest for R3
- Fetch Cloud-Agnostic Workload Deployment Policy (Intent) based on VNFC (e.g. vGW)
- For each VNFC, instance type in the template
Policy (Intent) Realization
- Determining the flavor (OpenStack-based VIMs) # same logic applies for instance type in Azure
- Each VNFC uniquely maps to a Flavor - for e.g. VNFC "vgw" maps to "vgw-base", "vDNS" maps to "vDNS-base"
- Beyond Casablanca
- VNFC intent to realization mapping happens through A&AI.
- "Infrastructure High Availability (HA) for VNF"
- OpenStack-based Cloud realization
- For R3, Host-based anti-affinity using server groups //Beyond R3, Support other anti-affinity models at availability zone level etc.
- Implementation Notes:
- Instance "count" in heat template specifies VNFC scale out factor
- While dynamic injection of server group into heat template is ideal, a simple starting point could be just switching to an alternate heat template which is identical to the deployment template and additionally has server group
- Azure realization
- Availability Set?
- OpenStack-based Cloud realization
"Infrastructure Resource Isolation for VNF" – { "qosProperty": { {"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "25"} } }
OpenStack-based VMware VIO Cloud realization
- This can be achieved through min guarantee -- Max or limit (upper bound) & Min or Reservation (guarantee) are part of OpenStack flavor metadata
- Example
- VNFC "vgw" with "Guaranteed QoS"
- vCPU (Min/Max) - 16, Mem (Min/Max) - 32GB
- Maps to "vgw-Guaranteed-QoS" flavor for OpenStack-based VIMs
- Same VNFC with "Burstable QoS", 25% over-subscription
- vCPU (Min) - 16, Mem (Min) - 32GB
- vCPU (Max) - 20, Mem (Max) - 40GB
- Maps to "vgw-Burstable-QoS-25-percent-oversubscription" flavor for OpenStack-based VIMs
- VNFC "vDNS" with "Guaranteed QoS" & "Infrastructure High Availability"
- Maps to "vDNS-Guaranteed-QoS" flavor and "vDNS-infrastructure-high-availability" heat template
- VNFC "vgw" with "Guaranteed QoS"
- Only certain pre-defined over-subscription values are allowed to simplify implementation
- Implementation Notes:
- While dynamic injection of limit/reservation into flavor is ideal, a simple starting would be to be to switch to a pre-defined flavor in the environment file
- For aforementioned example
- Original flavor - "flavor-xyz-no-oversubscription"
- Modified flavor based on Policy - "flavor-xyz-25-percent-oversubscription"
- For aforementioned example
- While dynamic injection of limit/reservation into flavor is ideal, a simple starting would be to be to switch to a pre-defined flavor in the environment file
- Example
- Implementation Notes:
- From an implementation stand point, MC would be exposing a Workload Deployment Policy (Intent) API
- Input : deployment-intent, cloud owner, cloud region, deployment template, deployment environment file, ...
- Output : Success or Failure with reason, modified deployment template, modified deployment environment file, ...
- From an implementation stand point, MC would be exposing a Workload Deployment Policy (Intent) API
- Determining the flavor (OpenStack-based VIMs) # same logic applies for instance type in Azure
SO ↔ MC API extension - aligned to the SO/MC API defined by SO Casablanca HPA Design to minimize the terminology set
(ThisJson Schema with use case examples - (the exact data is sent from OOF to SO. SO transparently echoes this data to MC)
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
# #Spec Reference: https://wiki.onap.org/display/DW/Edge+Scoping+MVP+for+Casablanca+-+ONAP+Enhancements#EdgeScopingMVPforCasablanca-ONAPEnhancements-Cloud-agnosticPlacement/Networking&HomingPolicies(Phase1-CasablancaMVP,Phase2-StretchGoal) # #The same information is opaquely passed from OOF to SO # # from jsonschema import validate oof_to_so_and_so_to_mc_api_ext_request_schema = { "vnfc-directives": {#Example 1: vCPE, Burstable QoS #vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS # "oof_directives":{ "directives":[ { "type "vnfc_directives": "array",[ { "items": { "$refvnfc_id": "#/definitions/xxx1" } vgw", }, "definitionsdirectives":[ { "xxx1": { "typedirective_name": "object"Resource-Isolation-Intent-directive", "propertiesattributes" ::[ { "attribute_name": "Infrastructure Resource #Isolation VNFC name/id for VNF", "vnfc-name-idattribute_value": {"type":Burstable QoS"string"}, }, { # cloud-specific realization of the specified deployment intent "attribute_name": "Infrastructure Resource Isolation for # happens in multi-cloud in the cloud-specific plugin VNF - Burstable QoS Oversubscription Percentage", "directive-listattribute_value": {"25", }, "type": "array", ] }, "items": { "$ref": "#/definitions/xxx2" } ] }, },] }, ] } # #Example 2: #vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS # "definitionsoof_directives":{ { "directives":[ { "vnfc_directives":[ "xxx2": { { "vnfc_id":"vgw", "type"directives":[ "object", { "propertiesdirective_name" : {:"Resource-Isolation-Intent-directive", "attributes":[ { #Intent, e.g. Infrastructure High Availability "attribute_name": "Infrastructure Resource Isolation for VNF", "attribute_value": "Guaranteed QoS", "attribute_name": {"type", "string" }, ] }, #Optional ] }, ] }, ] "attribute_value": {"type", "string"}, } # #Example 3: #vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS # "oof_directives":{ "directives":[ { "directive-list-inner"vnfc_directives":[ { { "vnfc_id":"vdns", "directives":[ "type": "array", { "directive_name":"Resource-Isolation-Intent-directive", "items"attributes": { "$ref": "#/definitions/xxx3" }[ { "attribute_name": "Infrastructure Resource Isolation for VNF", }, "attribute_value": "Burstable QoS", }, { "definitions": { "attribute_name": "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage", "xxx3"attribute_value": {"25", }, ] "type": "object", }, { "directive_name":"Infrastructure-HA-Intent-directive", "attributes":[ { "attribute_name": "Infrastructure High Availability for VNF", #Intent, e.g. Infrastructure High Availability for VNF }, ] }, "attribute_name": {"type", "string"}, ] }, ] }, ] } # # Example 4: # vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for #OptionalVNF # with Guaranteed QoS # "oof_directives":{ "directives":[ { "vnfc_directives":[ { "attributevnfc_valueid": {"typevdns", "string"}, "directives":[ { }, "directive_name":"Resource-Isolation-Intent-directive", "attributes":[ { }, "attribute_name": "Infrastructure Resource Isolation for VNF", "attribute_value": }"Guaranteed QoS", }, }, ] }, { }"directive_name":"Infrastructure-HA-Intent-directive", }, }, } # #Example 1: vCPE, Burstable QoS #vCPE: Infrastructure Resource Isolation"attributes":[ { "attribute_name": "Infrastructure High Availability for VNF with Burstable QoS # oof_to_so_and_so_to_mc_api_ext_request_instance1 = { ", "vnfc-directives": [ { "vnfc-name-id": "vgw"}, "intent-directive-list": [] }, {] }, ] "attribute_name": "Infrastructure Resource Isolation for VNF"}, ] "attribute_value": "Burstable QoS", "intent-directive-list-inner": [ { "attribute_name": "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage", "attribute_value": "25", }, ], }, ], }, # #hpa is purely exemplary in this example # { "vnfc-name-id": "vgw", "hpa-directive-list": [ { "attribute_name": "sriov-param1", "attribute_value": "sriov-param1-value", }, ], }, ], } # #Example 2: #vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS # oof_to_so_and_so_to_mc_api_ext_request_instance2 = { "vnfc-directives": [ { "vnfc-name-id": "vdns", "intent-directive-list": [ { "attribute_name": "Infrastructure Resource Isolation for VNF", "attribute_value": "Guaranteed QoS", }, ], }, ], } # #Example 3: #vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS # oof_to_so_and_so_to_mc_api_ext_request_instance3 = { "vnfc-directives": [ { "vnfc-name-id": "vdns", "intent-directive-list": [ { "attribute_name": "Infrastructure High Availability for VNF", }, { "attribute_name": "Infrastructure Resource Isolation for VNF", "attribute_value": "Burstable QoS", "intent-directive-list-inner": [ { "attribute_name": "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage", "attribute_value": "25", }, ], }, ], }, ], } # # Example 4: # vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF # with Guaranteed QoS # oof_to_so_and_so_to_mc_api_ext_request_instance4 = { "vnfc-directives": [ { "vnfc-name-id": "vdns", "intent-directive-list": [ { "attribute_name": "Infrastructure High Availability for VNF", }, { "attribute_name": "Infrastructure Resource Isolation for VNF", "attribute_value": "Guaranteed QoS", }, ], }, ], } validate(oof_to_so_and_so_to_mc_api_ext_request_instance1, oof_to_so_and_so_to_mc_api_ext_request_schema) validate(oof_to_so_and_so_to_mc_api_ext_request_instance2, oof_to_so_and_so_to_mc_api_ext_request_schema) validate(oof_to_so_and_so_to_mc_api_ext_request_instance3, oof_to_so_and_so_to_mc_api_ext_request_schema) validate(oof_to_so_and_so_to_mc_api_ext_request_instance4, oof_to_so_and_so_to_mc_api_ext_request_schema) } |
Follow ups:
- Use Cases for Integration testing
- vCPE
- In the current state, this use case cannot support the intent "Infra HA for VMs in a VNF"
- This use case has been tested in R2 with OOF↔MC capacity check API
- vDNS
- Can support intent "Infra HA for VMs in a VNF" and "Infrastructure Resource Isolation for VNF"
- Nothing additional needed in OOF or MC
- Changes needed in SO to call OOF API
- Marcus from Intel is driving this
- vCPE
- Policy DB – is there any restriction on the type of json objects that can be stored?
- Matti to follow up with Ankit
...