Splitting VDU: VFC + Container
onap.nodes.ComputeIn the Info Model, the VDU element combines 2 aspects: application logic and expectations of the underlying infrastructure.
The Data Model implements the IM VDU element as a pair of related resources:
VFC - an ONAP resource that represents a piece of application-level logic and includes:
a requirement for hosting by a container
a software image to launch the application logic on the container
a free set of application-level requirements and capabilities
Container - an ONAP resource that represents a unit of infrastructure allocation. It expresses the following ideas:
a "hardware shopping list" - in the terms of TOSCA requirements, which are based on specially designed TOSCA capability types
a software image that the Orchestrator uses to launch such a unit - by means of a TOSCA artifact
an ability to host application logic - modeled as a TOSCA capability of a special capability type
ONAP Data Model Normatives
node_types:
# the very base of the hierarchy of VDU types
onap.nodes.Compute:
derived_from: onap.nodes.Resource
artifacts:
container_image:
type: tosca.artifacts.Deployment
description: an image used to launch the Container
interfaces:
Standard:
start:
implementation: container_image
capabilities:
host:
type: tosca.capabilities.Container # the TOSCA Specs type is good enough
occurrences: [0..UNBOUNDED]
requirements:
- cpu:
capability: onap.capabilities.infrastructure.CPU:
occurrences: [0..1]
- memory:
capability: onap.capabilities.infrastructure.Memory:
occurrences: [0..UNBOUNDED]
- storage:
capability: onap.capabilities.infrastructure.Storage:
occurrences: [0..UNBOUNDED]
- io:
capability: onap.capabilities.infrastructure.IO:
occurrences: [0..UNBOUNDED]
- nic:
capability: onap.capabilities.infrastructure.NIC:
occurrences: [0..UNBOUNDED]
It is possible to model nested hosting, for example a docker container running on a specific VM.
To create a reusable Container customization, create a sub-type:
Sample VDU sub-type - more details
# a more concrete VDU type
onap.nodes.sample.MyCompute:
derived_from: onap.nodes.Compute
artifacts:
container_image:
type: tosca.artifacts.Deployment.Image.VM.ISO
file: http://the.url.of/the.image.iso
interfaces:
Standard:
start:
implementation: image
capabilities:
host:
type: onap.capabilities.Container
requirements:
- cpu:
capability: onap.capabilities.infrastructure.CPU:
occurrences: [0..UNBOUNDED]
- memory:
capability: onap.capabilities.infrastructure.Memory:
occurrences: [0..UNBOUNDED]
- storage:
capability: onap.capabilities.infrastructure.Storage:
occurrences: [0..UNBOUNDED]
- io:
capability: onap.capabilities.infrastructure.IO:
occurrences: [0..UNBOUNDED]
- nic:
capability: onap.capabilities.infrastructure.NIC:
occurrences: [0..UNBOUNDED]
A Container node in a VNF topology:
Container node
node_templates:
container_123:
type: onap.nodes.sample.MyContainer
capabilities:
host: # just saying...
requirements:
- memory:
node_filter:
capabilities:
- onap.capabilities.infrastructure.Memory:
properties:
- mem_size: {greater_or_equal: 2MB}
- cpu:
node_filter:
capabilities:
- onap.capabilities.infrastructure.hpa.CPU:
properties:
- schema_selector:
constraints: # fixed value for this vendor
- equal_to: Intel64
- schema_version:
constraints:
- greater_or_equal: 2.0
- custom_features:
constraints:
- schema: http://json.schema.url
VFCs meet Containers:
VFCs meet VDUs
See also: Hardware Platform Requirements