Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Gliffy Diagram
size1200
nameCloud Agnostic Intent Execution Workflow
pagePin4041

Cloud Agnostic Intent (Policy) Workflow Details (Phase 1 - Casablanca MVP):

...

Step 1. SO → OOF - Get Target <Cloud Owner, Cloud Region> for the Service Instances (no code changes for R3)

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 for R3).

OOF Homing Enhanced Cloud Selection Policy based on Intent -- JSON Schema with Use Case Examples as runnable python code:
Code Block
languagepy
themeEmacs
titleOOF Homing Enhanced Cloud Selection Policy Example (Step 2a)
linenumberstrue
collapsetrue
#
#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_cloud_selection_policy_schema = {
        "service": {"type": "string"},
        "policyName": {"type": "string"},
        "policyDescription": {"type": "string"},
        "templateVersion": {"type": "string"},
        "version": {"type": "string"},
        "priority": {"type": "string"},
        "riskType": {"type": "string"},
        "riskLevel": {"type": "string"},
        "guard": {"type": "string"},

        "content": {
                "type": "object",
                "required": ["cloud-cost-evaluation", "cloud-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
            			# As an example, vDNS VNF in ONAP has 3 VNFCs - DNS, Packet Gen & Load Balancer --
						# Each of the VNFCs could have different policies              													      									
                        "vnfc": {"type": "string"},

                        # evaluate cloud cost if set cloud-specific realization of the specified deployment intent
                        # costhappens isin fixed per multi-cloud typein for all workloads -- simplifying assumption for R3the cloud-specific plugin
                        # cost specified in the respective plugin through a configuration file
"cloud-deployment-intent": {
                                "cloud-cost-evaluation" : {"type" : "booleanobject"},

                           # cloud-specific realization of the specified"properties" deployment: intent{

                        # happens in  multi-cloud in the cloud-specific plugin
                       # Cloud Type -- Azure, K8S, OpenStack, VMware VIO, Wind River Titanium
                 "cloud-deployment-intent": {
  					# Optionally Accomodate policies per Cloud Type
                    					"Cloud Type (Cloud Provider)": {"type":, "objectarray"},
                                      "properties" : {

                                        "Infrastructure #High CloudAvailability Type -- Azure, K8S, OpenStack, VMware VIO, Wind River Titanium
for VNF": {"type", "boolean"},

                          					# Optionally Accomodate policies per Cloud Type
        "Infrastructure Resource Isolation          					"Cloud Type (Cloud Provider)for VNF": {"type", "arraystring"},

                                        # Infrastructure Resource Isolation for VNF
                                        # Only "Infrastructure High Availability for VNF": {"type", "boolean"},

certain pre-defined over-subscription values are allowed to
                                        # reflect "Infrastructurepractical Resourcedeployment Isolationand forsimplify VNF": {"type", "string"},
implementation for R3
                                        # "Infrastructure Resource Isolation for VNF
 - Burstable QoS Oversubscription Percentage": {"type": "int"},
                                 # Only certain pre-defined over-subscription values are allowed to},
                        },
                #},
 reflect practical deployment and simplify implementation for R3},

        "resources": {"type", "array"}, #"vgw" is also interchangeably used as "vg"
        "applicableResources": {"type", "string"},
        "identity":     "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage{"type", "string"},
        "policyScope": {"type":, "intarray"},
                       "policyType": {"type", "string"}
}

#
#Example 1: vCPE, Burstable QoS
#vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS
#
oof_cloud_selection_policy_instance1 = {
         }"service": "cloudSelectionPolicy",
        "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF",
        "policyDescription": "Cloud Selection Policy for vCPE  }VNFs",
        "templateVersion": "0.0.1",
         }"version": "oofMulti-cloudCasablanca",
         },
