...
- For E2E (OSS Service) modeling, use org.openecomp.resource.abstract.nodes.service
- E2E (OSS Service-Level) is outside of ETSI scope, and it could be ONAP-specific that is orchestrated by ONAP SO
- The E2E (OSS Service-Level) model references/includes associated NSs
- For the E2E service level, the org.openecop.resource.abstract.nodes.service type is still used as the base type of the service. SDC will use the ETSI SOL001 NSD type and attach the NSDs to the E2E (OSS Service).
- For NS modeling, use tosca.nodes.nfv.NS
- ONAP SO-NFVO, VFC and external NFVO manage the NS models and packages
- The following diagram depicts ONAP ETSI-Alignment Modeling hierarchy.
...
The following summarizes the mapping between two models:
SOL001 VNF | SDC AID DM | comments |
---|---|---|
N/A | org.openecomp.resource.abstracts.nodes.service | represents OSS Service models |
org.tosca.nodes.nfv.NS | tosca.nodes.nfv.NS | NS; use of SOL001 as SDC AID DM NS |
tosca.nodes.nfv.NsVirtualLink | tosca.nodes.nfv.NsVirtualLink | NS VirtualLink; use of SOL001 as SDC AID DM VL |
tosca.nodes.nfv.Vnf | org.openecomp.resource.abstract.nodes.ETSI.VNF | VNF |
tosca.nodes.nfv.vdu | org.openecomp.resource.abstract.nodes.VFC | VDU and SDC VFC |
tosca.nodes.nfv.VirtualLink | org.openecomp.resources.vl | VNF VL |
tosca.nodes.nfv.VduCp | org.openecomp.resources.cp | VDU CP |
N/A | org.openecomp.resource.allottedResource | |
tosca.nodes.nfv.Pnf | org.openecomp.resource.abstract.nodes.PNF | PNF |
Current SDC Resource Models
...
Define a new data type based on the toscathe org.openecomp.resource.abstract.nodes.nfv.VNF with optional attributes that are specific to ONAP.
...
VF with ETSI SOL001 VNF data type attributes.
Option A
- Make the org.openecomp.resource.abstract.nodes.ETSI.VNF a superset of both tosca.nodes.nfv.VNF and org.openecomp.resource.abstract.node.VF
...
SOL001 VNF (tosca.nodes.nfv.VNF) | Mapping | New SDC AID DM VNF (org.openecomp.resource.abstract.nodes.ETSI.VNF) derived from org.openecomp.resource.abstract.nodes.VF | ||||
---|---|---|---|---|---|---|
name | required | type | name | required | type | |
<SOL001 tosca.nodes.nfv.VNF attributes > | <SOL001 tosca.nodes.nfv.VNF attributes > | |||||
descriptor_id | yes | string | <--> | descriptor_id | yes | string |
descriptor_version | yes | string | <--> | descriptor_version | yes | string |
provider | yes | string | <--> | provider | yes | string |
product_name | yes | string | <--> | product_name | yes | string |
software_version | yes | string | <--> | software_version | yes | string |
product_info_name | no | string | <--> | product_info_name | no | string |
vnfm_info | yes | list of string | <--> | vnfm_info | yes | list of string |
localization_languages | no | list of string | <--> | localization_languages | no | list of string |
default_localization_language | no | string | <--> | default_localization_language | no | string |
configurable_properties | no | tosca.datatypes.nfv.VnfconfigurableProperties | <--> | configurable_properties | no | tosca.datatypes.nfv.VnfconfigurableProperties |
modifiable_attributes | no | tosca.datatypes.nfv.VnfInfoModifiableAttributes | <--> | modifiable_attributes | no | tosca.datatypes.nfv.VnfInfoModifiableAttributes |
lcm_operations_configuraion | no | tosca.datatypes.nfv.VnfLcmOperationsConfiguration | <--> | lcm_operations_configuraion | no | tosca.datatypes.nfv.VnfLcmOperationsConfiguration |
monitoring_parameters | no | list of tosca.dataypes.nfv.VnfMonitoringParameter | <--> | monitoring_parameters | no | list of tosca.dataypes.nfv.VnfMonitoringParameter |
flavour_id | yes | string | <--> | flavour_id | yes | string |
flavour_description | yes | string | <--> | flavour_description | yes | string |
vnf_profile | no | tosca.datatyhpes.nfv.VnfProfile | <--> | vnf_profile | no | tosca.datatyhpes.nfv.VnfProfile |
<SDC AID DM VF attributes that are inherited from org.openecomp.resource.abstract.nodes.VF> | ||||||
nf_function | no | string | ||||
nf_role | no | string | ||||
nf_type | no | string | ||||
nf_naming_code | no | string | ||||
nf_naming | no | org.openecomp.datatypes.Naming | ||||
availability_zone_max_count | no | integer | ||||
min_instances | no | integer | ||||
max_instances | no | integer | ||||
multi_stage_design | no | boolean | ||||
sdnc_model_name | no | string | ||||
sdnc_artifact_name | no | string | ||||
skip_post_instantiation_configuration | no | boolean (default true)
| ||||
controller_actor | no | string (default: SO-REF-DATA)
|
...
Option B
Can we use the additionalAttribute map to represent ONAP specific attributes? If so, we can use the base data type extensively.
SOL001
...
VDU mapping to/from VNF SDC AID DM VFC
Current SOL001 VDU vs. SDC AID DM VFC
- no 1:1 mapping
SOL001 VDU | SDC AID DM VFC (org.openecomp.resource.abstract.nodes.VFC) | ||||
---|---|---|---|---|---|
Name | Required | Type | Name | Required | Type |
name | yes | string | nfc_function | string | |
description | yes | string | high_availability | no | string |
boot_order | no | boolean | vm_image_name | string | |
nfvi_constraints | no | map of string | vm_flavor_name | yes | string |
monitoring_parameters | no | list of tosca.datatypes.nfv.VnfcMonitoringParameter | nfc_naming_code | no | string |
configurable_properties | no | map of tosca.datatypes.nfv.VnfcConfigurableProperties | vm_type_tag | no | string |
boot_data | no | tosca.datatypes.nfv.BootData | nfc_naming | org.openecomp.datatypes.Naming
| |
vdu_profile | yes | tosca.datatypes.nfv.VduProfile | min_instances | no | integer |
sw_image_data | no | tosca.datatypes.nfv.SwImageData |
...
Solutions for VDU and VFC mapping
- Make the org.openecomp.resource.abstract.nodes.ETSI.VFC a superset of both tosca.nodes.nfv.Vdu and org.openecomp.resource.abstract.node.VFC
...
SOL001 VDU | Mapping | org.openecomp.resource.abstract.nodes.ETSI.VFC (derived from org.openecomp.resource.abstract.nodes.VFC) | ||||
---|---|---|---|---|---|---|
Name | Required | Type | <--> | Name | Required | Type |
name | yes | string | <--> | name | yes | string |
description | yes | string | <--> | description | yes | string |
boot_order | no | boolean | <--> | boot_order | no | boolean |
nfvi_constraints | no | map of string | <--> | nfvi_constraints | no | map of string |
monitoring_parameters | no | list of tosca.datatypes.nfv.VnfcMonitoringParameter | <--> | monitoring_parameters | no | list of tosca.datatypes.nfv.VnfcMonitoringParameter |
configurable_properties | no | map of tosca.datatypes.nfv.VnfcConfigurableProperties | <--> | configurable_properties | no | map of tosca.datatypes.nfv.VnfcConfigurableProperties |
boot_data | no | tosca.datatypes.nfv.BootData | <--> | boot_data | no | tosca.datatypes.nfv.BootData |
vdu_profile | yes | tosca.datatypes.nfv.VduProfile | <--> | vdu_profile | yes | tosca.datatypes.nfv.VduProfile |
sw_image_data | no | tosca.datatypes.nfv.SwImageData | <--> | sw_image_data | no | tosca.datatypes.nfv.SwImageData |
<SDC AID DM VFC attributes that are inherited from the org.openecomp.resource.abstract.nodes.VFC> | ||||||
nfc_function | no | string | ||||
high_availability | no | string | ||||
vm_image_name | no | string | ||||
vm_flavor_name | yes | string | ||||
nfc_naming_code | no | string | ||||
vm_type_tag | no | string | ||||
nfc_naming | no | org.openecomp.datatypes.Naming
| ||||
min_instances | no | integer |
SOL001 2.7.1 VNFD Mapping from/to SDC AID DM VNFD
SOL001 2.7.1
...
VNFD Template
tosca_definitions_version: tosca_simple_yaml_1_2
description:
imports:
data_types:
node_types:
topology_template:
inputs:
node_templates:
VNF
substitution_mappings:
capabilities:
requirements:
SDC
...
VFD Template
tosca_definitions_version: tosca_simple_profile_for_ecomp_1_0
descriptions:
imports:
data_types:
node_types:
topology_template:
inputs:
node_templates:
vfc:
type: org.openecomp.resource.vfc
extCP:
type: org.openecomp.resources.cp
groups:
VFModule_Base:
type: org.openecomp.groups.VfModule
VFModule_Expansion:
type: org.openecomp.groups.VfModule
workflows:
policies:
anti_collated_az_policy:
substitution_mappings:
node_type: org.openecomp.resources.vf.<vf_name>
capabilities:
requirements:
SOL001 VNFD mapping to/from SDC AID DM
...
VFD
SOL001 VNFD | SDC AID DM VFVFD | |||
---|---|---|---|---|
Name | Grammar | Name | Grammar | |
tosca_definitions_version | string (tosca_simple_yaml_1_2) | tosca_definitions_version | string (tosca_simple_yaml_1_2) | |
description | string | description | string | |
metadata | map of <string> | metadata | map of <string> | |
imports | Single-line grammar
Multi-line grammar
| imports | Identifies the lower level models (VFC, CP, VL, heat) | |
data_types | <data_type_name>: derived_from: <existing_type_name> version: <version_number> metadata: <map of string> description: <datatype_description> constraints: - <type_constraints> properties: <property_definitions> | data_types | <data_type_name>: derived_from: <existing_type_name> version: <version_number> metadata: <map of string> description: <datatype_description> constraints: - <type_constraints> properties: <property_definitions> | |
node_types | <node_type_name>: derived_from: <parent_node_type_name> version: <version_number> metadata: <map of string> description: <node_type_description> attributes: <attribute_definitions> properties: <property_definitions> requirements: - <requirement_definitions> capabilities: <capability_definitions> interfaces: <interface_definitions> artifacts: <artifact_definitions> | node_types | <node_type_name>: derived_from: <parent_node_type_name> version: <version_number> metadata: <map of string> description: <node_type_description> attributes: <attribute_definitions> properties: <property_definitions> requirements: - <requirement_definitions> capabilities: <capability_definitions> interfaces: <interface_definitions> artifacts: <artifact_definitions> | |
topology_template | topology_template: description: <template_description> inputs: <input_parameter_list> outputs: <output_parameter_list> node_templates: <node_template_list> relationship_templates: <relationship_template_list> groups: <group_definition_list> policies: - <policy_definition_list> workflows: <workflow_list> # Optional declaration that exports the Topology Template # as an implementation of a Node Type. substitution_mappings: <substitution_mappings> | topology_template | ||
| string |
| string | |
|
| <parameter name>: type: <parameter_type> description: <parameter_description> required: <parameter_required> default: <parameter_default_value> constraints: - <parameter_constraints> | ||
| vnf: tosca.nodes.nfv.Vnf vdu: tosca.nodes.nfv.Vdu vl: tosca.nodes.nfv.VnfVirtualLink vduCp: tosca.nodes.nfv.VduCp vduCompute: tosca.nodes.nfv.Vdu.Compute |
| vfc: type: org.openecomp.resources.vfc.<> vl: type: org.openecomp.resources.vl.<> cp: type: org.openecomp.resources.cp.<> allotted_resource: type: org.openecomp.resource.allottedResource.<> | |
| <workflow name> | |||
policies
| tosca.datatypes.nfv.ScalingAspect
|
| list of VF Modules VFModule_Base: type: org.openecomp.groups.VfModule VFModule_Expansion: type: org.openecomp.groups.VfModule | |
| for each VF Module, additional information is provided | |||
substitution_mappings | substitution_mappings | |||
|
| |||
| <capability_type_name>: derived_from: <parent_capability_type_name> version: <version_number> description: <capability_description> properties: <property_definitions> attributes: <attribute_definitions> valid_source_types: [ <node type_names> ] | capabilities | <capability_type_name>: derived_from: <parent_capability_type_name> version: <version_number> description: <capability_description> properties: <property_definitions> attributes: <attribute_definitions> valid_source_types: [ <node type_names> ] | |
|
| |||
? | Groupgroup | <group_type_name>: derived_from: <parent_group_type_name> version: <version_number> metadata: <map of string> description: <group_description> properties: <property_definitions> members: [ <list_of_valid_member_types> ] requirements: - <requirement_definitions> capabilities: | ||
? | policy | <policy_type_name>: derived_from: <parent_policy_type_name> version: <version_number> metadata: <map of string> description: <policy_description> properties: <property_definitions> targets: [ <list_of_valid_target_types> ] triggers: <list_of_trigger_definitions> | ||
? | Relationshiprelationship | <relationship_type_name>: derived_from: <parent_relationship_type_name> version: <version_number> metadata: <map of string> description: <relationship_description> properties: <property_definitions> attributes: <attribute_definitions> interfaces: <interface_definitions> valid_target_types: [ <capability_type_names> ] | ||
annotation_type | <annotation_type_name>: version: <version_number> description: <annotation_type_description> properties: <property_definitions> | |||
annotation | <annotation_name>: type: <annotation_type> properties: <property_assignments> | |||
...
Mapping Scope Challenges and Suggestions
ONAP wants to distinguish between the mode/data required to drive ONAP functionality from a Service Provider perspective from any ancillary mode/data required to drive Cloud Provider automation.
- See the ONAP MultiVim Proposal on the separation of concerns.
- SDC AID was created before a separation of concerns was envisioned, thus there are data structures in the SDC AID that would be considered Cloud Provider automation data and that we would likely take out of the SDC AID.
- Examples of Service Provider data that would need to be mapped in order to drive ONAP automation would include:
- HPA requirements needed by OOF to determine cloud feasibility
- Input parameters passed to the Cloud provider
- There is probably some data in the SOL001 that would be considered Cloud Provider automation data. Any such data could remain unmapped
- SOL001 content needed to drive ONAP automation (SO, OOF, SDNC, AAI, DCAE, etc.) would need to be mapped
- Examples of Service Provider data that would need to be mapped in order to drive ONAP automation would include:
- The VNFM should not be aware of the VF Module structure, though the current SO-SDNC interactions to get assignment are by VF Module, and the VF Module entity plays prominent in AAI. That means there needs to be two adaptation points as we have discussed:
- An SDC function to extract VF Module information from the SOL001 VNFD prior to distribution to runtime
- A VNFM Adapter function to flatten the VF Module structure prior to handoff to the VNFM
VF-Module Deduction from SOL001
- There is an assumption that SDC transforms the vendor provided VNF package into ONAP-compliant one; i.e., deducing VF Modules based on VNFD ScalingAspects and Delta.
- If SDC supports the transformation in Dublin time-frame, the transformed CSAR will be imported to SO, and SO VNF- and VF-Module-level workflows will manage VNF and VF Module topology towards SDNC with the following changes - Input from Gil Bullard (AT&T)
- Today the VNF-level workflow has an embedded per-VF Module loop that a) retrieves the SDNC assignments for that VF Module, and then b) sends those VF Module-level assignments down to the VIM (e.g., OpenStack); the loop then moves to repeat "a" with the next VF Module.
- The new VNF-level flow will have the following sequences:
- an embedded per-VF Module loop that only retrieves the SDNC assignments for each VF Module; because the VIM is hidden from SO's sight, beneath the VNFM Adapter/VNFM.
- After finishing the loop, the SO workflows will send a structure to the VNFM Adapter that includes the aggregate assignments at the VNF level.
- The VNFM Adapter aggregates all the VF-Module level assignments and transforms the assignment data into SOL003 API parameters before sending them to SVNFM
- The VNFM Adapter would need to be able to parse the VNF-level assignments structure received from SO to obtain the per-VDUconnection point assignments information and any per-VDU parameter information (e.g., hostnames)
- In doing so, the VNFM Adapter would need to know to ignore the VF Module groupings of these assignments
- Further know how to map the ONAP data structure and parameter names into the ETSI (e.g., VM=VDU, VNFC=VNFC, vNIC=vNIC, etc.). Note that the above assumes that in ONAP, as in ETSI, there will be a one-to-one correspondence between VM/VDU and VNFC.
...
- SOL001 concept of Aspect+ScalingDelta combination is one to one with the ONAP concept of VF Module.
- SOL001 concept of VDU is one to one with the ONAP concept of A&AI vServer
- SOL001 concept of a connection point associated with a VDU corresponds to the ONAP concept of the same name, as does the understanding of the meaning of “internal” versus “external” connection point.
- ONAP-compliant SOL001 VNF Vendors will be obliged to name their HEAT files using a naming convention that encodes the SOL001 Aspect+ScalingDelta names
- ONAP-compliant SOL001 VNF Vendors will be obliged to name their SOL001 Aspect+ScalingDelta parameters using a naming convention that readily maps to the corresponding HEAT properties.
- In addition, if AT&T has already deployed such a vendor’s VNF into its network, the HEAT naming will remain invariant, and (at least) the (AT&T version of that) SOL001 be written to match it.
- What to do
- ONAP will be extended to incorporate the constructs of Aspect and Scaling Level. This includes SDC’s, SOs, and A&AI’s modeling of these constructs and A&AI's ability to capture and SO’s ability to set/update the "current scaling level" of a VNF for a given Aspect.
- If ETSI in their SOL001 VNFD had defined a "ScalingDelta" in a straightforward manner, i.e., in terms of the VNFCs that comprise it, then it would be very easy to extract VF Module information from the VNFD. (I would like to see ETSI define "ScalingDelta" in this manner, as opposed to the current way they do so. ) However, given that they did not, ONAP SDC would need to be extended to derive the VF Module “structure” from the SOL001 document through the algorithm below. “Structure” in this case includes the VDU topology, connection points and associated parameters. This algorithm will:
- Determine the set of Aspects and corresponding VDUs and associated ScalingDeltas (step_deltas) from the SOL001.
- Determine the set of ScalingLevels associated with each Aspect and the ScalingDeltas associated with each.
- Translate the VDU-centric representation of ScalingDeltas (step_deltas) as per SOL001 to come up with a ScalingDelta-centric representation that captures the number and type of VDUs associated with that ScalingDelta across the various VDU types.
- Create a VF Module object that corresponds to each ScalingDelta-centric representation of a ScalingDelta calculated above.
- Fill in the details of the VF Module object based on the SOL001 data to represent the VDU connection points, associated Networks (internal or external), and associated Parameters.
- Determine if there is an artifact in the SOL004 package that is a HOT YAML whose file name corresponds (through a VNF vendor obligatory naming convention) to the Aspect+ScalingDelta from which this VF Module object was derived. If so, associate that HOT file with the VF Module.
- Name the VF Module based on a naming convention to capture the Aspect+ScalingDelta names
- Determine and capture the mapping from each Aspect + ScalingLevel model for the VNF to the corresponding VF Module.
- Given a desired state Aspect+ScalingLevel, will be able to calculate (from the SDC distributed mapping of Aspect+ScalingLevel to VF Module along with the current Scaling Level for this Aspect as per A&AI) the (ordered set of) VF Module(s) needed to take that VNF from the “current scaling level” to the desired level for that Aspect.
- Note: As an aside, SDC enhancements are being discussed. It is not clear if the SDC changes will be available in the Dublin time frame. some “stubbing off” SDC with a simulator could be suggested to at least prove in the run-time aspects of the solution.
Gliffy Diagram macroId 4e072032-7cad-4d7d-befc-a60416101d10 name ONAP ETSI-Alignment VF-Module Mapping pagePin 2
macroId | 4e072032-7cad-4d7d-befc-a60416101d10 |
---|---|
name | ONAP ETSI-Alignment VF-Module Mapping |
pagePin | 2 |
VirtualLink Mapping to SDC AID DM
...