VNF Model - vSBC
This page demonstrates a possible implementation of the VSBC VNF using the new ONAP DM.
Huawei vSBC CSAR (based on an intermediary version of SOL001)
The ONAP DM provides two techniques to model abstractions - through dangling requirements and abstract nodes, and this page shows how to use each of them:
Model Using Dangling Requirements
VNF Template
node_types:
vendorXXX.nodes.vfc.HRU:
derived_from: onap.nodes.NetworkFunctionComponent
artifacts:
image:
description: deployment image
type: tosca.artifacts.Deployment.Image
file: HRU_Image.iso
properties:
aaa:
type: string
required: false
requirements:
- storage_attachment_1:
capability: onap.capabilities.StorageAttachment
occurrences: [1, 1]
capabilities:
bind_intra_1:
type: onap.capabilities.Bindable
occurrences: [1, 1]
bind_intra_2:
type: onap.capabilities.Bindable
occurrences: [1, 1]
bind_ext_1:
type: onap.capabilities.Bindable
occurrences: [1, 1]
bind_ext_2:
type: onap.capabilities.Bindable
occurrences: [1, 1]
vendorXXX.nodes.vfc.CCU:
derived_from: onap.nodes.NetworkFunctionComponent
artifacts:
image:
description: deployment image
type: tosca.artifacts.Deployment.Image
file: CCU_Image.iso
properties:
bbb:
type: integer
constraints:
- valid_values: [1, 5, 11]
required: false
capabilities:
bind_1:
type: onap.capabilities.Bindable
occurrences: [1, 1]
vendorXXX.nodes.vfc.VPU:
derived_from: onap.nodes.NetworkFunctionComponent
artifacts:
image:
description: deployment image
type: tosca.artifacts.Deployment.Image
file: VPU_Image.iso
properties:
ccc:
type: string
required: false
requirements:
- storage_attachment_1:
capability: onap.capabilities.StorageAttachment
occurrences: [1, 1]
capabilities:
bind_intra_1:
type: onap.capabilities.Bindable
occurrences: [1, 1]
bind_intra_2:
type: onap.capabilities.Bindable
occurrences: [1, 1]
topology_template:
inputs:
node_templates:
hru:
type: vendorXXX.nodes.vfc.HRU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
aaa: 'lalala'
requirements:
- host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
- storage_attachment_1:
node_filter:
capabilities:
onap.capabilities.StorageAttachment:
properties:
- storage_size: {greater_or_equal: 100GB}
hru_ext_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_ext_1
- link:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
hru_ext_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_ext_2
- link:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
hru_int_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_intra_1
- link:
node: intra1
capability: link
hru_int_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_intra_2
- link:
node: intra2
capability: link
ccu:
type: vendorXXX.nodes.vfc.CCU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
bbb: 5
requirements:
- host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
ccu_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: ccu
capability: bind_1
- link:
node: intra1
capability: link
vpu:
type: vendorXXX.nodes.vfc.VPU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
ccc: 'lalala'
requirements:
- host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
- storage_attachment_1:
node_filter:
capabilities:
onap.capabilities.StorageAttachment:
properties:
- storage_size: {greater_or_equal: 100GB}
vpu_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: vpu
capability: bind_intra_1
- link:
node: intra1
capability: link
vpu_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: vpu
capability: bind_intra_2
- link:
node: intra2
capability: link
intra1:
type: onap.nodes.VL
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
link:
properties:
protocols: TCP
bitrate: 10 Kbps
intra2:
type: onap.nodes.VL
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
link:
properties:
protocols: Ethernet
bitrate: 10 Kbps
substitution_mappings:
type: vendorXXX.nodes.vnf.vSBC
requirements:
ext_link_1: [hru_ext_cp1, link]
ext_link_2: [hru_ext_cp2, link]
hru.host: [hru, host]
hru.storage_attachment_1: [hru, storage_attachment_1]
ccu.host: [ccu, host]
vpu.host: [vpu, host]
vpu.storage_attachment_1: [vpu, storage_attachment_1]
vSCB VNF Type
node_types:
vendorXXX.nodes.vnf.vSBC:
derived_from: onap.nodes.NetworkFunction
requirements:
- ext_link_1:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
- ext_link_2:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
- hru.host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
- hru.storage_attachment_1:
node_filter:
capabilities:
onap.capabilities.StorageAttachment:
properties:
- storage_size: {greater_or_equal: 100GB}
- ccu.host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
- vpu.host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
- vpu.storage_attachment_1:
node_filter:
capabilities:
onap.capabilities.StorageAttachment:
properties:
- storage_size: {greater_or_equal: 100GB}
Model Using Abstract Nodes
Functionally, this model is very similar to the previous solution, with few differences:
the function components HRU, CCU, and VPU are now "wired" to abstract Compute and Storage nodes, and the substitution mapping is now exposing the requirements of these abstract nodes.
now the model is able to explicitly express sharing of infrastructure between functional components
some precautions should have been taken in order to mitigate the risk of "capability-like requirements". The host capability of the AbstractCompute nodes and the attached_storage capability of the AbstractStorage node are not mapped through the substitution mapping, even though not all of their occurrences have been spent in the topology
VNF Template
topology_template:
inputs:
node_templates:
compute_1:
type: onap.nodes.AbstractCompute
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
host:
requirements:
- host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
compute_2:
type: onap.nodes.AbstractCompute
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
host:
requirements:
- host:
node_filter:
capabilities:
onap.capabilities.Compute:
properties:
- num_cpus: {greater_or_equal: 2}
- mem_size: {greater_or_equal: 1GB}
- local_storage_size: {greater_or_equal: 16GB}
storage_0:
type: onap.nodes.AbstractStorage
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
storage_attachment:
requirements:
- storage_attachment:
node_filter:
capabilities:
onap.capabilities.AttachedStorage:
properties:
- storage_size: {greater_or_equal: 16GB}
- storage_type: {equal: block}
hru:
type: vendorXXX.nodes.vfc.HRU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
aaa: 'lalala'
requirements:
- host:
node: compute_1
capability: host
- storage_attachment_1:
node: storage_0
capability: storage_attachment
hru_ext_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_ext_1
- link:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
hru_ext_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_ext_2
- link:
node_filter:
capabilities:
onap.capabilities.Linkable:
properties:
- protocol: {equal: Ethernet}
- bitrate: {greater_or_equal: 10 Kbps}
hru_int_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_intra_1
- link:
node: intra1
capability: link
hru_int_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: hru
capability: bind_intra_2
- link:
node: intra2
capability: link
ccu:
type: vendorXXX.nodes.vfc.CCU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
bbb: 5
requirements:
- host:
node: compute_2
capability: host
ccu_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: ccu
capability: bind_1
- link:
node: intra1
capability: link
vpu:
type: vendorXXX.nodes.vfc.VPU
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
ccc: 'lalala'
requirements:
requirements:
- host:
node: compute_2
capability: host
- storage_attachment_1:
node: storage_0:
capability: storage_attachment
vpu_cp1:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: vpu
capability: bind_intra_1
- link:
node: intra1
capability: link
vpu_cp2:
type: onap.nodes.CP
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
requirements:
- bind:
node: vpu
capability: bind_intra_2
- link:
node: intra2
capability: link
intra1:
type: onap.nodes.VL
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
link:
properties:
protocols: TCP
bitrate: 10 Kbps
intra2:
type: onap.nodes.VL
properties:
catalog_info:
invariantUUID: 63007034-0330-4132-b51e-87c6a64065f3
UUID: 9c6a1271-b443-48e3-8049-f5433db3d5f2
customizationUUID: 7f4e5e75-566c-48e8-99a7-c40cec1e4fd1
version: '2.0'
capabilities:
link:
properties:
protocols: Ethernet
bitrate: 10 Kbps
substitution_mappings:
type: vendorXXX.nodes.vnf.vSBC
requirements:
ext_link_1: [hru_ext_cp1, link]
ext_link_2: [hru_ext_cp2, link]
host_1: [compute_1, host]
host_2: [compute_2, host]
storage_attachment_1: [storage_0, storage_attachment]