"priority": "3",
        "resourcesriskType": {"typetest",
 "array"}, #"vgw" is also interchangeably used as "vg"       "riskLevel": "2",
        "applicableResourcesguard": {"typeFalse", "string"},

        "identitycontent": {"type", "string"},
        "policyScope": {"type", "array"},
        "policyTypevnfc": {"typevgw", "string"}
}

#
#Example 1: vCPE, Burstable QoS
#vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS
#
oof_cloud_selection_policy_instance1 =
                "cloud-deployment-intent": {
        "service": "cloudSelectionPolicy",
        "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF",
       "Cloud Type (Cloud "policyDescriptionProvider)": {"Cloud Selection Policy for vCPE VNFs",
VMware VIO"},
            "templateVersion			"Infrastructure Resource Isolation for VNF": "0.0.1Burstable QoS",
         "version": "oofMulti-cloudCasablanca",
        "priority": "3"   			"Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25,
        "riskType": "test",
        "riskLevel": "2"},
        "guard": "False"},

        "contentresources": {
       ["vgw"], #"vgw" is also interchangeably used as "vg"
         "vnfcapplicableResources": "vgwany",
        "identity": "cloud-atrributes",
        "cloud-cost-evaluationpolicyScope": True["vCPE",
 "US", "INTERNATIONAL", "ip", "vgw", "vgmux"],
           "cloud-deployment-intent"policyType": {
          "AllPolicy"
}

#
#Example 2:
#vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS
#
oof_cloud_selection_policy_instance2 = {
        "service": "cloudSelectionPolicy",
     "Cloud Type (Cloud Provider)"policyName": {"VMware VIO"}"oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF",
            			"Infrastructure Resource Isolation"policyDescription": "Cloud Selection Policy for VNF":vCPE VNFs"Burstable QoS",
            			"Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25"templateVersion": "0.0.1",
        "version": "oofMulti-cloudCasablanca",
        "priority": "3",
         }"riskType": "test",
        },
"riskLevel": "2",
        "resourcesguard": ["vgwFalse"], #"vgw" is also interchangeably used as "vg"

        "content": {
        "applicableResources        "vnfc": "anyvgw",
            "identity":    "cloud-deployment-atrributesintent",: {
        "policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vgw", "vgmux"],
   	  	"Infrastructure Resource Isolation for VNF"policyType": "AllPolicyGuaranteed QoS"
}

#
#Example 2:
#vCPE: Infrastructure Resource Isolation for VNF with Guaranteed QoS
#
oof_cloud_selection_policy_instance2 = {,
                },
        "service": "cloudSelectionPolicy",},

        "policyNameresources": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vCPE_VNF",
        "policyDescription": "Cloud Selection Policy for vCPE VNFs",["vgw"], #"vgw" is also interchangeably used as "vg"
        "templateVersionapplicableResources": "0.0.1any",
        "versionidentity": "oofMulticloud-cloudCasablancaatrributes",
        "prioritypolicyScope": ["3vCPE",
        "riskType": "test",
        "riskLevel": "2" "US", "INTERNATIONAL", "ip", "vgw", "vgmux"],
        "guardpolicyType": "FalseAllPolicy",
}

#
        "content": {
                "vnfc": "vgw",
#Example 3:
#vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS
#
oof_cloud_selection_policy_instance3 = {
        "service": "cloudSelectionPolicy",
        "cloud-cost-evaluationpolicyName": True"oofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF",
        "policyDescription": "Cloud Selection Policy for vDNS   "cloud-deployment-intent": {VNFs",
           "templateVersion": "0.0.1",
      	  	"Infrastructure Resource Isolation for VNF"version": "Guaranteed QoSoofMulti-cloudCasablanca",
                },
"priority": "3",
         },
"riskType": "test",
        "resourcesriskLevel": ["vgw2"], #"vgw" is also interchangeably used as "vg"
        "guard": "False",

        "applicableResourcescontent": "any",{
        "identity": "cloud-atrributes",
        "policyScopevnfc": ["vCPEvdns", "US", "INTERNATIONAL", "ip", "vgw", "vgmux"],

                "policyTypecloud-deployment-intent": "AllPolicy"
}

