...
Step 1. SO → OOF - Get Target <Cloud Owner, Cloud Region> for the Service Instances
Step 2. OOF → Policy - Fetch
...
Cloud Selection Policy for Homing
2a) OOF Processing - the fetched Policy (example below) is stored in a local data structure and is available for further use (need OOF code changes).
...
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) # from jsonschema import validate oof_enhanced_cloud_selection_policy_schema = { "service": {"type": "string"}, "policyName": {"type": "string"}, "descriptionpolicyDescription": {"type": "string"}, "templateVersion": {"type": "string"}, "version": {"type": "string"}, "priority": {"type": "string"}, "riskType": {"type": "string"}, "riskLevel": {"type": "string"}, "guard": {"type": "string"}, "content": {"type" : "object"}, #"required": ["cost-intent", "deployment-intent"], "properties" : { # vnfc is not used in the OOF->MC path for R3, this is kept to be consistent # with the SO-> MC path "vnfc": {"type": "string"}, # evaluate cloud cost if set # cost is fixed per cloud type for all workloads -- simplifying assumption for R3 # cost specified in the respective plugin through a configuration file "cost-intent" : {"type" : "boolean"}, "deployment-intent": {"type": "object"}, "properties" : { # Azure, K8S, OpenStack, VMware VIO, Wind River Titanium "Cloud Type (Cloud Provider)": {"type", "string"}, "Infrastructure High Availability for VNF": {"type", "boolean"}, "Infrastructure Resource Isolation for VNF": {"type", "string"}, # Infrastructure Resource Isolation for VNF # Only certain pre-defined over-subscription values are allowed to # reflect practical deployment and simplify implementation for R3 "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": {"type": "int"}, }, }, "required": ["cost-intent", "deployment-intent"], "resources": {"type", "array"}, #"vgw" is also interchangeably used as "vg" "applicableResources": {"type", "string"}, "identity": {"type", "string"}, "policyScope": {"type", "array"}, "policyType": {"type", "string"}, } # #Example 1: vCPE, Burstable QoS #vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS # oof_cloud_mcselection_policy_api_instance1 = { "service": "cloudSelectionPolicy", "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF", "descriptionpolicyDescription": "Cloud Selection Policy for vCPE VNFs", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "vnfc": "vgw", "cost-intent": True, "deployment-intent": { "Infrastructure Resource Isolation "Cloud Type (Cloud Provider)"for VNF": "VMwareBurstable VIOQoS", "Infrastructure Resource "Infrastructure Resource Isolation for VNF": "Burstable QoS", "Infrastructure Resource Isolation Isolation for VNF - Burstable QoS Oversubscription Percentage": 25, }, }, "resources": ["vgw"], #"vgw" is also interchangeably used as "vg" "applicableResources": "any", "identity": "cloud-atrributes", "policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vgw", "vgmux"], "policyType": "AllPolicy" } # #Example 2: #vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS # oof_mccloud_selection_policy_api_instance2 = { "service": "cloudSelectionPolicy", "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF", "descriptionpolicyDescription": "Cloud Selection Policy for vCPE VNFs", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "vnfc": "vgw", "cost-intent": True, "deployment-intent": { "Infrastructure Resource Isolation for VNF": "Guaranteed QoS", }, }, "resources": ["vgw"], #"vgw" is also interchangeably used as "vg" "applicableResources": "any", "identity": "cloud-atrributes", "policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vgw", "vgmux"], "policyType": "AllPolicy" } # #Example 3: #vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS # oof_mccloud_selection_policy_api_instance3 = { "service": "cloudSelectionPolicy", "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF", "descriptionpolicyDescription": "Cloud Selection Policy for vDNS VNFs", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "vnfc": "vdns", "cost-intent": True, "deployment-intent": { "Cloud Type (Cloud Provider)": "VMware VIO", "Infrastructure High Availability for VNF": True, "Infrastructure Resource Isolation for VNF": "Burstable QoS", "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25, }, }, "resources": ["vDNS"], "applicableResources": "any", "identity": "cloud-atrributes", "policyScope": ["vDNS", "US", "INTERNATIONAL", "vDNS"], "policyType": "AllPolicy" } # # Example 4: # vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF # with Guaranteed QoS # oof_cloud_mcselection_policy_api_instance4 = { "service": "cloudSelectionPolicy", "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF", "descriptionpolicyDescription": "Cloud Selection Policy for vDNS VNFs", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "vnfc": "vdns", "cost-intent": True, "deployment-intent": { "Infrastructure High Availability for VNF": True, "Infrastructure Resource Isolation for VNF": "Guaranteed QoS", }, }, "resources": ["vDNS"], "applicableResources": "any", "identity": "cloud-atrributes", "policyScope": ["vDNS", "US", "INTERNATIONAL", "vDNS"], "policyType": "AllPolicy" } |
Step 3. OOF → A&AI - Fetch Cloud-Agnostic (Standardized) Capabilities for the Service Instance
validate(oof_cloud_selection_policy_instance1, oof_cloud_selection_policy_schema)
validate(oof_cloud_selection_policy_instance2, oof_cloud_selection_policy_schema)
validate(oof_cloud_selection_policy_instance3, oof_cloud_selection_policy_schema)
validate(oof_cloud_selection_policy_instance4, oof_cloud_selection_policy_schema) |
Step 3. OOF → A&AI - Fetch Cloud-Agnostic (Standardized) Capabilities for the Service Instance
3a)3a) OOF Processing - Perform Cloud Agnostic Capability check for each <cloud owner, cloud region>. OOF will prune any <cloud owner, cloud region> which is not satisfying the standardized capabilities.
Step 4. OOF → MC - Push Cloud Agnostic Policy for the Service Instance
4a) OOF Processing
The enhanced OOF ↔ MC capacity check cloud selection API, described below, is filled based on the enhanced Capacity Check & Cloud Selection Policy for Homing retrieved in step 2) – need OOF code changes.
...
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
//flexibility of having cloud type in the new API provides fine grained control, addresses capacity/cost differences across different cloud owners/regions and ensures backward compatibility # #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) # from jsonschema import validate oof_mc_policy_api_request_schema = { "type" : "object", "properties" : { # vnfc is not used in the OOF->MC path for R3, this is kept to be consistent # with the SO-> MC path "vnfc": {"type": "string"}, # evaluate cloud cost if set # cost is fixed per cloud type for all workloads -- simplifying assumption for R3 # cost specified in the respective plugin through a configuration file "cost-intent" : {"type" : "boolean"}, "deployment-intent": {"type": "object"}, "properties" : { # Azure, K8S, OpenStack, VMware VIO, Wind River Titanium "Cloud Type (Cloud Provider)": {"type", "string"}, "Infrastructure High Availability for VNF": {"type", "boolean"}, "Infrastructure Resource Isolation for VNF": {"type", "string"}, # Infrastructure Resource Isolation for VNF # Only certain pre-defined over-subscription values are allowed to # reflect practical deployment and simplify implementation for R3 "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": {"type": "int"}, }, }, "required": ["cost-intent", "deployment-intent"] } # #Example 1: vCPE, Burstable QoS #vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS # oof_mc_policy_api_instance1 = { "vnfc": "vgw", "cost-intent": True, "deployment-intent": { "Cloud Type (Cloud Provider)": "VMware VIO", "Infrastructure Resource Isolation for VNF": "Burstable QoS", "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25, }, } # #Example 2: #vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS # oof_mc_policy_api_instance2 = { "vnfc": "vgw", "cost-intent": True, "deployment-intent": { "Infrastructure Resource Isolation for VNF": "Guaranteed QoS", }, } # #Example 3: #vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS # oof_mc_policy_api_instance3 = { "vnfc": "vdns", "cost-intent": True, "deployment-intent": { "Cloud Type (Cloud Provider)": "VMware VIO", "Infrastructure High Availability for VNF": True, "Infrastructure Resource Isolation for VNF": "Burstable QoS", "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25, }, } # # Example 4: # vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF # with Guaranteed QoS # oof_mc_policy_api_instance4 = { "vnfc": "vdns", "cost-intent": True, "deployment-intent": { "Infrastructure High Availability for VNF": True, "Infrastructure Resource Isolation for VNF": "Guaranteed QoS", }, } oof_mc_policy_api_response_schema = { "cloudRegionNetValue": { "type": "array", "items": { "$ref": "#/definitions/xxx" } }, "definitions": { "xxx": { "type": "object", "required": [ "VIM", "netValue" ], "properties": { # VIM id "VIM": { "type": "string", }, # For R3, netValue signifies cost per VIM id # Referring to cost-intent in the API from OOF -> MC # cost is fixed per cloud type for all workloads # cost specified in the respective plugin through a configuration file "netValue": { "type": "number", } } } } } oof_mc_policy_api_response_instance = { "cloudRegionNetValue": [ { "VIM": "Azure", "netValue": 100 }, { "VIM": "VMware 1", "netValue": 101 }, { "VIM": "Wind River Titanium 2", "netValue": 102 }, { "VIM": "Wind River Titanium 1", "netValue": 102 }, ], } validate(oof_mc_policy_api_instance1, oof_mc_policy_api_request_schema) validate(oof_mc_policy_api_instance2, oof_mc_policy_api_request_schema) validate(oof_mc_policy_api_instance3, oof_mc_policy_api_request_schema) validate(oof_mc_policy_api_instance4, oof_mc_policy_api_request_schema) validate(oof_mc_policy_api_response_instance, oof_mc_policy_api_response_schema) | ||||||||||
Code Block |
JSON Schema with Use Case Examples:
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
# #Spec Reference: https:// //Policy Relevant to Azure plugins // //fixed workload deployment cost for all workloads (simplifying assumption for R3) { "workloadDeploymentCost": "100", } // //Policy Relevant to Wind River OpenStack plugin // //fixed workload deployment cost for all workloads (simplifying assumption for R3) { "workloadDeploymentCost": "100", (set to higher or lower value for testing) } .../wiki.onap.org/display/DW/Edge+Scoping+MVP+for+Casablanca+-+ONAP+Enhancements#EdgeScopingMVPforCasablanca-ONAPEnhancements-Cloud-agnosticPlacement/Networking&HomingPolicies(Phase1-CasablancaMVP,Phase2-StretchGoal) # from jsonschema import validate mc_workload_deployment_cost_policy_schema = { "cloudProviderWorkloadDeploymentCost": { "type": "array", "items": { "$ref": "#/definitions/xxx" } }, "definitions": { "xxx": { "type": "object", "required": [ "cloudProvider", "workloadDeploymentCost" ], "properties": { # VIM id "cloudProvider": { "type": "string", }, # For R3, netValue signifies cost per VIM id # Referring to cost-intent in the API from OOF -> MC # cost is fixed per cloud type for all workloads # cost specified in the respective plugin through a configuration file "workloadDeploymentCost": { "type": "number", } } } } } mc_workload_deployment_cost_policy_instance1 = { "cloudProviderWorkloadDeploymentCost": [ { "cloudProvider": "Azure 1", "workloadDeploymentCost": 100 }, { "cloudProvider": "Azure 2", "workloadDeploymentCost": 101 }, ], } mc_workload_deployment_cost_policy_instance2 = { "cloudProviderWorkloadDeploymentCost": [ { "cloudProvider": "Wind River Titanium Cloud", "workloadDeploymentCost": 100 }, ], } validate(mc_workload_deployment_cost_policy_instance1, mc_workload_deployment_cost_policy_schema) validate(mc_workload_deployment_cost_policy_instance2, mc_workload_deployment_cost_policy_schema) |
5a) MC Processing (need MC code changes)
...
- For R3, Cloud-Agnostic Workload Deployment Policy (Intent) can be stored in the form of configuration file(s) in the OOM K8S Persistent Volumes to simplify implementation.
- For R4 and beyond, this policy (optionally with specific realization options) will be passed from SO → MC. This is captured in the R4 and beyond workflow (Edge Scoping - Casablanca Stretch Goal/Beyond Casablanca).
- This policy is exactly the same as the policies with "deployment-intent" in the Enhanced Capacity Check & the Cloud Selection Policy for Homing described in Section 2.
- An exemplary policy is depicted below.
...