PNF TOSCA Model
Objective
Represent PNFs in the TOSCA model, using TOSCA syntax and semantics to define the mapping between PNF resources used in ONAP services and the physical devices themselves.
PNF Modeling - Resources and Devices
The proposed approach is to use a node type derived from NetworkFunction to represent the PNF’s appearance as a resource in services, and a separate “PNF Device” node type to represent the device itself (in the model and in inventory). TOSCA requirements and capabilities are used to map the PNF resources within services to their corresponding PNF Devices.
As is typical, PNF devices are pre-populated in inventory before they are assigned for use by services. This makes them a good candidate for Requirements/Capabilities logic, where the PNF Resource has a dangling requirement for a PNF Device. The mapping would be established at run-time by selecting which pre-deployed (and inventoried) PNF Device is to be used.
In this model, a new PNFDevice Capability base type is defined. Individual PNF devices would declare this capability (or one derived from it). Their matching PNF Resource types would declare a requirement for its PNF Device capability. The resulting relationship would link the network function (PNF resource) to the physical device (PNF device) as a hosted on relationship.
PNF Resources are modeled as peers to VNFs and Allotted Resources, all being derivations of a base “Network Function” node type. There is no explicit node type for PNF Resource. This permits the three types to be used interchangeably in Abstract Node resolution. The three resource types (VNF, PNF, AR) do not require explicit subtypes, but instead are identified by their defined requirements:
Allotted Resources have a requirement for an Allotted Resource Provider service
PNF Resources have a requirement for a PNF Device
VNF Resources have neither A-R Provider nor PNF Device requirements.
Examples
This example shows a specific PNF device, along with the PNF resource that it exposes for use in ONAP services.
PNF Example
# A specific capability for this firewall PNF device
capability_types:
vendor.capabilities.pnfDevice.MyFirewall:
derived_from: onap.capabilities.PNFDevice
description: Declaration of being a specific PNF Device
# node types for the Firewall PNF device and corresponding PNF Resource
node_types:
vendor.nodes.devices.pnfs.MyFirewall:
derived_from: onap.nodes.PNFDevice
description: A PNF Firewall Device
properties:
# as needed
attributes:
# as needed
capabilities:
pnf_device:
type: vendor.capabilities.pnfDevice.MyFirewall
# My Firewall PNF Resource node type.
# Note that this could derive from an abstract Firewall node type for run-time selection.
vendor.nodes.resources.network_functions.MyFirewallPNF:
derived_from: onap.nodes.resources.NetworkFunction
description: A PNF Firewall Resource
properties:
# as needed
attributes:
# as needed
requirements:
- pnf_device:
capabilities:
type: vendor.capabilities.pnfDevice.MyFirewall
relationship: onap.relationships.PNFHostedOn
node: vendor.nodes.devices.pnfs.MyFirewall
This example shows a Service template consuming a PNF Firewall resource.
Service using PNF
node_templates:
# Node for the PNF Firewall Resource.
# Note that the requirement for PNF Device was declared in the MyFirewallPNF node
# type, and hence does not need to be restated here.
my_pnf_firewall:
type: vendor.nodes.resource.network_functions.MyFirewallPNF
properties:
# as needed
attributes:
# as needed