#
#Example 3:
#vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF with Burstable QoS
#
oof_cloud_selection_policy_instance3 = {
{
                        "service": "cloudSelectionPolicy",
        "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF",
Cloud Type (Cloud Provider)": {"VMware VIO", "Azure"},
         "policyDescription": "Cloud Selection Policy for vDNS VNFs",
        "templateVersion": "0.0.1",
        "version": "oofMulti-cloudCasablanca"Infrastructure High Availability for VNF": True,
        "priority": "3",
        "riskType": "test",
      "Infrastructure  "riskLevelResource Isolation for VNF": "2Burstable QoS",
        "guard": "False",

        "content": {
      "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription  "vnfcPercentage": "vdns"25,
                "cloud-cost-evaluation": True},
        },

        "cloud-deployment-intentresources": {["vDNS"],
        "applicableResources": "any",
        "identity": "cloud-atrributes",
      "Cloud Type (Cloud Provider)": {"VMware VIO "policyScope": ["vDNS", "US", "INTERNATIONAL", "AzurevDNS"}],
        "policyType": "AllPolicy"
}

#
# Example 4:
# vDNS: Infrastructure HA for         "VNF & Infrastructure HighResource AvailabilityIsolation for VNF": True,
# with Guaranteed QoS
#
oof_cloud_selection_policy_instance4 = {
           "service": "cloudSelectionPolicy",
        "Infrastructure Resource Isolation for VNFpolicyName": "Burstable QoSoofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF",
        "policyDescription": "Cloud Selection Policy for vDNS VNFs",
          "Infrastructure Resource Isolation for VNF - Burstable QoS Oversubscription Percentage": 25"templateVersion": "0.0.1",
        "version": "oofMulti-cloudCasablanca",
                },
"priority": "3",
         },
"riskType": "test",
        "resourcesriskLevel": ["vDNS2"],
        "applicableResourcesguard": "anyFalse",

        "identitycontent": "cloud-atrributes",
{
                "policyScopevnfc": ["vDNSvdns", "US", "INTERNATIONAL", "vDNS"],

                "policyTypecloud-deployment-intent": "AllPolicy"
}

#
# Example 4:
# vDNS: Infrastructure HA for VNF & Infrastructure Resource Isolation for VNF
# with Guaranteed QoS
#
oof_cloud_selection_policy_instance4 = {
        "service": "cloudSelectionPolicy",
{
                        "Infrastructure High Availability for VNF": True,
          "policyName": "oofMulti-cloudCasablanca.cloudSelectionPolicy_vDNS_VNF",
        "policyDescription":     "CloudInfrastructure SelectionResource PolicyIsolation for vDNS VNFs VNF": "Guaranteed QoS",
        "templateVersion": "0.0.1",
        "version": "oofMulti-cloudCasablanca" },
        "priority": "3",},

        "riskTyperesources": ["testvDNS"],
        "riskLevelapplicableResources": "2any",
        "guardidentity": "Falsecloud-atrributes",

        "contentpolicyScope": {
                "vnfc": "vdns",
        ["vDNS", "US", "INTERNATIONAL", "vDNS"],
        "cloud-cost-evaluationpolicyType": True,
                "cloud-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"
}

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) 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 evaluate cost of deployment (aligned to the SO/MC API defined by SO Casablanca HPA Design to minimize the terminology set)

*** Assume: VNFC is equalivent to VM, VNF is equivalent of heat stack.

Code Block
titlecost_evaluation
collapsetrue
Request URI:
	POST http://{msb ip}:{msb port}/api/multicloud/v1/cost_evaluation

Request body:


