Asset Types
The SDC Home page offers four buttons that create a new asset — Add VF, Add PNF, Add CR and Add Service — plus Import VSP, which creates an asset from an onboarded vendor package. This page describes what each of those asset types models, what SDC lets you do with an asset once it exists, and which of them reach the rest of ONAP.
For the package formats accepted by onboarding, and which of them apply to which asset type, see Onboarding Package Types.
Resources and Services
Every asset in the catalog is either a Resource or a Service.
A Resource is a reusable building block. It is designed, versioned and certified on its own, and is then placed inside another asset from the Composition tab. VF, PNF and CR are all resource types.
A Service is the top-level deliverable. It is a composition of resource instances, and it is the only asset type that can be distributed to the rest of ONAP. See Only services are distributed.
Both kinds follow the same design lifecycle. An asset is checked out (state
NOT_CERTIFIED_CHECKOUT), edited, checked in (NOT_CERTIFIED_CHECKIN) and certified
(CERTIFIED). Certifying freezes the version and makes the asset available to other designers.
For a service, certifying additionally makes it eligible for distribution, at which point it
carries a distribution state of its own (DISTRIBUTION_NOT_APPROVED, then DISTRIBUTED).
The asset types
The complete set of types is defined by ResourceTypeEnum. Only four of them are created
directly by a designer; the rest exist to support onboarding, composition and the normative type
library.
Type |
Name |
How it is created |
What it models |
|---|---|---|---|
Service |
Service |
Add Service |
A deliverable network service. The unit of distribution. |
VF |
Virtual Function |
Add VF, or Import VSP |
Network function software that ONAP is expected to deploy — virtual machines from a Heat template, or containers from a Helm chart. |
PNF |
Physical Network Function |
Add PNF, or Import VSP of an ETSI SOL004 package whose manifest carries the |
A network function realised by equipment that already exists in the field — a gNB, a router, an OLT. ONAP does not create it; it recognises, configures and monitors it. |
CR |
Complex Resource |
Add CR |
A composite resource that is not a network function, and therefore carries none of the network-function property contract. |
VFC |
Virtual Function Component |
Imported as a normative type, or created by VSP onboarding |
An atomic building block of a VF, such as a compute node. |
CVFC |
Complex Virtual Function Component |
Created by VSP onboarding |
A nested, substituting node type extracted from an onboarded package. |
CP |
Connection Point |
Imported as a normative type |
A port or endpoint through which a node attaches to a network. |
VL |
Virtual Link |
Imported as a normative type |
A network that connection points attach to. |
Configuration |
Configuration |
Imported as a normative type |
A configuration object attached to instances, for example a port-mirroring configuration. |
ServiceProxy |
Service Proxy |
Created by SDC when a service is placed inside another service |
The stand-in node for a nested service. |
VFCMT |
VFC Monitoring Template |
Created by the DCAE designer |
A monitoring template. See DCAE Designer. |
Abstract |
Abstract |
Part of the shipped type library |
The generic node types that the types above derive from. |
Choosing the type chooses the property contract
When an asset is created, SDC derives it from a generic node type selected by asset type. The
mapping is the genericAssetNodeTypes block of configuration.yaml:
Asset type |
Generic node type |
|---|---|
VF |
|
PNF |
|
CR |
|
VFC, CVFC |
|
Service |
|
The properties defined on those generic types are inherited by every asset of that type, appear on its Properties Assignment tab, and are what downstream ONAP components read. This is the most concrete answer to “what does creating this asset type enable”:
Property |
VF |
PNF |
CR |
Service |
Purpose |
|---|---|---|---|---|---|
|
yes |
yes |
no |
no |
Classification of the network function, carried into A&AI and used by orchestration and naming policies. |
|
yes |
no |
no |
no |
Instance-naming policy inputs. |
|
yes |
no |
no |
no |
Scaling bounds for the instances ONAP will create. |
|
yes |
no |
no |
no |
How many availability zones the function spans. |
|
yes |
no |
no |
no |
Marks a function that is instantiated in more than one stage. |
|
no |
yes |
no |
no |
The list of software versions the equipment can run. Populated automatically from the onboarded software-information artifact. |
|
no |
yes |
no |
yes |
The version expected on the equipment at design time. |
|
yes |
yes |
no |
no |
Associates the asset with a CDS blueprint. Pushed to A&AI at distribution time and used to pick the blueprint that configures the instance. |
|
no |
no |
no |
yes |
The same association at service level. |
|
yes |
yes |
no |
yes |
Which component performs post-instantiation configuration: |
|
yes |
yes |
no |
yes |
Defaults to |
|
no |
no |
yes |
no |
The only properties a CR contributes. |
A VF model therefore answers how does ONAP build this; a PNF model answers how does ONAP recognise, configure and monitor this thing that is already installed; a CR contributes almost nothing beyond a place in the composition tree.
What each type lets you do
VF
A VF is the only resource type with a Deployment tab. That tab exposes the deployment
structure derived from the onboarded package — for a Heat-based VSP, the modules that SO will
instantiate. A VF also accepts the widest range of artifacts, including HEAT, HELM,
AAI_VF_MODEL, AAI_VF_MODULE_MODEL, APPC_CONFIG and the DCAE_* types.
PNF
A PNF has no Deployment tab, because there is nothing for ONAP to instantiate. It is also
excluded, together with CR, from the informational-artifact placeholders
(excludeResourceType in configuration.yaml): there is no “Heat Template from Vendor”
placeholder, because there is no template.
What a PNF carries instead is the operational contract for a piece of equipment. When a SOL004
PNF package is onboarded, each non_mano_artifact_sets entry in the manifest is mapped onto an
SDC artifact type:
Non-MANO set |
SDC artifact type |
What it declares |
|---|---|---|
|
|
The VES events and alarms the equipment emits. |
|
|
The performance counters it reports, with their meaning and units. |
|
|
The YANG models it speaks over NETCONF. |
|
|
The software versions it supports. Valid for PNF only. |
|
|
Playbooks for configuring it. |
|
|
Supporting scripts. |
The software-information artifact is not inert: SDC parses it, writes the versions it finds into
the software_versions property and sets default_software_version from the first entry.
That is what a later software-upgrade workflow reads.
A CONTROLLER_BLUEPRINT_ARCHIVE (a CDS blueprint, CBA) may also be attached to a PNF, and is
what sdnc_model_name and sdnc_model_version refer to.
CR
A CR behaves like a PNF in the workspace — the same tabs, the same absence of a Deployment tab —
but contributes only cr_function, cr_role and cr_type. Use it for a composite that is
not a network function and that no ONAP component needs to treat as one.
Service
A service adds the tabs that only make sense for a deliverable: Distribution, Management
Workflow, Network Call Flow, Interfaces Assignment and a service-level Deployment
tab. It is composed from resource instances on the Composition canvas, and each instance gets
its own customizationUUID, so the same resource version can appear in several services with
different property values.
What can be placed inside what
Composition is constrained by the componentAllowedInstanceTypes block of
configuration.yaml. With the configuration shipped by OOM:
Container |
Instance types it accepts |
|---|---|
Service |
VF, CR, CP, PNF, CVFC, VL, Configuration, ServiceProxy, Abstract. VFC is additionally allowed only for a service that adheres to a non-default model. |
VF |
VFC, VF, CR, CP, PNF, CVFC, VL, Configuration, ServiceProxy, Abstract |
PNF |
VF, CR, CP, PNF, CVFC, VL, Configuration, ServiceProxy, Abstract |
CR |
VF, CR, CP, PNF, CVFC, VL, Configuration, ServiceProxy, Abstract |
VL |
VL |
A PNF may therefore contain instances, but it does not have to. A PNF that models a single piece of equipment is complete with no children at all, and onboarding treats it as such: a package whose topology declares no instances is rejected for every asset type except PNF.
Only services are distributed
Distribution is the step that hands a design to the rest of ONAP: SDC publishes a notification on the distribution message bus (DMaaP Message Router, or Kafka since the London release) and registered consumers download the artifacts they are interested in.
Only a service can be distributed. A certified resource is not delivered anywhere on its own; it becomes available in the catalog for a designer to place inside a service. There is no Distribute action for a resource in any lifecycle state, and no Distribution tab on a resource.
Resources reach ONAP as part of the service notification. Its payload is keyed on the service and lists the resource instances inside it:
distributionID, serviceName, serviceVersion, serviceUUID, serviceDescription,
serviceInvariantUUID, workloadContext
serviceArtifacts[]
resources[]
resourceInstanceName, resourceName, resourceVersion, resoucreType, resourceUUID,
resourceInvariantUUID, resourceCustomizationUUID, category, subcategory, artifacts[]
Note
resoucreType is spelt exactly so on the wire. Consumers must match the misspelling.
The resourceCustomizationUUID is the identifier a consumer uses to tell one instance of a
resource apart from another inside the same service, and it is the key SO stores against its own
per-instance records.
Worked example: a gNB as a PNF
This example models a radio unit that is already installed on a site, then delivers it to ONAP.
1. The vendor package. A sample ETSI SOL004 PNF package is available in the SDC repository at
integration-tests/src/test/resources/Files/PNFs/. The parts of its manifest that matter are
the metadata block, which is what makes SDC treat the package as a PNF rather than a VF, and the
non-MANO sets:
metadata:
pnfd_name: myPnf
pnfd_provider: Acme
pnfd_archive_version: 1.0
pnfd_release_date_time: 2017-01-01T10:00:00+03:00
non_mano_artifact_sets:
onap_ves_events:
Source: Files/Events/MyPnf_Pnf_v1.yaml
onap_pm_dictionary:
Source: Files/Measurements/PM_Dictionary.yaml
onap_yang_modules:
Source: Files/Yang_module/mynetconf.yang
onap_pnf_sw_information:
Source: Files/pnf-sw-information/pnf-sw-information.yaml
2. Onboard it and import it. Onboarding the package creates a Vendor Software Product; importing that VSP creates the PNF asset. If no vendor package exists, Add PNF creates the same asset with no artifacts attached.
3. Categorise it. The shipped category list includes a RAN category with subcategories for BBU, eNB, gNB, CUCP, CUUP, DU and RU, which is what a radio asset would use.
4. Assign properties. On Properties Assignment, set nf_function, nf_role and
nf_type for classification, and — if the equipment is to be configured by CDS — set
sdnc_model_name and sdnc_model_version to the blueprint, controller_actor to CDS
and skip_post_instantiation_configuration to false. Leaving the last one at its default
of true means no post-instantiation configuration runs, whatever controller_actor says.
5. Certify. SDC generates the TOSCA node type for the PNF, derived from the generic PNF type and named from the asset’s system name:
node_types:
org.openecomp.resource.pnf.MyGnb:
derived_from: org.openecomp.resource.abstract.nodes.PNF
At this point the PNF exists in the catalog and nothing else in ONAP knows about it.
6. Create a service and place the PNF in it. Add Service, then drag the certified PNF onto
the Composition canvas. The generated service template records the instance, its
customizationUUID and the property values assigned to it (abridged):
tosca_definitions_version: tosca_simple_yaml_1_3
metadata:
name: my_ran_service
type: Service
category: Network Service
instantiationType: Macro
topology_template:
node_templates:
my_gnb 0:
type: org.openecomp.resource.pnf.MyGnb
metadata:
name: my_gnb
type: PNF
category: RAN
subcategory: gNB
version: '1.0'
customizationUUID: 6bd78761-7dc2-4cdd-a98c-b712b1183322
properties:
skip_post_instantiation_configuration: false
controller_actor: CDS
substitution_mappings:
node_type: org.openecomp.service.MyRanService
7. Certify and distribute the service. Distribution is where the design becomes actionable:
SO stores the PNF model and its per-instance record, so that a request to instantiate the service can reference it. SO’s PNF building blocks then wait for the equipment to appear rather than creating anything.
A&AI receives the model, including
sdnc_model_nameandsdnc_model_version.PRH consumes the registration event the equipment sends when it is powered up and cabled, updates the corresponding PNF entry in A&AI and publishes a ready event, so that orchestration can continue.
DCAE uses the
PM_DICTIONARYandVES_EVENTSartifacts to interpret what the equipment reports. See the PM Subscription Handler documentation for howsdnc_model_nameandsdnc_model_versionselect the blueprint that applies a subscription.SDNC and CDS use the
YANG_MODULEartifacts and the associated blueprint to configure it.
The PNF asset by itself did none of this. Distributing the service that contains it is what delivered the model.
Choosing an asset type
ONAP should deploy the software: VF.
The equipment exists already and ONAP should recognise, configure and monitor it: PNF.
Neither, and no ONAP component needs to treat it as a network function: CR.
It is the thing to be ordered, instantiated and delivered: Service — and it is the only one that gets distributed.