1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. Copyright 2017 AT&T Intellectual Property. All rights reserved.
12 This reference document is the VNF TOSCA Template Requirements for
13 ONAP, which provides recommendations and standards for building VNF
14 TOSCA templates compatible with ONAP initial implementations of
15 Network Cloud. It has the following features:
17 1. VNF TOSCA template designer supports GUI and CLI.
19 2. VNF TOSCA template is aligned to the newest TOSCA protocol, “Working
20 Draft 04-Revision 06”.
22 3. VNF TOSCA template supports HPA features, such as NUMA, Hyper
23 Threading, SRIOV, etc.
28 This document is intended for persons developing VNF TOSCA templates
29 that will be orchestrated by ONAP.
34 ONAP implementations of Network Cloud supports TOSCA Templates, also
35 referred to as TOSCA in this document.
37 ONAP requires the TOSCA Templates to follow a specific format. This
38 document provides the mandatory, recommended, and optional requirements
39 associated with this format.
44 The document includes three charters to help the VNF providers to use the
45 VNF model design tools and understand the VNF package structure and VNF
48 In the ONAP, VNF Package and VNFD template can be designed by manually
49 or via model designer tools. VNF model designer tools can provide the
50 GUI and CLI tools for the VNF provider to develop the VNF Package and VNFD
53 The VNF package structure is align to the NFV TOSCA protocol, and
56 The VNFD and VNF package are all align to the NFV TOSCA protocol, which
57 supports multiple TOSCA template yaml files, and also supports
58 self-defined node or other extensions.
63 TOSCA templates supported by ONAP must follow the requirements
64 enumerated in this section.
69 TOSCA defines a Meta model for defining IT services. This Meta model
70 defines both the structure of a service as well as how to manage it. A
71 Topology Template (also referred to as the topology model of a service)
72 defines the structure of a service. Plans define the process models that
73 are used to create and terminate a service as well as to manage a
74 service during its whole lifetime.
76 A Topology Template consists of a set of Node Templates and Relationship
77 Templates that together define the topology model of a service as a (not
78 necessarily connected) directed graph. A node in this graph is
79 represented by a *Node Template*. A Node Template specifies the
80 occurrence of a Node Type as a component of a service. A *Node Type*
81 defines the properties of such a component (via *Node Type Properties*)
82 and the operations (via *Interfaces*) available to manipulate the
83 component. Node Types are defined separately for reuse purposes and a
84 Node Template references a Node Type and adds usage constraints, such as
85 how many times the component can occur.
89 Figure 1: Structural Elements of Service Template and their Relations
91 TOSCA Modeling Principles & Data Model
92 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
94 This section describing TOSCA modeling principles and data model for
95 NFV, which shall be based on [TOSCA-1.0] and [TOSCA-Simple-Profile-YAML
96 V1.0], or new type based on ETSI NFV requirements, etc.
98 VNF Descriptor Template
99 ^^^^^^^^^^^^^^^^^^^^^^^^^
101 The VNF Descriptor (VNFD) describes the topology of the VNF by means of
102 ETSI NFV IFA011 [IFA011] terms such as VDUs, Connection Points, Virtual
103 Links, External Connection Points, Scaling Aspects, Instantiation Levels
104 and Deployment Flavours.
106 The VNFD (VNF Descriptor) is read by both the NFVO and the VNFM. It
107 represents the contract & interface of a VNF and ensures the
108 interoperability across the NFV functional blocks.
110 The main parts of the VNFD are the following:
112 - VNF topology: it is modeled in a cloud agnostic way using virtualized
113 containers and their connectivity. Virtual Deployment Units (VDU)
114 describe the capabilities of the virtualized containers, such as
115 virtual CPU, RAM, disks; their connectivity is modeled with VDU
116 Connection Point Descriptors (VduCpd), Virtual Link Descriptors (Vld)
117 and VNF External Connection Point Descriptors (VnfExternalCpd);
119 - VNF deployment aspects: they are described in one or more deployment
120 flavours, including instantiation levels, supported LCM operations,
121 VNF LCM operation configuration parameters, placement constraints
122 (affinity / antiaffinity), minimum and maximum VDU instance numbers,
123 and scaling aspect for horizontal scaling.
125 The following table defines the TOSCA Type “derived from” values that
126 SHALL be used when using the TOSCA Simple Profile for NFV version 1.0
127 specification [TOSCA-Simple-Profile-NFV-v1.0] for NFV VNFD with aggreed
128 changes from ETSI SOL001 draft.
130 +---------------------+------------------------------------+-----------------+
131 | **ETSI NFV Element**| **TOSCA VNFD** | **Derived from**|
133 | **[IFA011]** | **[TOSCA-Simple-Profile-NFV-v1.0]**| |
134 +=====================+====================================+=================+
135 | VNF | tosca.nodes.nfv.VNF | tosca.nodes.Root|
136 +---------------------+------------------------------------+-----------------+
137 | Cpd (Connection | tosca.nodes.nfv.Cp | tosca.nodes.Root|
138 | Point) | tosca.nodes.nfv.Cp | tosca.nodes.Root|
139 +---------------------+------------------------------------+-----------------+
140 | VduCpd (internal | tosca.nodes.nfv.VduCp | tosca.nodes.\ |
141 | connection point) | | nfv.Cp |
142 +---------------------+------------------------------------+-----------------+
143 | VnfVirtualLinkDesc | tosca.nodes.nfv.VnfVirtualLink | tosca.nodes.Root|
144 | (Virtual Link) | | |
145 +---------------------+------------------------------------+-----------------+
146 | VDU Virtual Storage | tosca.nodes.nfv.VDU.VirtualStorage | tosca.nodes.Root|
147 +---------------------+------------------------------------+-----------------+
148 | VDU Virtual Compute | tosca.nodes.nfv.VDU.Compute | tosca.nodes.Root|
149 +---------------------+------------------------------------+-----------------+
150 | Software Image | | |
151 +---------------------+------------------------------------+-----------------+
152 | Deployment Flavour | | |
153 +---------------------+------------------------------------+-----------------+
154 | Scaling Aspect | | |
155 +---------------------+------------------------------------+-----------------+
156 | Element Group | | |
157 +---------------------+------------------------------------+-----------------+
158 | Instantiation | | |
160 +---------------------+------------------------------------+-----------------+
163 +--------------------------------------------------------------------+
164 | +--------------------------------------------------------------+ |
165 | | tosca\_definitions\_version: tosca\_simple\_yaml\_1\_0 | |
167 | | description: VNFD TOSCA file demo | |
171 | | - TOSCA\_definition\_nfv\_1\_0.yaml | |
173 | | - TOSCA\_definition\_nfv\_ext\_1\_0.yaml | |
175 | | | **node\_types: | |
176 | | tosca.nodes.nfv.VNF.vOpenNAT: | |
177 | | derived\_from:** tosca.nodes.nfv.VNF | |
178 | | | **requirements: | |
179 | | **- **sriov\_plane: | |
180 | | capability:** tosca.capabilities.nfv.VirtualLinkable | |
181 | | | **node:** tosca.nodes.nfv.VnfVirtualLinkDesc | |
182 | | | **relationship:** tosca.relationships.nfv.VirtualLinksTo | |
183 | +--------------------------------------------------------------+ |
184 +====================================================================+
185 +--------------------------------------------------------------------+
190 1. SR-IOV Passthrought
192 Definitions of SRIOV\_Port are necessary if VDU supports SR-IOV. Here is
195 +------------------------------------------------+
204 | tosca\_name: SRIOV\_Port |
208 | virtual\_network\_interface\_requirements: |
212 | support\_mandatory: false |
214 | description: sriov |
222 | description: sriov port |
224 | layer\_protocol: ipv4 |
228 | - virtual\_binding: |
230 | capability: virtual\_binding |
236 | type: tosca.relationships.nfv.VirtualBindsTo |
240 | node: tosca.nodes.Root |
242 | type: tosca.nodes.nfv.VduCpd |
244 | substitution\_mappings: |
254 | node\_type: tosca.nodes.nfv.VNF.vOpenNAT |
255 +------------------------------------------------+
259 Definitions of mem\_page\_size as one property shall be added to
260 Properties and set the value to large if one VDU node supports
261 huagepages. Here is an example.
263 +----------------------------------+
272 | tosca\_name: Huge\_pages\_demo |
276 | mem\_page\_size:large |
277 +==================================+
278 +----------------------------------+
282 Likewise, we shall add definitions of numa to
283 requested\_additional\_capabilities if we wand VUD nodes to support
284 NUMA. Here is an example.
286 +-------------------------------------------------+
287 | topology\_template: |
295 | virtual\_compute: |
301 | numa\_enabled: true |
303 | virtual\_mem\_size: 2 GB |
305 | requested\_additional\_capabilities: |
309 | support\_mandatory: true |
311 | requested\_additional\_capability\_name: numa |
313 | target\_performance\_parameters: |
315 | hw:numa\_nodes: "2" |
317 | hw:numa\_cpus.0: "0,1" |
319 | hw:numa\_mem.0: "1024" |
321 | hw:numa\_cpus.1: "2,3,4,5" |
323 | hw:numa\_mem.1: "1024" |
324 +-------------------------------------------------+
328 Definitions of Hyper-Theading are necessary as one of
329 requested\_additional\_capabilities of one VUD node if that node
330 supports Hyper-Theading. Here is an example.
332 +-------------------------------------------------------------+
333 | topology\_template: |
341 | virtual\_compute: |
347 | numa\_enabled: true |
349 | virtual\_mem\_size: 2 GB |
351 | requested\_additional\_capabilities: |
353 | hyper\_threading: |
355 | support\_mandatory: true |
357 | requested\_additional\_capability\_name: hyper\_threading |
359 | target\_performance\_parameters: |
361 | hw:cpu\_sockets : "2" |
363 | hw:cpu\_threads : "2" |
365 | hw:cpu\_cores : "2" |
367 | hw:cpu\_threads\_policy: "isolate" |
368 +-------------------------------------------------------------+
372 Definitions of ovs\_dpdk are necessary as one of
373 requested\_additional\_capabilities of one VUD node if that node
374 supports dpdk. Here is an example.
376 +------------------------------------------------------+
377 | topology\_template: |
385 | virtual\_compute: |
391 | numa\_enabled: true |
393 | virtual\_mem\_size: 2 GB |
395 | requested\_additional\_capabilities: |
399 | support\_mandatory: true |
401 | requested\_additional\_capability\_name: ovs\_dpdk |
403 | target\_performance\_parameters: |
405 | sw:ovs\_dpdk: "true" |
406 +------------------------------------------------------+
408 NFV TOSCA Type Definition
409 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
411 tosca.capabilites.nfv.VirtualCompute
412 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
414 This capability is used with the properties specified in ETSI SOL001 draft.
416 tosca.nodes.nfv.VDU.Compute
417 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
419 The NFV Virtualization Deployment Unit (VDU) compute node type
420 represents a VDU entity which it describes the deployment and
421 operational behavior of a VNF component (VNFC), as defined by **[ETSI
424 +-----------------------+-------------------------------+
425 | Shorthand Name | VDU.Compute |
426 +=======================+===============================+
427 | Type Qualified Name | tosca:VDU.Compute |
428 +-----------------------+-------------------------------+
429 | Type URI | tosca.nodes.nfv.VDU.Compute |
430 +-----------------------+-------------------------------+
431 | derived\_from | tosca.nodes.Compute |
432 +-----------------------+-------------------------------+
445 +------------+--------------------+------------+------------------------------+
446 | Name | Type | Constraints| Description |
447 +============+====================+============+==============================+
448 | virtual\ | tosca.\ | | Describes virtual compute |
449 | _compute | capabilities.nfv.\ | | resources capabilities. |
450 | | VirtualCompute | | |
451 +------------+--------------------+------------+------------------------------+
452 | monitoring\| tosca.\ | None | Monitoring parameter, which |
453 | _parameter | capabilities.nfv.\ | | can be tracked for a VNFC |
454 | | Metric | | based on this VDU |
456 | | | | Examples include: |
457 | | | | memory-consumption, |
458 | | | | CPU-utilisation, |
459 | | | | bandwidth-consumption, VNFC |
460 | | | | downtime, etc. |
461 +------------+--------------------+------------+------------------------------+
462 | Virtual\ | tosca.\ | | Defines ability of |
463 | _binding | capabilities.nfv.\ | | VirtualBindable |
464 | | VirtualBindable | | |
466 | | editor note: need | | |
467 | | to create a | | |
468 | | capability type | | |
469 +------------+--------------------+------------+------------------------------+
474 +-----------------------------------------------------------------------------+
475 | tosca.nodes.nfv.VDU.Compute: |
477 | derived\_from: tosca.nodes.Compute |
495 | type: list # explicit index (boot index) not necessary, contrary to IFA011 |
503 | nfvi\_constraints: |
513 | configurable\_properties: |
519 | type: tosca.datatypes.nfv.VnfcConfigurableProperties |
525 | private\_address: |
527 | status: deprecated |
531 | status: deprecated |
535 | status: deprecated |
539 | status: deprecated |
543 | virtual\_compute: |
545 | type: tosca.capabilities.nfv.VirtualCompute |
547 | virtual\_binding: |
549 | type: tosca.capabilities.nfv.VirtualBindable |
551 | #monitoring\_parameter: |
553 | # modeled as ad hoc (named) capabilities in VDU node template |
559 | # cpu\_load: tosca.capabilities.nfv.Metric |
561 | # memory\_usage: tosca.capabilities.nfv.Metric |
563 | host: #Editor note: FFS. How this capabilities should be used in NFV Profile|
565 | type: `*tosca.capabilities.Container* <#DEFN_TYPE_CAPABILITIES_CONTAINER>`__|
567 | valid\_source\_types: |
568 | [`*tosca.nodes.SoftwareComponent* <#DEFN_TYPE_NODES_SOFTWARE_COMPONENT>`__] |
570 | occurrences: [0,UNBOUNDED] |
574 | occurrences: [0,0] |
578 | occurrences: [0,0] |
581 | #Editor note: FFS. How this capabilities should be used in NFV Profile |
583 | type: `*tosca.capabilities.Scalable* <#DEFN_TYPE_CAPABILITIES_SCALABLE>`__ |
587 | occurrences: [0,UNBOUND] |
591 | - virtual\_storage: |
593 | capability: tosca.capabilities.nfv.VirtualStorage |
595 | relationship: tosca.relationships.nfv.VDU.AttachedTo |
597 | node: tosca.nodes.nfv.VDU.VirtualStorage |
599 | occurences: [ 0, UNBOUNDED ] |
601 | - local\_storage: #For NFV Profile, this requirement is deprecated. |
603 | occurrences: [0,0] |
611 | type: tosca.artifacts.nfv.SwImage |
612 +-----------------------------------------------------------------------------+
617 Note: currently not supported.
619 +--------+---------+----------------+------------+------------------------+
620 | Name | Required| Type | Constraints| Description |
621 +========+=========+================+============+========================+
622 | SwImage| Yes | tosca.\ | | Describes the software |
623 | | | artifacts.nfv.\| | image which is directly|
624 | | | SwImage | | realizing this virtual |
626 +--------+---------+----------------+------------+------------------------+
633 tosca.nodes.nfv.VDU.VirtualStorage
634 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
636 The NFV VirtualStorage node type represents a virtual storage entity
637 which it describes the deployment and operational behavior of a virtual
638 storage resources, as defined by **[ETSI NFV IFA011].**
640 **[editor note]** open issue: should NFV profile use the current storage
641 model as described in YAML 1.1. Pending on Shitao proposal (see
642 NFVIFA(17)000110 discussion paper)
644 **[editor note]** new relationship type as suggested in Matt
645 presentation. Slide 8. With specific rules of “valid\_target\_type”
647 +---------------------------+--------------------------------------+
648 | **Shorthand Name** | VirtualStorage |
649 +===========================+======================================+
650 | **Type Qualified Name** | tosca: VirtualStorage |
651 +---------------------------+--------------------------------------+
652 | **Type URI** | tosca.nodes.nfv.VDU.VirtualStorage |
653 +---------------------------+--------------------------------------+
654 | **derived\_from** | tosca.nodes.Root |
655 +---------------------------+--------------------------------------+
657 tosca.artifacts.nfv.SwImage
658 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
660 +---------------------------+------------------------------------+
661 | **Shorthand Name** | SwImage |
662 +===========================+====================================+
663 | **Type Qualified Name** | tosca:SwImage |
664 +---------------------------+------------------------------------+
665 | **Type URI** | tosca.artifacts.nfv.SwImage |
666 +---------------------------+------------------------------------+
667 | **derived\_from** | tosca.artifacts.Deployment.Image |
668 +---------------------------+------------------------------------+
673 +-----------------+---------+----------+------------+-------------------------+
674 | Name | Required| Type | Constraints| Description |
675 +=================+=========+==========+============+=========================+
676 | name | yes | string | | Name of this software |
678 +-----------------+---------+----------+------------+-------------------------+
679 | version | yes | string | | Version of this software|
681 +-----------------+---------+----------+------------+-------------------------+
682 | checksum | yes | string | | Checksum of the software|
683 | | | | | image file |
684 +-----------------+---------+----------+------------+-------------------------+
685 | container\ | yes | string | | The container format |
686 | _format | | | | describes the container |
687 | | | | | file format in which |
688 | | | | | software image is |
689 | | | | | provided. |
690 +-----------------+---------+----------+------------+-------------------------+
691 | disk\_format | yes | string | | The disk format of a |
692 | | | | | software image is the |
693 | | | | | format of the underlying|
694 | | | | | disk image |
695 +-----------------+---------+----------+------------+-------------------------+
696 | min\_disk | yes | scalar-\ | | The minimal disk size |
697 | | | unit.size| | requirement for this |
698 | | | | | software image. |
699 +-----------------+---------+----------+------------+-------------------------+
700 | min\_ram | no | scalar-\ | | The minimal RAM |
701 | | | unit.size| | requirement for this |
702 | | | | | software image. |
703 +-----------------+---------+----------+------------+-------------------------+
704 | Size | yes | scalar-\ | | The size of this |
705 | | | unit.size| | software image |
706 +-----------------+---------+----------+------------+-------------------------+
707 | sw\_image | yes | string | | A reference to the |
708 | | | | | actual software image |
709 | | | | | within VNF Package, or |
711 +-----------------+---------+----------+------------+-------------------------+
712 | operating\ | no | string | | Identifies the operating|
713 | _system | | | | system used in the |
714 | | | | | software image. |
715 +-----------------+---------+----------+------------+-------------------------+
716 | supported\ | no | list | | Identifies the |
717 | _virtualization\| | | | virtualization |
718 | _enviroment | | | | environments (e.g. |
719 | | | | | hypervisor) compatible |
720 | | | | | with this software image|
721 +-----------------+---------+----------+------------+-------------------------+
726 +-----------------------------------------------------+
727 | tosca.artifacts.nfv.SwImage: |
729 | derived\_from: tosca.artifacts.Deployment.Image |
731 | properties or metadata: |
755 | container\_format: |
769 | type: scalar-unit.size # Number |
775 | type: scalar-unit.size # Number |
781 | type: scalar-unit.size # Number |
791 | operating\_system: |
797 | supported\_virtualisation\_environments: |
806 +-----------------------------------------------------+
808 .. |image1| image:: ../Image1.png
811 .. |image2| image:: ../Image2.png