[
    {
        "cloud-owner": "owner1",
        "cloud-region-id": "region1",

        "directives":[ 
         { 
            "vnfc_directives":[ 
               { 
                  "vnfc_id":"<ID of VNFC>", /*optional, but keep aligned to OOF/SO/MC API to make it simple*/
                  "directives":[
                     { 
                        "directive_name":"<Name of directive,example flavor_directive>",
                        "attributes":[ 
                           { 
                              "attribute_name":"<name of attribute, such as flavor label>",
                              "attribute_value":"<value such as cloud specific flavor>"
                           }
                        ]
                     },
                     { 
                        "directive_name":"<Name of directive,example vnic-info>",
                        "attributes":[ 
                           { 
                              "attribute_name":"<name of attribute, such as vnic-type>",
                              "attribute_value":"<value such as direct/normal>"
                           },
                           { 
                              "attribute_name":"<name of attribute, such as provider netweork>",
                              "attribute_value":"<value such as physnet>"
                           }
                        ]
                     }
                  ]
               }
            ]
         },
         {
            "vnf_directives":{ 
               "directives":[ 
                  { 
                     "directive_name":"<Name of directive>",
                     "attributes":[ 
                        { 
                           "attribute_name":"<name of attribute>",
                           "attribute_value":"<value>"
                        }
                     ]
                  },
                  { 
                     "directive_name":"<Name of directive>",
                     "attributes":[ 
                        { 
                           "attribute_name":"<name of attribute>",
                           "attribute_value":"<value >"
                        },
                        { 
                           "attribute_name":"<name of attribute>",
                           "attribute_value":"<value >"
                        }
                     ]
                  }
               ]
            }
         }
        ]
    },
    {
    
        "cloud-owner": "owner2",
        "cloud-region-id": "region2",

        "directives": []
    }
]

Response:


[
    {
        "cloud-owner": "owner1",
        "cloud-region-id": "region1",
        "net-value": 100
    },
    {
        "cloud-owner": "owner2",
        "cloud-region-id": "region2",
            "net-value": 101
    }
]

Step 4. OOF → MC - Push Cloud Agnostic Policy for the Service Instance 

4a) OOF Processing

The OOF ↔ MC cloud selection API, described below, is filled based on the Cloud Selection Policy for Homing retrieved in step 2) – need OOF code changes. 

OOF <-> MC Cloud Selection API -- JSON Schema with Use Case Examples as runnable python code:

Code Block
languagepy
themeEmacs
titleOOF <-> MC API Examples (Step 4a)
linenumberstrue
collapsetrue
//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

Proposed API URL: http://msb:80/api/multicloud/v0/intent_based_cloud_selection


#
#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 = {
        #list of VIM ids
        "Cloud Owner & Cloud Region List (VIM ids)": {"type", "array"},

        "oof-mc-policy-api-request": {
                "type": "array",
                "items": { "$ref": "#/definitions/xxx1" }
        },
        "definitions": {
                "xxx1": {
                        "type": "object",
                        "required": ["cloud-cost-evaluation", "cloud-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
                                # As an example, vDNS VNF in ONAP has 3 VNFCs-DNS, Packet Gen & Load Balancer                      # each of the VNFCs could have different cloud policies
                                "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
                                "cloud-cost-evaluation" : {"type" : "boolean"},

                                # cloud-specific realization of the specified deployment intent
                                # happens in multi-cloud in the cloud-specific plugin
                                "cloud-deployment-intent": {
                                                "type": "array",
                                                "items": { "$ref": "#/definitions/xxx2" }
                                },
                                "definitions": {
                                        "xxx2": {
                                                "type": "object",
                                                "properties" : {
                                                        "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"},
                                                },
                                        },
                                },
                        },
                },
        },
}

oof_mc_policy_api_response_schema = {
        "oof-mc-policy-api-response": {
                "type": "array",
                "items": { "$ref": "#/definitions/xxx" }
        },
        "definitions": {
                "xxx": {
                        "type": "object",
                        "required": [ "VIM id", "net-value" ],
                        "properties": {

                                # VIM id
                                "VIM id": {
                                  "type": "string",
                                },

                                # For R3, net-value signifies cost per VIM id
                                # Referring to cloud-cost-evaluation 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
                                "net-value": {
                                  "type": "number",
                                }
                        }
                }
        }
}

#
#Example 1: vCPE, Burstable QoS
#vCPE: Infrastructure Resource Isolation for VNF with Burstable QoS
#
oof_mc_policy_api_instance1 = {
        #list of VIM ids
        "Cloud Owner & Cloud Region (VIM id)": {"Azure 1", "Azure 2", "VMware VIO 1"},

        "oof-mc-policy-request": [
                {
                        "vnfc": "vgw",
                        #list of VIM ids

                        "cloud-deployment-intent": [
                                {
                                                "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 = {
        #list of VIM ids
        "Cloud Owner & Cloud Region List (VIM ids)": {"Azure 1", "Azure 2", "VMware VIO 1", "Wind River Titanium 1"},

        "oof-mc-policy-request": [
                {
                        "vnfc": "vgw",
                        "cloud-cost-evaluation": True,

                        "cloud-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 = {
        #list of VIM ids
        "Cloud Owner & Cloud Region List (VIM ids)": {"Azure 1", "Azure 2", "VMware VIO 1", "Wind River Titanium 1"},

        "oof-mc-policy-request": [
                {
                        "vnfc": "vdns",
                        "cloud-cost-evaluation": True,
                        "cloud-deployment-intent": [
                                {
                                        "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 = {
        #list of VIM ids
        "Cloud Owner & Cloud Region List (VIM ids)": {"Azure 1", "Azure 2", "VMware VIO 1", "Wind River Titanium 1"},
        "oof-mc-policy-request": [
                {
                        "vnfc": "vdns",
                        "cloud-cost-evaluation": True,
                        "cloud-deployment-intent": [
                                {
                                        "Infrastructure High Availability for VNF": True,
                                        "Infrastructure Resource Isolation for VNF": "Guaranteed QoS",
                                },
                        ],
                },
        ],
}

oof_mc_policy_api_response_instance = {
        "oof-mc-policy-api-response": [
                {
                        "VIM id": "Azure 1",
                        "net-value": 100
                },
                {
                        "VIM id": "VMware VIO 1",
                        "net-value": 101
                },
                {
                        "VIM id": "Wind River Titanium 2",
                        "net-value": 102
                },
                {
                        "VIM id": "Wind River Titanium 1",
                        "net-value": 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)
MC Workload Deployment Cost Policy -- JSON Schema with Use Case Examples as runnable python code:
Code Block
languagepy
themeEmacs
titleWorkload Deployment Cost Policy Example (Step 5b)
linenumberstrue
collapsetrue
#
#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

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",
                        "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 each cloud owner

  • Parse OOF → MC Policy (Intent) API 
  • If a Cloud owner does not support a specific "deployment-intent"
    • Drop all the cloud regions for the cloud owner from the candidate list
  • For each cloud region // Public cloud could have different costs in different geographic locations
    • Compute net_value based on cost
      • net_value = net_value + workload_deployment_cost 
        • If Plugin of cloud owner supports cost based on "dollarCostEvaluationVM-Type" and/or "dollarCostEvaluationVM-FeatureGroup"
          • The workload deployment cost is computed per <instance type, cloud region> based on workload deployment cost policy described in Step 5b).
            • Instance Type is derived from <Service, VNFC, cloud owner>
            • More details are in 5b)
          • Implementation Notes:
            • It is not mandatory for all plugins to implement this feature since the OOF → MC API has the flexibility of turning on this feature per <cloud owner, cloud region>
        • Else
          • The workload deployment cost is computed as a fixed cost per plugin

5b) Workload Deployment Cost Policy - Configured by the Operator

The operator/service provider who uses ONAP will choose which VIMs to use and include the appropriate MC plugins in his ONAP deployment. For example, let’s assume they pick private Openstack, private VMWare, and public Azure as the platform to run their services on.

For R3, Workload Deployment Cost Policy can be stored in the form of configuration file(s) in the OOM K8S Persistent Volumes visible to the relevant MC plugin to simplify implementation.  Beyond R3, this could be moved to the Policy DB. The details of the configuration are described below.

  • By default, each plugin supports a fixed cost for all workloads
    • Optionally, plugin of cloud owner can support cost based on "dollarCostEvaluationVM-Type" and/or "dollarCostEvaluationVM-FeatureGroup"
      • Where workload deployment cost includes dollar cost of VM Instance Type (based on <Service, VNFC, cloud owner>) and dollar cost (or discount) of other cloud-specific feature groups corresponding to the intent expressed under the deployment-intent keyword in the OOF → MC API
        • As an example, with respect to the deployment-intent, "Infrastructure Resource Isolation for VNF" with "Burstable QoS" can yield potential cost savings as compared to "Guaranteed QoS" by allowing smart over-subscription while still guaranteeing isolation
  • Note that the operator is free to choose the method of calculating the cost which includes initial cost, support cost & operational cost. 
  • Note that the operator is free to choose what time duration the cost metric is specified for each of the MultiVIM plugins (e.g., cost per hour, cost per month) since they will do it consistently for each of the VIMs. 

"Workload Deployment Cost Policy Example" depicted above has an exemplary description of this.

Step 5. MC →  OOF – Return a net value for each <cloud owner, cloud region> 

6a) OOF Processing - cloud_net_value input in Multi-objective Optimization (need OOF code changes)

Casablanca Goal for implementation simplification

Select one of the clouds which meets the cost hard constraint, e.g. cost <= x. This is similar to current capacity check implementation, where one of the cloud which passes the capacity check is selected.

Stretch Goal for Casablanca

Each service specifies an service-specific objective function that is stored as part of the service-specific policy and is used by OOF to evaluate the candidate <cloud owner, cloud region>. For simplicity of the example, let’s consider service that consists only of one VNF instance. The objective function has two components:

- distance from customer location to the VNF - the service designed assigns a weight for the distance: wd

- the cost of deploying the VNF in a location - the service designer assigns a weight for the cost: wc

OOF optimization function: min (wd*distance + wc*cloud_net_value)

If the service does not care about the cost at all, it would set wc = 0. If the service designer wants to minimize cost, he could set wd=0. Note that candidates that are too far can be eliminated by a distance constraint even before the optimization. For example, if the service has a distance constraint of at most 100 kilometers, then only those <cloud owner, cloud region> within 100 kilometers to the customer location would be considered in the objective function evaluation.

If the service designer wants to trade off between distance and cost, for example, they might set wd = 1, wc = 2. This would mean that one $1 increase in price is as valuable as 2 kilometers in distance.

<cloud owner, cloud region> Candidate 1: $100, 100 kilometers => value: 300

<cloud owner, cloud region> Candidate 2: $150, 80 kilometers => value: 380

<cloud owner, cloud region> Candidate 3: $50, 190 kilometers => value: 290  <- pick this one

Step 6. OOF → SO - Return the target <cloud owner, cloud region> for the Service Instance + deployment-intent per vnfc

OOF ↔ SO API extension (VNFC deployment-intent) -- identical in content to SO <-> MC Policy API

Step 7. SO → MC - Deploy VNF template in the target <cloud owner, cloud region> for the Service Instance

"AllPolicy"
}

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 (no code changes for R3)

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 → SO - Return the target <cloud owner, cloud region> for the Service Instance + deployment-intent per vnfc (code changes in OOF for R3)

OOF ↔ SO API extension (VNFC deployment-intent) -- identical in content to SO <-> MC Policy API

Step 5. SO → MC - Deploy VNF template in the target <cloud owner, cloud region> for the Service Instance (code changes in Multi-Cloud for R3)

57) MC Processing (need MC code changes)

...

  • 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
  • Policy DB – is there any restriction on the type of json objects that can be stored?
    • Matti to follow up with Ankit

Implementation trade offs for Casablanca (R3) and potential Dublin (R4) plan:

      • 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 
    Deployment-Intent 
    • 1. 
      • "Infrastructure Resource Isolation for VNF
      " – { "qosProperty
      • "
      : { {"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "25"} } }
      • Casablanca Plan
        • Only certain pre-defined over-subscription values are allowed to reflect practical deployment and simplify implementation 
      • Dublin & Beyond Potential Plan
        • Creating instance types on demand for private clouds - to study
    • 2. Cloud-agnostic Workload Deployment Policy (Intent) 
      • Casablanca Plan
        • Cloud-Agnostic Workload Deployment Policy (Intent) can be directly mapped to specific realization (e.g. OpenStack Flavor, Azure Instance Type) to simplify implementation.  
      • Dublin & Beyond Potential Plan
        • VIM Capability Discovery to populate Intent in A&AI aligning taking into account Cloud selection policy based on cost specific to Intent (leverage similarities to HPA label discovery supported since R2)
          • VIM selection – Intent to be populated in A&AI for capability matching 
          • VIM Deployment realization - Intent(s) to specific realization mapping (e.g. OpenStack Flavor, Azure Instance Type) to be populated in A&AI 
      • Nothing additional needed in OOF or MC
      • Changes needed in SO to call OOF API
        • Marcus from Intel is driving this
  • Policy DB – is there any restriction on the type of json objects that can be stored?
    • Matti to follow up with Ankit

Implementation trade offs for Casablanca (R3) and potential Dublin (R4) plan:

  • Deployment-Intent 
    • 1. "Infrastructure Resource Isolation for VNF" – { "qosProperty": { {"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "25"} } }
      • Casablanca Plan
        • Only certain pre-defined over-subscription values are allowed to reflect practical deployment and simplify implementation 
      • Dublin & Beyond Potential Plan
        • Creating instance types on demand for private clouds - to study
    • 2. Cloud-agnostic Workload Deployment Policy (Intent) 
      • Casablanca Plan
        • Cloud-Agnostic Workload Deployment Policy (Intent) can be directly mapped to specific realization (e.g. OpenStack Flavor, Azure Instance Type) to simplify implementation.  
      • Dublin & Beyond Potential Plan
        • VIM Capability Discovery to populate Intent in A&AI aligning taking into account Cloud selection policy based on cost specific to Intent (leverage similarities to HPA label discovery supported since R2)
          • VIM selection – Intent to be populated in A&AI for capability matching 
          • VIM Deployment realization - Intent(s) to specific realization mapping (e.g. OpenStack Flavor, Azure Instance Type) to be populated in A&AI 
    Policy-based & cloud-selection
    • 3. Tenant Information is not passed in the OOF → MC API
      • Casablanca Plan
        • The tenant information is derived from a simple mapping function per <cloud owner, cloud region>
          • A simple mapping would be a tenant per <cloud owner, cloud region> as part of Multi-VIM plugin configuration.
          • Need to make sure that this scheme is synchronous with the SO → MC API path
      • Dublin & Beyond Potential Plan
        • Pass Tenant Information per <cloud owner, cloud region> in the OOF → MC API
    • 4. VM Instance type/VM Feature Group dollar-cost-based cloud selection 
      • Casablanca Plan

        • By default, the workload deployment cost is computed as a fixed cost per plugin
          • VM Instance type/VM Feature Group dollar-cost-based cloud selection is optional for all Multi-Cloud Plugins

      • Dublin & Beyond Potential Plan

        • Deep dive further on dollar-cost-based cloud selection models/implementation for public/private clouds 

Cloud Resource Partitioning for Differentiated QoS (Combined with Previous)

...