1 .. Modifications Copyright © 2017-2018 AT&T Intellectual Property.
3 .. Licensed under the Creative Commons License, Attribution 4.0 Intl.
4 (the "License"); you may not use this documentation except in compliance
5 with the License. You may obtain a copy of the License at
7 .. https://creativecommons.org/licenses/by/4.0/
9 .. Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
21 This section contains general Heat Orchestration Template guidelines
24 Heat Template Compliance
25 ~~~~~~~~~~~~~~~~~~~~~~~~
27 The Heat Orchestration Template requirements with RFC 2119
28 keywords **MUST** and **MUST NOT** can be validated against a set of Heat
29 Templates via the VNF Validation Program (VVP).
31 **NOTE**: Not all requirements are currently testable via VVP.
33 The VVP *validation scripts* project contains python validation
34 scripts that will parse Heat Orchestration Templates in a given directory
35 to ensure that they comply with ONAP Heat Orchestration Template requirements.
37 For instructions on how to use the VVP validation scripts,
38 please see the validation scripts
39 `README <https://github.com/onap/vvp-validation-scripts>`__
50 A VNF's Heat Orchestration Template **MUST** be defined using valid YAML.
53 Markup Language) is a human friendly data serialization standard for all
54 programming languages. See http://www.yaml.org/.
56 Heat Orchestration Template Format
57 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
59 As stated above, Heat Orchestration templates must be defined in YAML.
63 - Tabs are not allowed, use spaces ONLY
65 - You must indent your properties and lists with 1 or more spaces
67 - All Resource IDs and resource property parameters are
68 case-sensitive. (e.g., "ThIs", is not the same as "thiS")
70 Heat Orchestration Template Structure
71 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 Heat Orchestration template structure follows the following format,
74 as defined by OpenStack at
75 https://docs.openstack.org/developer/heat/template_guide/hot_spec.html
79 heat_template_version: <date>
82 # a description of the template
85 # a declaration of input parameter groups and order
88 # declaration of input parameters
91 # declaration of template resources
94 # declaration of output parameters
97 # declaration of conditions
100 +++++++++++++++++++++
108 A VNF's Heat Orchestration template **MUST** contain
109 the section "heat_template_version:".
111 The section "heat_template_version:" must be set to a date
112 that is supported by the OpenStack environment.
123 A VNF's Heat Orchestration Template **MUST**
124 contain the section "description:".
129 A VNF Heat Orchestration template may
130 contain the section "parameter_groups:".
141 A VNF Heat Orchestration's template **MUST**
142 contain the section "parameters:".
151 type: <string | number | json | comma_delimited_list | boolean>
153 label: <human-readable name of the parameter>
155 description: <description of the parameter>
157 default: <default value for parameter>
159 hidden: <true | false>
163 <parameter constraints>
165 immutable: <true | false>
167 This section allows for
168 specifying input parameters that have to be provided when instantiating
169 the template. Each parameter is specified in a separate nested block
170 with the name of the parameters defined in the first line and additional
171 attributes (e.g., type, label) defined as nested elements.
179 A VNF's Heat Orchestration template's parameter **MUST**
180 be used in a resource with the exception of the parameters
181 for the OS::Nova::Server resource property availability_zone.
188 A VNF Heat Orchestration's template's parameter for
189 the OS::Nova::Server resource property availability_zone
190 **MAY NOT** be used in any OS::Nova::Resource.
192 That is, the parameter associated with the property 'availability_zone'
193 maybe declared but not used in a resource.
198 The name of the parameter.
206 A VNF's Heat Orchestration Template's parameter
207 name (i.e., <param name>) **MUST** contain only
208 alphanumeric characters and underscores ('_').
219 A VNF's Heat Orchestration Template's parameter
220 **MUST** include the attribute "type:".
227 A VNF's Heat Orchestration Template's parameter
228 type **MUST** be one of the following values: "string",
229 "number", "json", "comma_delimited_list" or "boolean".
240 A VNF's Heat Orchestration Template parameter
241 declaration **MAY** contain the attribute "label:".
252 A VNF's Heat Orchestration Template parameter
253 declaration **MUST** contain the attribute "description".
255 Note that the parameter attribute "description:" is an OpenStack
256 optional attribute that provides a description of the parameter.
257 ONAP implementation requires this attribute.
268 A VNF Heat Orchestration Template parameter
269 declaration **MUST** not contain the default attribute.
276 If a VNF Heat Orchestration Template parameter
277 requires a default value, it **MUST** be enumerated in the environment file.
279 Note that the parameter attribute "default:" is an OpenStack
280 optional attribute that declares the default value of the
281 parameter. ONAP implementation prohibits the use of this attribute.
292 A VNF's Heat Orchestration Template parameter
293 declaration **MAY** contain the attribute "hidden:".
295 The parameter attribute "hidden:" is an OpenStack optional
296 attribute that defines whether the parameters should be
297 hidden when a user requests information about a stack
298 created from the template. This attribute can be used
299 to hide passwords specified as parameters.
304 The parameter attribute "constraints:" is an OpenStack optional
305 attribute that defines a list of constraints to apply to the parameter.
313 A VNF's Heat Orchestration Template's parameter defined as
314 type "number" **MUST** have a parameter constraint of "range" or
315 "allowed_values" defined.
322 A VNF's Heat Orchestration Template's parameter defined as
323 type "string" **MAY** have a parameter constraint defined.
330 A VNF's Heat Orchestration Template's parameter defined as
331 type "json" **MAY** have a parameter constraint defined.
338 A VNF's Heat Orchestration Template's parameter defined as
339 type "comma_delimited_list" **MAY** have a parameter constraint defined.
346 A VNF's Heat Orchestration Template's parameter defined as
347 type "boolean" **MAY** have a parameter constraint defined.
354 A VNF's Heat Orchestration Template's Nested YAML files
355 parameter's **MUST NOT** have a parameter constraint defined.
357 The constraints block of a parameter definition defines additional
358 validation constraints that apply to the value of the parameter.
359 The parameter values provided in the VNF Heat Orchestration Template
360 are validated against the constraints at instantiation time.
361 The stack creation fails if the parameter value doesn't comply to
364 The constraints are defined as a list with the following syntax
370 <constraint type>: <constraint definition>
372 description: <constraint description>
376 **<constraint type>** Provides the type of constraint to apply.
377 The list of OpenStack supported constraints can be found at
378 https://docs.openstack.org/heat/latest/template_guide/hot_spec.html .
380 **<constraint definition>** provides the actual constraint.
381 The syntax and constraint is dependent of the <constraint type> used.
383 **description** is an optional attribute that provides a description of the
384 constraint. The text is presented to the user when the value the user
385 defines violates the constraint. If omitted, a default validation
386 message is presented to the user.
388 Below is a brief overview of the "range" and "allowed values" constraints.
389 For complete details on constraints, see
390 https://docs.openstack.org/heat/latest/template_guide/hot_spec.html#parameter-constraints
394 range: The range constraint applies to parameters of type: number.
395 It defines a lower and upper limit for the numeric value of the
396 parameter. The syntax of the range constraint is
400 range: { min: <lower limit>, max: <upper limit> }
404 It is possible to define a range constraint with only a lower
405 limit or an upper limit.
409 allowed_values: The allowed_values constraint applies to parameters of
410 type \"string\" or type \"number\". It specifies a set of possible
411 values for a parameter. At deployment time, the user-provided value
412 for the respective parameter must match one of the elements of the
413 list. The syntax of the allowed_values constraint is
417 allowed_values: [ <value>, <value>, ... ]
419 Alternatively, the following YAML list notation can be used
440 A VNF's Heat Orchestration Template parameter declaration
441 **MAY** contain the attribute "immutable:".
443 The parameter attribute \"immutable:\" is an OpenStack optional
444 attribute that defines whether the parameter is updatable. A Heat
445 Orchestration Template stack update fails if immutable is set to
446 true and the parameter value is changed. This attribute
447 \"immutable:\" defaults to false.
458 A VNF's Heat Orchestration template **MUST** contain
459 the section "resources:".
466 A VNF's Heat Orchestration Template's "resources:"
467 section **MUST** contain the declaration of at least one resource.
474 A VNF's Heat Orchestration Template's Nested YAML files
475 **MAY** contain the section "resources:".
477 Each resource is defined as a
478 separate block in the resources section with the following syntax.
486 type: <resource type>
490 <property name>: <property value>
494 <resource specific metadata>
496 depends_on: <resource ID or list of ID>
498 update_policy: <update policy>
500 deletion_policy: <deletion policy>
502 external_id: <external resource ID>
504 condition: <condition name or expression or boolean>
517 A VNF's Heat Orchestration Template's resource name
518 (i.e., <resource ID>) **MUST** only contain alphanumeric
519 characters and underscores ('_').
526 A VNF's <resource ID> **MUST** be unique across all
527 Heat Orchestration Templates and all HEAT Orchestration Template
528 Nested YAML files that are used to create the VNF.
530 Note that a VNF can be composed of one or more Heat Orchestration Templates.
532 Note that OpenStack requires the <resource ID> to be unique to the
533 Heat Orchestration Template and not unique across all Heat
534 Orchestration Templates the compose the VNF.
539 The resource attribute \"type:\" is an OpenStack required
540 attribute that defines the resource type, such as
541 OS::Nova::Server or OS::Neutron::Port.
543 The resource attribute \"type:\" may specify a VNF HEAT
544 Orchestration Template Nested YAML file.
552 A VNF's Heat Orchestration Template's Resource
553 **MUST NOT** reference a HTTP-based resource definitions.
560 A VNF's Heat Orchestration Template's Resource
561 **MUST NOT** reference a HTTP-based Nested YAML file.
566 The resource attribute \"properties:\" is an OpenStack optional
567 attribute that provides a list of resource-specific properties.
568 The property value can be provided in place, or via a function
569 (e.g., `Intrinsic functions <https://docs.openstack.org/developer/heat/template_guide/hot_spec.html#hot-spec-intrinsic-functions>`__).
577 :test_case: no test found
578 :test_file: no test found
580 If a VNF Heat Orchestration Template resource attribute
581 "property:" uses a nested "get_param", one level of nesting is
582 supported and the nested "get_param" **MUST** reference an index.
587 The resource attribute \"metadata:\" is an OpenStack optional attribute.
595 A VNF's Heat Orchestration Template's OS::Nova::Server
596 resource **MUST** contain the attribute "metadata".
598 Section 5.4 contains the OS::Nova::Server mandatory and optional metadata.
603 The resource attribute \"depends_on:\" is an OpenStack optional
605 See `OpenStack documentation <https://docs.openstack.org/developer/heat/template_guide/hot_spec.html#hot-spec-resources-dependencies>`__
606 for additional details.
614 VNF's Heat Orchestration Template's Resource **MAY**
615 declare the attribute "depends_on:".
626 VNF's Heat Orchestration Template's Resource **MAY**
627 declare the attribute "update_policy:".
638 A VNF's Heat Orchestration Template's Resource
639 **MAY** declare the attribute "deletion_policy:".
641 If specified, the \"deletion_policy:\" attribute for resources
642 allows values 'Delete', 'Retain', and 'Snapshot'.
643 Starting with heat_template_version 2016-10-14, lowercase
644 equivalents are also allowed.
646 The default policy is to delete the physical resource when
647 deleting a resource from the stack.
658 A VNF's Heat Orchestration Template's Resouce **MAY**
659 declare the attribute "external_id:".
661 This attribute allows for specifying the resource_id for an
662 existing external (to the stack) resource. External resources
663 cannot depend on other resources, but we allow other resources to
664 depend on external resource. This attribute is optional.
665 Note: when this is specified, properties will not be used for
666 building the resource and the resource is not managed by Heat.
667 This is not possible to update that attribute. Also,
668 resource won't be deleted by heat when stack is deleted.
674 The resource attribute \"condition:\" is an OpenStack optional attribute.
676 Support for the resource condition attribute was added
677 in the Newton release of OpenStack.
688 A VNF's Heat Orchestration template **MAY**
689 contain the "outputs:" section.
691 This section allows for specifying output parameters
692 available to users once the template has been instantiated. If the
693 section is specified, it will need to adhere to specific requirements.
694 See `Output Parameters`_ and
695 `ONAP Output Parameter Names`_ for additional details.
697 Environment File Format
698 ~~~~~~~~~~~~~~~~~~~~~~~
700 The environment file is a yaml text file.
701 (https://docs.openstack.org/developer/heat/template_guide/environment.html)
709 The VNF Heat Orchestration Template **MUST** have a corresponding
710 environment file, even if no parameters are required to be enumerated.
712 The use of an environment file in OpenStack is optional.
713 In ONAP, it is mandatory.
721 The VNF Heat Orchestration Template **MUST** contain the
722 "parameters" section in the environment file.
729 A VNF's Heat Orchestration template's Environment File's
730 "parameters:" section **MAY** enumerate parameters.
732 ONAP implementation requires the parameters section in the
733 environmental file to be declared. The parameters section
734 contains a list of key/value pairs.
742 A VNF's Heat Orchestration template's Environment
743 File's **MAY** contain the "parameter_defaults:" section.
745 The "parameter_defaults:" section contains default parameters
746 that are passed to all template resources.
754 A VNF's Heat Orchestration template's Environment File's
755 **MAY** contain the "encrypted_parameters:" section.
757 The "encrypted_parameters:" section contains a list of encrypted parameters.
765 A VNF's Heat Orchestration template's Environment File's
766 **MAY** contain the "event_sinks:" section.
768 The "event_sinks:" section contains the list of endpoints that would
769 receive stack events.
777 A VNF's Heat Orchestration template's Environment File's
778 **MAY** contain the "parameter_merge_strategies:" section.
780 The "parameter_merge_strategies:" section provides the merge strategies
781 for merging parameters and parameter defaults from the environment file.
789 A VNF's Heat Orchestration template's Environment File's **MUST NOT**
790 contain the "resource_registry:" section.
792 ONAP implementation does not support the Environment File
793 resource_registry section. The resource_registry section
794 allows for the definition of custom resources.
796 SDC Treatment of Environment Files
797 ++++++++++++++++++++++++++++++++++
799 Parameter values enumerated in the environment file are used by SDC as
800 the default value. However, the SDC user may use the SDC GUI to
801 overwrite the default values in the environment file.
803 SDC generates a new environment file for distribution to MSO based on
804 the uploaded environment file and the user provided GUI updates. The
805 user uploaded environment file is discarded when the new file is
808 ONAP has requirements for what parameters must be enumerated in the
809 environment file and what parameter must not be enumerated in the
810 environment file. See `Output Parameters`_ and
811 `ONAP Resource ID and Parameter Naming Convention`_ for more details.
813 ONAP Heat Orchestration Templates: Overview
814 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
816 ONAP supports a modular Heat Orchestration Template design pattern,
817 referred to as *VNF Modularity.*
819 ONAP VNF Modularity Overview
820 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
828 A VNF **MAY** be composed from one or more Heat Orchestration
829 Templates, each of which represents a subset of the overall VNF.
831 The Heat Orchestration Templates can be thought of a components or
832 modules of the VNF and are referred to as "\ *VNF Modules*\ ".
833 During orchestration, these modules are
834 deployed incrementally to create the complete VNF.
842 A VNF's Heat Orchestration Template **MAY** be
844 * a Base Module Heat Orchestration Template
845 (also referred to as a Base Module)
847 * an Incremental Module Heat Orchestration Template
848 (referred to as an Incremental Module)
850 * a Cinder Volume Module Heat Orchestration Template
851 (referred to as Cinder Volume Module).
858 The VNF **MUST** be composed of one "base" module.
865 A VNF **MAY** be composed of zero to many Incremental Modules.
872 The VNF **MUST** deploy the base module first, prior to
873 the incremental modules.
880 A VNF's incremental module **MAY** be used for initial VNF
888 A VNF's incremental module **MAY** be used for scale out only.
890 A VNF's Incremental Module that is used for scale out is deployed
891 sometime after initial VNF deployment to add capacity.
899 A VNF's incremental module **MAY** be used for both deployment
907 A VNF's incremental module **MAY** be deployed more than once,
908 either during initial VNF deployment and/or scale out.
915 A VNF's Heat Orchestration Template's Resource OS::Heat::CinderVolume
916 **MAY** be defined in a Base Module.
923 A VNF's Heat Orchestration Template's Resource OS::Heat::CinderVolume
924 **MAY** be defined in an Incremental Module.
931 A VNF's Heat Orchestration Template's Resource OS::Heat::CinderVolume
932 **MAY** be defined in a Cinder Volume Module.
934 ONAP also supports the concept of an optional, independently deployed Cinder
935 volume via a separate Heat Orchestration Templates, referred to as a Cinder
936 Volume Module. This allows the volume to persist after a Virtual Machine
937 (VM) (i.e., OS::Nova::Server) is deleted, allowing the volume to be reused
938 on another instance (e.g., during a failover activity).
945 The VNF **MUST** keep the scope of a Cinder volume module,
946 when it exists, to be 1:1 with the VNF Base Module or Incremental Module.
948 It is strongly recommended that Cinder Volumes be created in a Cinder Volume
956 The VNF **MUST** have a corresponding environment file for a Base Module.
963 The VNF **MUST** have a corresponding environment file for an Incremental Module.
970 The VNF **MUST** have a corresponding environment file for a Cinder Volume Module.
972 These concepts will be described in more detail throughout the document.
973 This overview is provided to set the stage and help clarify the concepts
974 that will be introduced.
976 Nested Heat Orchestration Templates Overview
977 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
979 ONAP supports nested Heat Orchestration Templates per OpenStack
988 A VNF's Base Module **MAY** utilize nested heat.
995 A VNF's Incremental Module **MAY** utilize nested heat.
1002 A VNF's Cinder Volume Module **MAY** utilize nested heat.
1004 Nested templates may be suitable for larger VNFs that contain many
1005 repeated instances of the same VM type(s). A common usage pattern is to
1006 create a nested template for each VM type along with its supporting
1007 resources. The Heat Orchestration Template may then reference these
1008 nested templates either statically (by repeated definition) or
1009 dynamically (via OS::Heat::ResourceGroup).
1011 See `Nested Heat Templates`_ for additional details.
1013 ONAP Heat Orchestration Template Filenames
1014 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1016 In order to enable ONAP to understand the relationship between Heat
1017 files, the following Heat file naming convention must be utilized.
1019 In the examples below, <text> represents any alphanumeric string that
1020 must not contain any special characters and must not contain the word
1029 A VNF's Heat Orchestration Template's file extension **MUST**
1030 be in the lower case format '.yaml' or '.yml'.
1037 A VNF's Heat Orchestration Template's Nested YAML file extension
1038 **MUST** be in the lower case format '.yaml' or '.yml'.
1045 A VNF's Heat Orchestration Template's Environment file extension
1046 **MUST** be in the lower case format '.env'.
1052 :test: no test found
1053 :test_case: no test found
1054 :test_file: no test found
1056 A VNF's YAML files (i.e, Heat Orchestration Template files and
1057 Nested files) **MUST** have a unique name in the scope of the VNF.
1068 A VNF Heat Orchestration Template's Base Module file name **MUST**
1069 include 'base' in the filename and **MUST** match one of the following four
1072 * 'base_<text>.y[a]ml'
1073 * '<text>_base.y[a]ml'
1075 * '<text>_base_<text>'.y[a]ml
1077 where 'base' is case insensitive and where '<text>'
1078 **MUST** contain only alphanumeric characters
1079 and underscores '_' and **MUST NOT** contain the case
1080 insensitive word 'base'.
1087 A VNF Heat Orchestration Template's Base Module's Environment File
1088 **MUST** be named identical to the VNF Heat Orchestration Template's Base
1089 Module with '.y[a]ml' replaced with '.env'.
1100 A VNF Heat Orchestration Template's Incremental Module file name
1101 **MUST** contain only alphanumeric characters and underscores '_' and
1102 **MUST NOT** contain the case insensitive word 'base'.
1109 A VNF Heat Orchestration Template's Incremental Module's Environment
1110 File **MUST** be named identical to the VNF Heat Orchestration Template's
1111 Incremental Module with '.y[a]ml' replaced with '.env'.
1113 To clearly identify the incremental module, it is recommended to use the
1114 following naming options for modules:
1116 - module_<text>.y[a]ml
1118 - <text>_module.y[a]ml
1122 - <text>_module_<text>.y[a]ml
1124 Cinder Volume Modules
1125 +++++++++++++++++++++
1133 A VNF Heat Orchestration Template's Cinder Volume Module **MUST** be
1134 named identical to the base or incremental module it is supporting with
1142 A VNF Heat Orchestration Template's Cinder Volume Module's Environment
1143 File **MUST** be named identical to the VNF Heat Orchestration Template's
1144 Cinder Volume Module with .y[a]ml replaced with '.env'.
1155 A VNF Heat Orchestration Template's Nested YAML file name **MUST**
1156 contain only alphanumeric characters and underscores '_' and **MUST NOT**
1157 contain the case insensitive word 'base'.
1163 :test: no test found
1164 :test_case: no test found
1165 :test_file: no test found
1167 A VNF HEAT's Orchestration Nested Template's YAML file
1168 name **MUST NOT** be in the format '{vm-type}.y[a]ml' where
1169 '{vm-type}' is defined in the Heat Orchestration Template.
1175 - nest_<text>.y[a]ml
1177 - <text>_nest.y[a]ml
1181 - <text>_nest_<text>.y[a]ml
1183 VNF Heat Orchestration Template's Nested YAML file does not have a
1184 corresponding environment files, per OpenStack specifications.
1189 The output parameters are parameters defined in the output section of a
1190 Heat Orchestration Template. The ONAP output parameters are subdivided
1191 into three categories:
1193 1. ONAP Base Module Output Parameters
1195 2. ONAP Volume Module Output Parameters
1197 3. ONAP Predefined Output Parameters.
1199 ONAP Base Module Output Parameters
1200 ++++++++++++++++++++++++++++++++++++
1202 ONAP Base Module Output Parameters are declared in the 'outputs:'' section of
1203 the VNF's Heat Orchestration Template's Base Module. A Base Module Output
1204 Parameter is available as an input parameter (i.e., declared in the
1205 'parameters:'' section) to all Incremental Modules in the VNF.
1207 A Base Module Output Parameter may be used as an input parameter in any
1208 incremental module in the VNF. Note that the parameter is not
1209 available to other VNFs.
1217 VNF's Heat Orchestration Template's Base Module's output parameter's
1218 name and type **MUST** match the VNF's Heat Orchestration Template's
1219 incremental Module's name and type unless the output parameter is of type
1220 'comma_delimited_list', then the corresponding input parameter **MUST**
1221 be declared as type 'json'.
1223 If the Output parameter has a comma_delimited_list value (e.g., a collection
1224 of UUIDs from a Resource Group), then the corresponding input parameter
1225 must be declared as type json and not a comma_delimited_list, which is
1226 actually a string value with embedded commas.
1234 When a VNF's Heat Orchestration Template's Base Module's output
1235 parameter is declared as an input parameter in an Incremental Module,
1236 the parameter attribute 'constraints:' **MUST NOT** be declared.
1238 Additional details on ONAP Base Module Output Parameters are provided in
1239 `ONAP Output Parameter Names`_ and ONAP VNF Modularity.
1241 ONAP Volume Module Output Parameters
1242 ++++++++++++++++++++++++++++++++++++
1250 A VNF's Heat Orchestration Template's Cinder Volume Module Output
1251 Parameter(s) **MUST** include the UUID(s) of the Cinder Volumes created in
1252 template, while other Output Parameters **MAY** be included.
1254 A VNF's Heat Orchestration Template's Cinder Volume Module Output Parameter(s)
1255 are only available for the module (base or incremental) that the volume
1256 template is associated with.
1264 A VNF's Heat Orchestration Templates' Cinder Volume Module Output
1265 Parameter's name and type **MUST** match the input parameter name and type
1266 in the corresponding Base Module or Incremental Module unless the Output
1267 Parameter is of the type 'comma\_delimited\_list', then the corresponding input
1268 parameter **MUST** be declared as type 'json'.
1270 If the Output parameter has a comma_delimited_list value (e.g., a collection
1271 of UUIDs from a Resource Group), then the corresponding input parameter must
1272 be declared as type json and not a comma\_delimited\_list, which is actually a
1273 string value with embedded commas.
1281 When an ONAP Volume Module Output Parameter is declared as an input
1282 parameter in a base or an incremental module Heat Orchestration Template,
1283 parameter constraints **MUST NOT** be declared.
1285 Additional details on ONAP Base Module Output Parameters are provided in
1286 `ONAP Output Parameter Names`_ and `Cinder Volumes`_.
1288 ONAP Predefined Output Parameters
1289 +++++++++++++++++++++++++++++++++++
1291 ONAP will look for a small set of pre-defined Heat output parameters to
1292 capture resource attributes for inventory in ONAP. These output parameters
1293 are optional and currently only two parameters are supported. These output
1294 parameters are optional and are specified in `OAM Management IP Addresses`_.
1296 Support of heat stack update
1297 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1299 ONAP does not support the use of heat stack-update command for scaling
1308 A VNF Heat Orchestration Template **MUST NOT** be designed to
1309 utilize the OpenStack 'heat stack-update' command for scaling
1317 A VNF **MUST** utilize a modular Heat Orchestration Template
1318 design to support scaling (growth/de-growth).
1320 Scope of a Heat Orchestration Template
1321 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1329 A VNF's Heat Orchestration Template **MUST NOT** be VNF instance
1330 specific or Cloud site specific.
1332 ONAP provides the instance specific parameter values to the Heat
1333 Orchestration Template at orchestration time.
1341 A VNF's Heat Orchestration Template's parameter values that are
1342 constant across all deployments **MUST** be declared in a Heat Orchestration
1343 Template Environment File.
1348 ONAP defines two types of networks: External Networks and Internal Networks.
1353 ONAP defines an external network in relation to the VNF and not with regard
1354 to the Network Cloud site. External networks may also be referred to as
1355 "inter-VNF" networks. An external network must connect VMs in a VNF to
1356 VMs in another VNF or an external gateway or external router.
1358 An External Network may be a Neutron Network or a Contrail Network.
1366 A VNF's Heat Orchestration Templates **MUST NOT** include heat
1367 resources to create external networks.
1369 External networks must be orchestrated separately, independent of the VNF.
1370 This allows the network to be shared by multiple VNFs and managed
1371 independently of VNFs.
1379 A VNF **MAY** be connected to zero, one or more than one external
1387 A VNF's port connected to an external network **MUST**
1388 use the port for the purpose of reaching VMs in another VNF
1389 and/or an external gateway and/or external router. A VNF's port
1390 connected to an external network **MAY** use the port for
1391 the purpose of reaching VMs in the same VNF.
1398 When a VNF connects to an external network, a network role,
1399 referred to as the '{network-role}' **MUST** be assigned to the
1400 external network for use in the VNF's Heat Orchestration Template.
1407 When a VNF connects to an external network, a network role, referred
1408 to as the '{network-role}' **MUST** be assigned to the external network
1409 for use in the VNF's Heat Orchestration Template.
1416 When a VNF connects to two or more external networks, each external
1417 network **MUST** be assigned a unique '{network-role}' in the context of
1418 the VNF for use in the VNF's Heat Orchestration Template.
1425 A VNF's '{network-role}' assigned to an external network **MUST**
1426 be different than the '{network-role}' assigned to the VNF's internal
1427 networks, if internal networks exist.
1433 :test: no test found
1434 :test_case: no test found
1435 :test_file: no test found
1437 An external network **MUST** have one subnet. An external network
1438 **MAY** have more than one subnet.
1440 Note that this document refers to **'{network-role}'** which in reality
1441 is the **'{network-role-tag}'**. The value of the
1442 '{network-role}' / '{network-role-tag}'
1443 is determined by the designer of the VNF's Heat Orchestration Template and
1444 there is no requirement for '{network-role}' / '{network-role-tag}'
1445 uniqueness across Heat Orchestration Templates for
1448 When an external network is created by ONAP, the network is assigned a
1449 '{network-role}'. The '{network-role}' of the network is not required to
1450 match the '{network-role}' of the VNF Heat Orchestration Template.
1452 For example, the VNF Heat Orchestration Template can assign a '{network-role}'
1453 of 'oam' to a network which attaches to an external network with a
1454 '{network-role}' of 'oam_protected_1' .
1456 When the Heat Orchestration Template is on-boarded into ONAP
1457 * each '{network-role}' value in the Heat Orchestration Template
1458 is mapped to the '{network-role-tag}' in the ONAP
1460 * each OS::Neutron::Port is associated with the external network it is
1461 connecting to, thus creating the VNF Heat Orchestration Template
1462 '{network-role}' / '{network-role-tag}' to external network '{network-role}'
1465 ONAP enforces a naming convention for parameters associated with
1466 external networks. `ONAP Resource ID and Parameter Naming Convention`_
1467 provides additional details.
1472 ONAP defines an internal network in relation to the VNF and not with
1473 regard to the Network Cloud site. Internal networks may also be referred
1474 to as "intra-VNF" networks or "private" networks. An internal network
1475 only connects VMs in a single VNF; it must not connect to other VNFs
1476 or an external gateway or router
1484 A VNF **MAY** contain zero, one or more than one internal networks.
1491 If a VNF has an internal network, the VNF Heat Orchestration
1492 Template **MUST** include the heat resources to create the internal network.
1499 A VNF **SHOULD** create the internal network in the VNF's Heat
1500 Orchestration Template Base Module.
1502 An Internal Network may be created using Neutron Heat Resources and/or
1503 Contrail Heat Resources.
1511 A VNF's port connected to an internal network **MUST** connect
1512 the port to VMs in the same VNF.
1519 A VNF's port connected to an internal network **MUST NOT** connect
1520 the port to VMs in another VNF and/or an external gateway and/or
1528 When a VNF creates an internal network, a network role, referred to
1529 as the '{network-role}' **MUST** be assigned to the internal network for
1530 use in the VNF's Heat Orchestration Template.
1537 When a VNF creates two or more internal networks, each internal
1538 network **MUST** be assigned a unique '{network-role}' in the context of
1539 the VNF for use in the VNF's Heat Orchestration Template.
1546 A VNF's '{network-role}' assigned to an internal network **MUST**
1547 be different than the '{network-role}' assigned to the VNF's external
1554 :test: no test found
1555 :test_case: no test found
1556 :test_file: no test found
1558 A VNF's internal network **MUST** have one subnet.
1559 A VNF's internal network **MAY** have more than one subnet.
1566 If a VNF's port is connected to an internal network and the port
1567 is created in the same Heat Orchestration Template as the internal network,
1568 then the port resource **MUST** use a 'get_resource' to obtain
1576 If a VNF's port is connected to an internal network and the
1577 port is created in an Incremental Module and the internal
1578 network is created in the Base Module then the UUID of the
1579 internal network **MUST** be exposed
1580 as a parameter in the 'outputs:' section of the Base Module and the port
1581 resource **MUST** use a 'get_param' to obtain the network UUID.
1583 ONAP does not programmatically enforce a naming convention for
1584 parameters for internal network. However, a naming convention is
1585 provided that must be followed.
1586 `ONAP Resource ID and Parameter Naming Convention`_
1587 provides additional details.
1589 ONAP Resource ID and Parameter Naming Convention
1590 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1592 This section provides the ONAP naming requirements for
1596 2. Resource Property Parameters
1607 When a VNF's Heat Orchestration Template creates a
1608 Virtual Machine (i.e., 'OS::Nova::Server'), each 'class' of VMs
1609 **MUST** be assigned a VNF unique '{vm-type}'; where 'class'
1610 defines VMs that **MUST** have the following identical characteristics:
1612 1.) OS::Nova::Server property flavor value
1614 2.) OS::Nova::Server property image value
1616 3.) Cinder Volume attachments
1617 - Each VM in the 'class' **MUST** have the identical Cinder Volume
1620 4.) Network attachments and IP address requirements
1621 - Each VM in the 'class' **MUST** have the the identical number
1622 of ports connecting to the identical networks and requiring the
1623 identical IP address configuration.
1630 A VNF's Heat Orchestration Template's Resource property
1631 parameter that is associated with a unique Virtual Machine
1632 type **MUST** include '{vm-type}' as part of the parameter
1633 name with two exceptions:
1635 1.) The Resource OS::Nova::Server property availability_zone parameter
1636 **MUST NOT** be prefixed with a common '{vm-type} identifier,
1638 2.) The Resource OS::Nova::Server eight mandatory and optional metadata
1639 parameters (vnf_name, vnf_id, vf_module_id, vf_module_name, vm_role,
1640 vf_module_index, environment_context, workload_context) **MUST NOT**
1641 be prefixed with a common '{vm-type}' identifier.
1648 A VNF's Heat Orchestration Template's Resource that is
1649 associated with a unique Virtual Machine type **MUST** include
1650 '{vm-type}' as part of the resource ID.
1657 A VNF's Heat Orchestration Template's '{vm-type}' **MUST** contain
1658 only alphanumeric characters and/or underscores '_' and
1659 **MUST NOT** contain any of the following strings: '_int' or 'int\_'
1667 A VNF's Heat Orchestration Template's {vm-type} **MUST NOT** be a
1668 substring of {network-role}.
1670 It may cause the VNF Validation Program validation-scripts project
1671 to produce erroneous error messages.
1679 A VNF's Heat Orchestration Template's use of '{vm-type}'
1680 in all Resource property parameter names **MUST** be the same case.
1687 A VNF's Heat Orchestration Template's use of
1688 '{vm-type}' in all Resource IDs **MUST** be the same case.
1695 A VNF's Heat Orchestration Template's '{vm-type}' case in
1696 Resource property parameter names **SHOULD** match the case of
1697 '{vm-type}' in Resource IDs and vice versa.
1702 The assignment of a {network-role} is discussed in `Networking`_.
1710 A VNF's Heat Orchestration Template's Resource property
1711 parameter that is associated with external network **MUST**
1712 include the '{network-role}' as part of the parameter name.
1719 A VNF's Heat Orchestration Template's Resource ID that is
1720 associated with an external network **MUST** include the
1721 '{network-role}' as part of the resource ID.
1728 A VNF's Heat Orchestration Template's Resource property
1729 parameter that is associated with an internal network
1730 **MUST** include 'int\_{network-role}' as part of the parameter
1731 name, where 'int\_' is a hard coded string.
1738 A VNF's Heat Orchestration Template's Resource ID that is
1739 associated with an internal network **MUST** include
1740 'int\_{network-role}' as part of the Resource ID, where
1741 'int\_' is a hard coded string.
1748 A VNF's Heat Orchestration Template's '{network-role}'
1749 **MUST** contain only alphanumeric characters and/or
1750 underscores '_' and **MUST NOT** contain any of the following
1751 strings: '_int' or 'int\_' or '\_int\_'.
1758 A VNF's Heat Orchestration Template's '{network-role}'
1759 **MUST NOT** be a substring of '{vm-type}'.
1761 For example, if a VNF has a '{vm-type}' of 'oam' and a
1762 '{network-role}' of 'oam\_protected' would be a violation of the requirement.
1770 A VNF's Heat Orchestration Template's use of '{network-role}'
1771 in all Resource property parameter names **MUST** be the same case.
1778 A VNF's Heat Orchestration Template's use of '{network-role}'
1779 in all Resource IDs **MUST** be the same case.
1786 A VNF's Heat Orchestration Template's '{network-role}' case
1787 in Resource property parameter names **SHOULD** match the case
1788 of '{network-role}' in Resource IDs and vice versa.
1793 Requirement R-75141 states a VNF's Heat Orchestration Template's
1794 resource name (i.e., <resource ID>) MUST only contain alphanumeric
1795 characters and underscores ('_').*
1797 Requirement R-16447 states a VNF's <resource ID> MUST be unique
1798 across all Heat Orchestration Templates and all HEAT Orchestration
1799 Template Nested YAML files that are used to create the VNF.
1801 As stated previously, OpenStack requires the <resource ID> to be unique
1802 to the Heat Orchestration Template and not unique across all Heat
1803 Orchestration Templates the compose the VNF.
1805 Heat Orchestration Template resources are described in `resources`_
1813 When a VNF's Heat Orchestration Template's resource is associated
1814 with a single '{vm-type}', the Resource ID **MUST** contain the '{vm-type}'.
1821 When a VNF's Heat Orchestration Template's resource is associated
1822 with a single external network, the Resource ID **MUST** contain the text
1830 When a VNF's Heat Orchestration Template's resource is associated
1831 with a single internal network, the Resource ID **MUST** contain the text
1832 'int\_{network-role}'.
1839 When a VNF's Heat Orchestration Template's resource is associated
1840 with a single '{vm-type}' and a single external network, the Resource
1841 ID text **MUST** contain both the '{vm-type}' and the '{network-role}'
1843 - the '{vm-type}' **MUST** appear before the '{network-role}' and **MUST**
1844 be separated by an underscore '_'
1846 - e.g.,'{vm-type}\_{network-role}', '{vm-type}\_{index}\_{network-role}'
1848 - note that an '{index}' value **MAY** separate the '{vm-type}' and the
1849 '{network-role}' and when this occurs underscores **MUST** separate the
1857 When a VNF's Heat Orchestration Template's resource is associated
1858 with a single '{vm-type}' and a single internal network, the Resource ID
1859 **MUST** contain both the '{vm-type}' and the 'int\_{network-role}' and
1861 - the '{vm-type}' **MUST** appear before the 'int\_{network-role}' and
1862 **MUST** be separated by an underscore '_'
1864 - e.g.,'{vm-type}\_int\_{network-role}', '{vm-type}_{index}\_int\_{network-role}'
1866 - note that an '{index}' value **MAY** separate the '{vm-type}' and the
1867 'int\_{network-role}' and when this occurs underscores **MUST** separate
1875 When a VNF's Heat Orchestration Template's resource is associated
1876 with more than one '{vm-type}' and/or more than one internal and/or
1877 external network, the Resource ID **MUST NOT** contain the '{vm-type}'
1878 and/or '{network-role}'/'int\_{network-role}'. It also should contain the
1879 term 'shared' and/or contain text that identifies the VNF
1886 When a VNF's Heat Orchestration Template's resource is associated
1887 with more than one '{vm-type}' and/or more than one internal and/or
1888 external network, the Resource ID **MAY** contain the term 'shared'
1889 and/or **MAY** contain text that identifies the VNF.
1896 When a VNF's Heat Orchestration Template's Resource ID contains
1897 an {index} value (e.g. multiple VMs of same {vm-type}), the '{index}'
1898 **MUST** start at zero and increment by one.
1900 OpenStack Heat Resources Resource ID Naming Convention
1901 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1903 Some OpenStack Heat Resources Resource IDs
1904 have mandatory or suggested naming conventions. They are provided
1905 in the following sections.
1915 :test: no test found
1916 :test_case: no test found
1917 :test_file: no test found
1919 A VNF's Heat Orchestration Template's Resource
1920 OS::Cinder::Volume Resource ID **SHOULD** use the naming convention
1922 * {vm-type}_volume_{index}
1926 * {vm-type} is the vm-type
1927 * {index} starts at zero and increments by one
1929 OS::Cinder::VolumeAttachment
1930 ____________________________
1937 :test: no test found
1938 :test_case: no test found
1939 :test_file: no test found
1941 A VNF's Heat Orchestration Template's Resource
1942 OS::Cinder::VolumeAttachment Resource ID **SHOULD** use the naming convention
1944 * {vm-type}_volume_attachment_{index}
1948 * {vm-type} is the vm-type
1949 * {index} starts at zero and increments by one
1951 OS::Heat::CloudConfig
1952 _____________________
1959 :test: no test found
1960 :test_case: no test found
1961 :test_file: no test found
1963 A VNF's Heat Orchestration Template's Resource
1964 'OS::Heat::CloudConfig' Resource ID **MUST** contain the '{vm-type}'.
1970 :test: no test found
1971 :test_case: no test found
1972 :test_file: no test found
1974 A VNF's Heat Orchestration Template's Resource 'OS::Heat::CloudConfig'
1975 Resource ID **MAY** use the naming convention
1981 * {vm-type} is the vm-type
1982 * 'RCC' signifies that it is the Resource Cloud Config
1984 OS::Heat::MultipartMime
1985 _______________________
1992 :test: no test found
1993 :test_case: no test found
1994 :test_file: no test found
1996 A VNF's Heat Orchestration Template's Resource
1997 'OS::Heat::MultipartMime' Resource ID **MUST** contain the '{vm-type}'.
2003 :test: no test found
2004 :test_case: no test found
2005 :test_file: no test found
2007 A VNF's Heat Orchestration Template's Resource
2008 'OS::Heat::MultipartMime' Resource ID **MAY** use the naming convention
2014 * {vm-type} is the vm-type
2015 * 'RMM' signifies that it is the Resource Multipart Mime
2017 OS::Heat::ResourceGroup
2018 _______________________
2020 There is only a mandatory naming convention for a 'OS::Heat::ResourceGroup'
2021 that is is creating sub-interfaces.
2028 :test: no test found
2029 :test_case: no test found
2030 :test_file: no test found
2032 A VNF's Heat Orchestration Template's Resource
2033 OS::Heat::ResourceGroup Resource ID that creates sub-interfaces **MUST**
2034 use the naming convention
2036 * {vm-type}_{vm-type_index}_subint_{network-role}_port_{port-index}_subinterfaces
2040 * {vm-type} is the vm-type
2041 * {vm-type_index} is the instance of the {vm-type}
2042 * {network-role} is the network-role of the networks
2043 that the sub-interfaces attach to
2044 * {port-index} is the instance of the the port on the vm-type
2045 attached to the network of {network-role}
2047 OS::Heat::SoftwareConfig
2048 ________________________
2055 :test: no test found
2056 :test_case: no test found
2057 :test_file: no test found
2059 A VNF's Heat Orchestration Template's Resource
2060 'OS::Heat::SoftwareConfig' Resource ID **MUST** contain the '{vm-type}'.
2066 :test: no test found
2067 :test_case: no test found
2068 :test_file: no test found
2070 A VNF's Heat Orchestration Template's Resource
2071 'OS::Heat::SoftwareConfig' Resource ID **MAY** use the naming convention
2077 * {vm-type} is the vm-type
2078 * 'RSC' signifies that it is the Resource Software Config
2088 :test: no test found
2089 :test_case: no test found
2090 :test_file: no test found
2092 A VNF's Heat Orchestration Template's Resource
2093 OS::Neutron::Net Resource ID **MUST** use the naming convention
2095 * int_{network-role}_network
2097 VNF Heat Orchestration Templates can only create internal networks.
2098 There is no {index} after {network-role} because {network-role}
2099 **MUST** be unique in the scope of the VNF's
2100 Heat Orchestration Template.
2110 :test: no test found
2111 :test_case: no test found
2112 :test_file: no test found
2114 A VNF's Heat Orchestration Template's Resource
2115 OS::Neutron::Port that is attaching to an external network Resource ID
2116 **MUST** use the naming convention
2118 * {vm-type}_{vm-type_index}_{network-role}_port_{port-index}
2122 * {vm-type} is the vm-type
2123 * {vm-type_index} is the instance of the {vm-type}
2124 * {network-role} is the network-role of the network
2125 that the port is attached to
2126 * {port-index} is the instance of the the port on the vm-type
2127 attached to the network of {network-role}
2133 :test: no test found
2134 :test_case: no test found
2135 :test_file: no test found
2137 A VNF's Heat Orchestration Template's Resource
2138 OS::Neutron::Port that is attaching to an internal network Resource ID
2139 **MUST** use the naming convention
2141 * {vm-type}_{vm-type_index}_int_{network-role}_port_{port-index}
2145 * {vm-type} is the vm-type
2146 * {vm-type_index} is the instance of the {vm-type}
2147 * {network-role} is the network-role of the network
2148 that the port is attached to
2149 * {port-index} is the instance of the the port on the vm-type
2150 attached to the network of {network-role}
2156 :test: no test found
2157 :test_case: no test found
2158 :test_file: no test found
2160 A VNF's Heat Orchestration Template's Resource
2161 OS::Neutron::Port that is creating a *Reserve Port* with an IPv4 address
2162 Resource ID **MUST** use the naming convention
2164 * reserve_port_{vm-type}_{network-role}_floating_ip_{index}
2168 * {vm-type} is the vm-type
2169 * {network-role} is the network-role of the network
2170 that the port is attached to
2171 * {index} is the instance of the IPv4 *Reserve Port*
2172 for the vm-type attached to the network of {network-role}
2178 :test: no test found
2179 :test_case: no test found
2180 :test_file: no test found
2182 A VNF's Heat Orchestration Template's Resource OS::Neutron::Port
2183 that is creating a *Reserve Port* with an IPv6 address Resource ID
2184 **MUST** use the naming convention
2186 * reserve_port_{vm-type}_{network-role}_floating_v6_ip_{index}
2190 * {vm-type} is the vm-type
2191 * {network-role} is the network-role of the network
2192 that the port is attached to
2193 * {index} is the instance of the IPv6 *Reserve Port*
2194 for the vm-type attached to the network of {network-role}
2196 OS::Neutron::SecurityGroup
2197 __________________________
2204 :test: no test found
2205 :test_case: no test found
2206 :test_file: no test found
2208 A VNF's Heat Orchestration Template's Resource
2209 OS::Neutron::SecurityGroup that is applicable to one {vm-type} and
2210 more than one network (internal and/or external) Resource ID
2211 **SHOULD** use the naming convention
2213 * {vm-type}_security_group
2217 * {vm-type} is the vm-type
2223 :test: no test found
2224 :test_case: no test found
2225 :test_file: no test found
2227 A VNF's Heat Orchestration Template's Resource
2228 OS::Neutron::SecurityGroup that is applicable to more than
2229 one {vm-type} and one external network Resource ID **SHOULD**
2230 use the naming convention
2232 * {network-role}_security_group
2236 * {network-role} is the network-role
2242 :test: no test found
2243 :test_case: no test found
2244 :test_file: no test found
2246 A VNF's Heat Orchestration Template's Resource
2247 OS::Neutron::SecurityGroup that is applicable to more than
2248 one {vm-type} and one internal network Resource ID **SHOULD**
2249 use the naming convention
2251 * int_{network-role}_security_group
2255 * {network-role} is the network-role
2261 :test: no test found
2262 :test_case: no test found
2263 :test_file: no test found
2265 A VNF's Heat Orchestration Template's Resource
2266 OS::Neutron::SecurityGroup that is applicable to one {vm-type}
2267 and one external network Resource ID **SHOULD** use the naming convention
2269 * {vm-type}_{network-role}_security_group
2273 * {vm-type} is the vm-type
2274 * {network-role} is the network-role
2280 :test: no test found
2281 :test_case: no test found
2282 :test_file: no test found
2284 A VNF's Heat Orchestration Template's Resource
2285 OS::Neutron::SecurityGroup that is applicable to one {vm-type}
2286 and one internal network Resource ID **SHOULD** use the naming convention
2288 * {vm-type}_int_{network-role}_security_group
2292 * {vm-type} is the vm-type
2293 * {network-role} is the network-role
2299 :test: no test found
2300 :test_case: no test found
2301 :test_file: no test found
2303 A VNF's Heat Orchestration Template's Resource
2304 OS::Neutron::SecurityGroup that is applicable to more than one
2305 {vm-type} and more than one network (internal and/or external)
2306 Resource ID **MAY** use the naming convention
2308 * shared_security_group
2312 * {vnf-type}_security_group
2316 * {vnf-type} describes the VNF
2326 :test: no test found
2327 :test_case: no test found
2328 :test_file: no test found
2330 A VNF's Heat Orchestration Template's Resource
2331 OS::Neutron::Subnet Resource ID **SHOULD** use the naming convention
2333 * int_{network-role}_subnet_{index}
2337 * {network-role} is the network-role
2338 * {index} is the {index} of the subnet of the network
2348 :test: no test found
2349 :test_case: no test found
2350 :test_file: no test found
2352 A VNF's Heat Orchestration Template's Resource
2353 OS::Nova::Keypair applies to one {vm-type} Resource ID **SHOULD**
2354 use the naming convention
2356 * {vm-type}_keypair_{index}
2360 * {network-role} is the network-role
2361 * {index} is the {index} of the keypair
2367 :test: no test found
2368 :test_case: no test found
2369 :test_file: no test found
2371 A VNF's Heat Orchestration Template's Resource OS::Nova::Keypair
2372 applies to all Virtual Machines in the the VNF, the Resource ID **SHOULD**
2373 use the naming convention
2375 * {vnf-type}_keypair
2379 * {vnf-type} describes the VNF
2389 :test: no test found
2390 :test_case: no test found
2391 :test_file: no test found
2393 A VNF's Heat Orchestration Template's Resource OS::Nova::Server
2394 Resource ID **MUST** use the naming convention
2396 * {vm-type}_server_{index}
2400 * {vm-type} is the vm-type
2401 * {index} is the index
2403 OS::Nova::ServerGroup
2404 _____________________
2411 :test: no test found
2412 :test_case: no test found
2413 :test_file: no test found
2415 A VNF's Heat Orchestration Template's Resource OS::Nova::ServerGroup
2416 Resource ID **MAY** use the naming convention
2422 * {vm-type}_Server_Grp
2426 * {vm-type}_ServerGroup
2430 * {vm-type}_servergroup
2432 Contrail Heat Resources Resource ID Naming Convention
2433 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2435 Some Contrail Heat Resources Resource IDs
2436 have mandatory or suggested naming conventions. They are provided
2437 in the following sections.
2440 OS::ContrailV2::InstanceIp
2441 __________________________
2448 :test: no test found
2449 :test_case: no test found
2450 :test_file: no test found
2452 A VNF's Heat Orchestration Template's Resource
2453 'OS::ContrailV2::InstanceIp' that is configuring an IPv4 Address
2454 on a port attached to an external network Resource ID **MUST**
2455 use the naming convention
2457 * {vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_IP_{index}
2461 * {vm-type} is the vm-type
2462 * {vm-type_index} is the instance of the {vm-type}
2463 * {network-role} is the network-role of the network
2464 that the port is attached to
2465 * {vmi_index} is the instance of the the virtual machine interface
2466 (e.g., port) on the vm-type
2467 attached to the network of {network-role}
2468 * 'IP' signifies that an IPv4 address is being configured
2469 * {index} is the index of the IPv4 address
2475 :test: no test found
2476 :test_case: no test found
2477 :test_file: no test found
2479 A VNF's Heat Orchestration Template's Resource
2480 'OS::ContrailV2::InstanceIp' that is configuring an
2481 IPv6 Address on a port attached to an external network
2482 Resource ID **MUST** use the naming convention
2484 * {vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_v6_IP_{index}
2488 * {vm-type} is the vm-type
2489 * {vm-type_index} is the instance of the {vm-type}
2490 * {network-role} is the network-role of the network
2491 that the port is attached to
2492 * {vmi_index} is the instance of the the virtual machine interface
2493 (e.g., port) on the vm-type
2494 attached to the network of {network-role}
2495 * 'v6_IP' signifies that an IPv6 address is being configured
2496 * {index} is the index of the IPv6 address
2502 :test: no test found
2503 :test_case: no test found
2504 :test_file: no test found
2506 A VNF's Heat Orchestration Template's Resource
2507 'OS::ContrailV2::InstanceIp' that is configuring an
2508 IPv4 Address on a port attached to an internal network
2509 Resource ID **MUST** use the naming convention
2511 * {vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_IP_{index}
2515 * {vm-type} is the vm-type
2516 * {vm-type_index} is the instance of the {vm-type}
2517 * {network-role} is the network-role of the network
2518 that the port is attached to
2519 * {vmi_index} is the instance of the the virtual machine interface
2520 (e.g., port) on the vm-type
2521 attached to the network of {network-role}
2522 * 'IP' signifies that an IPv4 address is being configured
2523 * {index} is the index of the IPv4 address
2529 :test: no test found
2530 :test_case: no test found
2531 :test_file: no test found
2533 A VNF's Heat Orchestration Template's Resource
2534 'OS::ContrailV2::InstanceIp' that is configuring an
2535 IPv6 Address on a port attached to an internal network
2536 Resource ID **MUST** use the naming convention
2538 * {vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_v6_IP_{index}
2542 * {vm-type} is the vm-type
2543 * {vm-type_index} is the instance of the {vm-type}
2544 * {network-role} is the network-role of the network
2545 that the port is attached to
2546 * {vmi_index} is the instance of the the virtual machine interface
2547 (e.g., port) on the vm-type
2548 attached to the network of {network-role}
2549 * 'v6_IP' signifies that an IPv6 address is being configured
2550 * {index} is the index of the IPv6 address
2556 :test: no test found
2557 :test_case: no test found
2558 :test_file: no test found
2560 A VNF's Heat Orchestration Template's Resource
2561 'OS::ContrailV2::InstanceIp' that is configuring an IPv4 Address
2562 on a sub-interface port attached to a sub-interface network
2563 Resource ID **MUST** use the naming convention
2565 * {vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}_IP_{index}
2569 * {vm-type} is the vm-type
2570 * {vm-type_index} is the instance of the {vm-type}
2571 * {network-role} is the network-role of the network
2572 that the port is attached to
2573 * {vmi_index} is the instance of the the virtual machine interface
2574 (e.g., port) on the vm-type
2575 attached to the network of {network-role}
2576 * 'IP' signifies that an IPv4 address is being configured
2577 * {index} is the index of the IPv4 address
2583 :test: no test found
2584 :test_case: no test found
2585 :test_file: no test found
2587 A VNF's Heat Orchestration Template's Resource
2588 'OS::ContrailV2::InstanceIp' that is configuring an IPv6 Address
2589 on a sub-interface port attached to a sub-interface network
2590 Resource ID **MUST** use the naming convention
2592 * {vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}_v6_IP_{index}
2596 * {vm-type} is the vm-type
2597 * {vm-type_index} is the instance of the {vm-type}
2598 * {network-role} is the network-role of the network
2599 that the port is attached to
2600 * {vmi_index} is the instance of the the virtual machine interface
2601 (e.g., port) on the vm-type
2602 attached to the network of {network-role}
2603 * 'v6_IP' signifies that an IPv6 address is being configured
2604 * {index} is the index of the IPv6 address
2606 OS::ContrailV2::InterfaceRouteTable
2607 ___________________________________
2614 :test: no test found
2615 :test_case: no test found
2616 :test_file: no test found
2618 A VNF's Heat Orchestration Template's Resource
2619 'OS::ContrailV2::InterfaceRouteTable' Resource ID **MUST**
2620 contain the '{network-role}'.
2626 :test: no test found
2627 :test_case: no test found
2628 :test_file: no test found
2630 A VNF's Heat Orchestration Template's Resource
2631 'OS::ContrailV2::InterfaceRouteTable' Resource ID **MAY**
2632 use the naming convention
2634 * {network-role}_RIRT
2638 * {network-role} is the network-role
2639 * 'RIRT' signifies that it is the Resource Interface Route Table
2641 OS::ContrailV2::NetworkIpam
2642 ___________________________
2649 :test: no test found
2650 :test_case: no test found
2651 :test_file: no test found
2653 A VNF's Heat Orchestration Template's Resource
2654 'OS::ContrailV2::NetworkIpam' Resource ID **MUST**
2655 contain the '{network-role}'.
2661 :test: no test found
2662 :test_case: no test found
2663 :test_file: no test found
2665 A VNF's Heat Orchestration Template's Resource
2666 'OS::ContrailV2::NetworkIpam' Resource ID **MAY**
2667 use the naming convention
2669 * {network-role}_RNI
2673 * {network-role} is the network-role
2674 * 'RNI' signifies that it is the Resource Network IPAM
2676 OS::ContrailV2::PortTuple
2677 _________________________
2684 :test: no test found
2685 :test_case: no test found
2686 :test_file: no test found
2688 A VNF's Heat Orchestration Template's Resource
2689 'OS::ContrailV2::PortTuple' Resource ID **MUST**
2690 contain the '{vm-type}'.
2696 :test: no test found
2697 :test_case: no test found
2698 :test_file: no test found
2700 A VNF's Heat Orchestration Template's Resource
2701 'OS::ContrailV2::PortTuple' Resource ID **MAY**
2702 use the naming convention
2708 * {vm-type} is the vm-type
2709 * 'RPT' signifies that it is the Resource Port Tuple
2711 OS::ContrailV2::ServiceHealthCheck
2712 __________________________________
2719 :test: no test found
2720 :test_case: no test found
2721 :test_file: no test found
2723 A VNF's Heat Orchestration Template's Resource
2724 'OS::ContrailV2::ServiceHealthCheck' Resource ID **MUST**
2725 contain the '{vm-type}'.
2731 :test: no test found
2732 :test_case: no test found
2733 :test_file: no test found
2735 A VNF's Heat Orchestration Template's Resource
2736 'OS::ContrailV2::ServiceHealthCheck' Resource ID
2737 **MAY** use the naming convention
2739 * {vm-type}_RSHC_{LEFT|RIGHT}
2743 * {vm-type} is the vm-type
2744 * 'RSHC' signifies that it is the Resource Service Health Check
2745 * 'LEFT' is used if the Service Health Check is on the left interface
2746 * 'RIGHT' is used if the Service Health Check is on the right interface
2748 OS::ContrailV2::ServiceTemplate
2749 _______________________________
2756 :test: no test found
2757 :test_case: no test found
2758 :test_file: no test found
2760 A VNF's Heat Orchestration Template's Resource
2761 'OS::ContrailV2::ServiceTemplate' Resource ID **MUST**
2762 contain the '{vm-type}'.
2768 :test: no test found
2769 :test_case: no test found
2770 :test_file: no test found
2772 A VNF's Heat Orchestration Template's Resource
2773 'OS::ContrailV2::ServiceTemplate' Resource ID **MAY**
2774 use the naming convention
2776 * {vm-type}_RST_{index}
2780 * {vm-type} is the vm-type
2781 * 'RST' signifies that it is the Resource Service Template
2782 * '{index}' is is the index
2784 OS::ContrailV2::VirtualMachineInterface
2785 _______________________________________
2792 :test: no test found
2793 :test_case: no test found
2794 :test_file: no test found
2796 A VNF's Heat Orchestration Template's Resource
2797 OS::ContrailV2::VirtualMachineInterface that is attaching
2798 to an external network Resource ID **MUST**
2799 use the naming convention
2801 * {vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}
2805 * {vm-type} is the vm-type
2806 * {vm-type_index} is the instance of the {vm-type}
2807 * {network-role} is the network-role of the network
2808 that the port (i.e. virtual machine interface) is attached to
2809 * {vmi_index} is the instance of the the vmi on the vm-type
2810 attached to the network of {network-role}
2816 :test: no test found
2817 :test_case: no test found
2818 :test_file: no test found
2820 A VNF's Heat Orchestration Template's Resource
2821 OS::ContrailV2::VirtualMachineInterface that is attaching
2822 to an internal network Resource ID **MUST** use the naming convention
2824 * {vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}
2828 * {vm-type} is the vm-type
2829 * {vm-type_index} is the instance of the {vm-type}
2830 * {network-role} is the network-role of the network
2831 that the port (i.e. virtual machine interface) is attached to
2832 * {vmi_index} is the instance of the the vmi on the vm-type
2833 attached to the network of {network-role}
2839 :test: no test found
2840 :test_case: no test found
2841 :test_file: no test found
2843 A VNF's Heat Orchestration Template's Resource
2844 OS::ContrailV2::VirtualMachineInterface that is attaching to
2845 a sub-interface network Resource ID **MUST** use the naming convention
2847 * {vm-type}_{vm-type_index}_subint_{network-role}_vmi_{vmi_index}
2851 * {vm-type} is the vm-type
2852 * {vm-type_index} is the instance of the {vm-type}
2853 * {network-role} is the network-role of the network
2854 that the port (i.e. virtual machine interface) is attached to
2855 * {vmi_index} is the instance of the the vmi on the vm-type
2856 attached to the network of {network-role}
2858 OS::ContrailV2::VirtualNetwork
2859 ______________________________
2866 :test: no test found
2867 :test_case: no test found
2868 :test_file: no test found
2870 A VNF's Heat Orchestration Template's Resource
2871 OS::ContrailV2::VirtualNetwork Resource ID **MUST**
2872 use the naming convention
2874 * 'int_{network-role}_network'
2878 * 'int_{network-role}_RVN' where RVN represents Resource Virtual Network
2880 VNF Heat Orchestration Templates can only create internal networks.
2881 There is no {index} after {network-role} because {network-role}
2882 **MUST** be unique in the scope of the VNF's
2883 Heat Orchestration Template.
2885 Note that the first option is preferred.
2887 Resource: OS::Nova::Server - Parameters
2888 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2890 The resource OS::Nova::Server manages the running virtual machine (VM)
2891 instance within an OpenStack cloud. (See
2892 https://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Nova::Server.)
2894 The following four properties of the OS::Nova::Server must follow
2895 the ONAP parameter naming convention. The four properties are:
2903 4. availability\_zone
2905 Requirement R-01455 defines how the '{vm-type}' is defined.
2907 Requirement R-82481 defines how the '{vm-type}' is used.
2909 The table below provides a summary. The sections that follow provides
2910 the detailed requirements.
2912 .. csv-table:: **Table 4 OS::Nova::Server Resource Property Parameter Naming Convention**
2913 :header: Property Name,Parameter Type,Parameter Name,Parameter Value Provided to Heat
2917 OS::Nova::Server, image, string, {vm-type}\_image\_name, Environment File
2918 OS::Nova::Server, flavor, string, {vm-type}\_flavor\_name, Environment File
2919 OS::Nova::Server, name, string, {vm-type}\_name\_{index}, ONAP
2920 OS::Nova::Server, name, CDL, {vm-type}\_names, ONAP
2921 OS::Nova::Server, availability\_zone, string, availability\_zone\_{index}, ONAP
2932 The VNF's Heat Orchestration Template's Resource
2933 'OS::Nova::Server' property 'image' parameter **MUST** be declared as
2941 The VNF's Heat Orchestration Template's Resource
2942 'OS::Nova::Server' property 'image' parameter name **MUST** follow the
2943 naming convention '{vm-type}_image_name'.
2950 The VNF's Heat Orchestration Template's Resource
2951 'OS::Nova::Server' property 'image' parameter **MUST** be enumerated in
2952 the Heat Orchestration Template's Environment File and a value **MUST** be
2960 Each VNF's Heat Orchestration Template's '{vm-type}'
2961 **MUST** have a unique parameter name for the 'OS::Nova::Server'
2962 property 'image' even if more than one {vm-type} shares the same image.
2964 *Example Parameter Definition*
2966 .. code-block:: yaml
2969 {vm-type}_image_name:
2971 description: {vm-type} server image
2982 The VNF's Heat Orchestration Template's Resource
2983 'OS::Nova::Server' property 'flavor' parameter **MUST** be declared as
2991 The VNF's Heat Orchestration Template's Resource
2992 'OS::Nova::Server' property 'flavor' parameter name **MUST** follow the
2993 naming convention '{vm-type}_flavor_name'.
3000 The VNF's Heat Orchestration Template's Resource
3001 'OS::Nova::Server' property 'flavor' parameter **MUST** be enumerated in the
3002 Heat Orchestration Template's Environment File and a value **MUST** be
3010 Each VNF's Heat Orchestration Template's '{vm-type}' **MUST**
3011 have a unique parameter name for the 'OS::Nova::Server' property
3012 'flavor' even if more than one {vm-type} shares the same flavor.
3014 *Example Parameter Definition*
3016 .. code-block:: yaml
3019 {vm-type}_flavor_name:
3021 description: {vm-type} flavor
3032 The VNF's Heat Orchestration Template's Resource
3033 'OS::Nova::Server' property 'name' parameter **MUST** be declared as
3034 either type 'string' or type 'comma\_delimited\_list".
3041 When the VNF's Heat Orchestration Template's Resource
3042 'OS::Nova::Server' property 'name' parameter is defined as a 'string',
3043 the parameter name **MUST** follow the naming convention
3044 '{vm-type}\_name\_{index}', where {index} is a numeric value that starts
3045 at zero and increments by one.
3052 When the VNF's Heat Orchestration Template's Resource
3053 'OS::Nova::Server' property 'name' parameter is defined as a 'string',
3054 a parameter **MUST** be declared for each 'OS::Nova::Server' resource
3055 associated with the '{vm-type}'.
3062 When the VNF's Heat Orchestration Template's Resource
3063 'OS::Nova::Server' property 'name' parameter is defined as a
3064 'comma_delimited_list', the parameter name **MUST** follow the naming
3065 convention '{vm-type}_names'.
3072 When the VNF's Heat Orchestration Template's Resource
3073 'OS::Nova::Server' property 'name' parameter is defined as a
3074 'comma_delimited_list', a parameter **MUST** be delcared once for all
3075 'OS::Nova::Server' resources associated with the '{vm-type}'.
3082 The VNF's Heat Orchestration Template's Resource
3083 'OS::Nova::Server' property 'name' parameter **MUST NOT** be enumerated
3084 in the Heat Orchestration Template's Environment File.
3086 If a VNF's Heat Orchestration Template's contains more than three
3087 OS::Nova::Server resources of a given {vm-type}, the comma\_delimited\_list
3088 form of the parameter name (i.e., '{vm-type}\_names') should be used to
3089 minimize the number of unique parameters defined in the template.
3092 *Example: Parameter Definition*
3094 .. code-block:: yaml
3099 type: comma_delimited_list
3100 description: VM Names for {vm-type} VMs
3102 {vm-type}_name_{index}:
3104 description: VM Name for {vm-type} VM {index}
3106 *Example: comma\_delimited\_list*
3108 In this example, the {vm-type} has been defined as "lb" for load balancer.
3110 .. code-block:: yaml
3115 type: comma_delimited_list
3116 description: VM Names for lb VMs
3120 type: OS::Nova::Server
3122 name: { get_param: [lb_names, 0] }
3126 type: OS::Nova::Server
3128 name: { get_param: [lb_names, 1] }
3131 *Example: fixed-index*
3133 In this example, the {vm-type} has been defined as "lb" for load balancer.
3135 .. code-block:: yaml
3141 description: VM Name for lb VM 0
3145 description: VM Name for lb VM 1
3150 type: OS::Nova::Server
3152 name: { get_param: lb_name_0 }
3156 type: OS::Nova::Server
3158 name: { get_param: lb_name_1 }
3161 Contrail Issue with Values for OS::Nova::Server Property Name
3162 _____________________________________________________________
3168 :keyword: SHOULD NOT
3170 The VNF's Heat Orchestration Template's Resource
3171 'OS::Nova::Server' property 'name' parameter value **SHOULD NOT**
3172 contain special characters since the Contrail GUI has a limitation
3173 displaying special characters.
3175 However, if special characters must be used, the only special characters
3178 --- \" ! $ ' (\ \ ) = ~ ^ | @ ` { } [ ] > , . _
3181 Property: availability\_zone
3182 ++++++++++++++++++++++++++++
3190 The VNF's Heat Orchestration Template's Resource
3191 'OS::Nova::Server' property 'availability\_zone' parameter name
3192 **MUST** follow the naming convention 'availability\_zone\_{index}'
3193 where the '{index}' **MUST** start at zero and increment by one.
3200 The VNF's Heat Orchestration Template's Resource
3201 'OS::Nova::Server' property 'availability_zone' parameter **MUST**
3202 be declared as type: 'string'.
3204 The parameter must not be declared as type 'comma\_delimited\_list',
3205 ONAP does not support it.
3213 The VNF's Heat Orchestration Template's Resource
3214 'OS::Nova::Server' property 'availability_zone' parameter **MUST NOT**
3215 be enumerated in the Heat Orchestration Template's Environment File.
3217 Example Parameter Definition
3219 .. code-block:: yaml
3222 availability_zone_{index}:
3224 description: availability zone {index} name
3226 Requirement R-90279 states that a VNF Heat Orchestration's template's
3227 parameter MUST be used in a resource with the exception of the parameters
3228 for the OS::Nova::Server resource property availability_zone.
3236 A VNF's Heat Orchstration Template that contains an
3237 'OS::Nova:Server' Resource **MAY** define a parameter for the property
3238 'availability_zone' that is not utilized in any 'OS::Nova::Server'
3239 resources in the Heat Orchestration Template.
3244 The example below depicts part of a Heat Orchestration Template that
3245 uses the four OS::Nova::Server properties discussed in this section.
3247 In the Heat Orchestration Template below, four Virtual
3248 Machines (OS::Nova::Server) are created: two dns servers with
3249 {vm-type} set to "dns" and two oam servers with {vm-type} set to "oam".
3250 Note that the parameter associated with the property name is a
3251 comma_delimited_list for dns and a string for oam.
3253 .. code-block:: yaml
3259 description: dns server image
3263 description: dns server flavor
3266 type: comma_delimited_list
3267 description: dns server names
3271 description: oam server image
3275 description: oam server flavor
3279 description: oam server name 0
3283 description: oam server name 1
3285 availability_zone_0:
3287 description: availability zone ID or Name
3289 availability_zone_1:
3291 description: availability zone ID or Name
3296 type: OS::Nova::Server
3298 name: { get_param: [ dns_names, 0 ] }
3299 image: { get_param: dns_image_name }
3300 flavor: { get_param: dns_flavor_name }
3301 availability_zone: { get_param: availability_zone_0 }
3306 type: OS::Nova::Server
3308 name: { get_param: [ dns_names, 1 ] }
3309 image: { get_param: dns_image_name }
3310 flavor: { get_param: dns_flavor_name }
3311 availability_zone: { get_param: availability_zone_1 }
3316 type: OS::Nova::Server
3318 name: { get_param: oam_name_0 }
3319 image: { get_param: oam_image_name }
3320 flavor: { get_param: oam_flavor_name }
3321 availability_zone: { get_param: availability_zone_0 }
3326 type: OS::Nova::Server
3328 name: { get_param: oam_name_1 }
3329 image: { get_param: oam_image_name }
3330 flavor: { get_param: oam_flavor_name }
3331 availability_zone: { get_param: availability_zone_1 }
3344 A VNF's Heat Orchestration Template's Virtual Machine
3345 (i.e., OS::Nova::Server Resource) **MAY** boot from an image or **MAY**
3346 boot from a Cinder Volume.
3353 When a VNF's Heat Orchestration Template's Virtual Machine
3354 (i.e., 'OS::Nova::Server' Resource) boots from an image, the
3355 'OS::Nova::Server' resource property 'image' **MUST** be used.
3357 The requirements associated with
3358 the 'image' property are detailed in `Property: image`_
3366 When a VNF's Heat Orchestration Template's Virtual Machine
3367 (i.e., 'OS::Nova::Server' Resource) boots from Cinder Volume, the
3368 'OS::Nova::Server' resource property 'block_device_mapping' or
3369 'block_device_mapping_v2' **MUST** be used.
3371 There are currently no heat guidelines
3372 associated with these two properties:
3373 'block_device_mapping' and 'block_device_mapping_v2'.
3375 Resource: OS::Nova::Server – Metadata Parameters
3376 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3378 The OS::Nova::Server Resource property metadata is an optional
3380 The table below summarizes the mandatory and optional metadata
3383 The sections that follow provides the requirements associated with each
3386 .. csv-table:: **Table 5 OS::Nova::Server Mandatory and Optional Metadata**
3387 :header: Metadata Parameter Name, Parameter Type, Required, Parameter Value Provided to Heat
3391 vnf_id, string, **MUST**, ONAP
3392 vf_module_id, string, **MUST**, ONAP
3393 vnf_name, string, **MUST**, ONAP
3394 vf_module_name, string, **SHOULD**, ONAP
3395 vm_role, string, **MAY**, YAML or Environment File
3396 vf_module_index, string, **MAY**, ONAP
3397 workload_context, string, **SHOULD**, ONAP
3398 environment_context, string, **SHOULD**, ONAP
3403 The OS::Nova::Server Resource metadata map value parameter 'vnf_id'
3404 is an ONAP generated UUID that identifies the VNF. The value
3405 is provided by ONAP to the VNF's Heat Orchestration
3406 Template at orchestration time.
3414 A VNF's Heat Orchestration Template's OS::Nova::Server
3415 Resource **MUST** contain the metadata map value parameter 'vnf_id'.
3422 A VNF's Heat Orchestration Template's OS::Nova::Server
3423 Resource metadata map value parameter 'vnf_id' **MUST** be declared
3431 A VNF's Heat Orchestration Template's OS::Nova::Server
3432 Resource metadata map value parameter 'vnf_id' **MUST NOT** have
3433 parameter contraints defined.
3440 A VNF's Heat Orchestration Template's OS::Nova::Server
3441 Resource metadata map value parameter 'vnf_id' **MUST NOT** be
3442 enumerated in the Heat Orchestration Template's environment file.
3449 If a VNF's Heat Orchestration Template's OS::Nova::Server
3450 Resource metadata map value parameter 'vnf_id' is passed into a
3451 Nested YAML file, the parameter name 'vnf_id' **MUST NOT** change.
3453 *Example 'vnf_id' Parameter Definition*
3455 .. code-block:: yaml
3461 description: Unique ID for this VNF instance
3466 The OS::Nova::Server Resource metadata map value parameter 'vf\_module\_id'
3467 is an ONAP generated UUID that identifies the VF Module (e.g., Heat
3468 Orchestration Template). The value
3469 is provided by ONAP to the VNF's Heat Orchestration
3470 Template at orchestration time.
3478 A VNF's Heat Orchestration Template's OS::Nova::Server
3479 Resource **MUST** contain the metadata map value parameter
3487 A VNF's Heat Orchestration Template's OS::Nova::Server
3488 Resource metadata map value parameter 'vf\_module\_id' **MUST**
3489 be declared as type: 'string'.
3496 A VNF's Heat Orchestration Template's OS::Nova::Server
3497 Resource metadata map value parameter 'vf\_module\_id' **MUST NOT**
3498 have parameter contraints defined.
3505 A VNF's Heat Orchestration Template's OS::Nova::Server
3506 Resource metadata map value parameter 'vf\_module\_id' **MUST NOT**
3507 be enumerated in the Heat Orchestration Template's environment file.
3514 If a VNF's Heat Orchestration Template's OS::Nova::Server
3515 Resource metadata map value parameter 'vf_module_id' is passed
3516 into a Nested YAML file, the parameter name 'vf\_module\_id'
3517 **MUST NOT** change.
3519 *Example 'vf\_module\_id' Parameter Definition*
3521 .. code-block:: yaml
3527 description: Unique ID for this VNF module instance
3533 The OS::Nova::Server Resource metadata map value parameter 'vnf_name'
3534 is the ONAP generated alphanumeric name of the deployed VNF instance.
3536 is provided by ONAP to the VNF's Heat Orchestration
3537 Template at orchestration time.
3538 The parameter must be declared as type: string
3546 A VNF's Heat Orchestration Template's OS::Nova::Server
3547 Resource **MUST** contain the metadata map value parameter
3555 A VNF's Heat Orchestration Template's OS::Nova::Server
3556 Resource metadata map value parameter 'vnf_name' **MUST** be
3557 declared as type: 'string'.
3564 A VNF's Heat Orchestration Template's OS::Nova::Server
3565 Resource metadata map value parameter 'vnf\_name' **MUST NOT** have
3566 parameter contraints defined.
3573 A VNF's Heat Orchestration Template's OS::Nova::Server
3574 Resource metadata map value parameter 'vnf\_name' **MUST NOT** be
3575 enumerated in the Heat Orchestration Template's environment file.
3582 If a VNF's Heat Orchestration Template's OS::Nova::Server
3583 Resource metadata map value parameter 'vnf_name' is passed into a
3584 Nested YAML file, the parameter name 'vnf_name' **MUST NOT** change.
3586 *Example 'vnf\_name' Parameter Definition*
3588 .. code-block:: yaml
3594 description: Unique name for this VNF instance
3599 The OS::Nova::Server Resource metadata map value parameter 'vf_module_name'
3600 is the deployment name of the heat stack created (e.g., <STACK_NAME>) from the
3601 VNF's Heat Orchestration template
3602 in the command 'Heat stack-create'
3603 (e.g., 'Heat stack-create [-f <FILE>] [-e <FILE>] <STACK_NAME>').
3604 The 'vf_module_name' (e.g., <STACK_NAME> is specified as
3605 part of the orchestration process.
3613 A VNF's Heat Orchestration Template's OS::Nova::Server
3614 Resource **SHOULD** contain the metadata map value parameter
3622 A VNF's Heat Orchestration Template's OS::Nova::Server
3623 Resource metadata map value parameter 'vf\_module\_name' **MUST**
3624 be declared as type: 'string'.
3631 A VNF's Heat Orchestration Template's OS::Nova::Server
3632 Resource metadata map value parameter 'vf\_module\_name'
3633 **MUST NOT** have parameter contraints defined.
3640 A VNF's Heat Orchestration Template's OS::Nova::Server
3641 Resource metadata map value parameter 'vf\_module\_name'
3642 **MUST NOT** be enumerated in the Heat Orchestration Template's
3650 If a VNF's Heat Orchestration Template's OS::Nova::Server
3651 Resource metadata map value parameter 'vf\_module\_name' is passed
3652 into a Nested YAML file, the parameter name 'vf\_module\_name'
3653 **MUST NOT** change.
3655 *Example 'vf_module_name' Parameter Definition*
3657 .. code-block:: yaml
3663 description: Unique name for this VNF Module instance
3668 The OS::Nova::Server Resource metadata map value parameter 'vm-role'
3669 is a metadata tag that describes the role of the Virtual Machine.
3670 The 'vm\_role' is stored in ONAP's A&AI module and is
3671 available for use by other ONAP components and/or north bound systems.
3679 A VNF's Heat Orchestration Template's OS::Nova::Server
3680 Resource **MAY** contain the metadata map value parameter 'vm_role'.
3687 A VNF's Heat Orchestration Template's OS::Nova::Server
3688 Resource metadata map value parameter 'vm_role' **MUST** be
3689 declared as type: 'string'.
3696 A VNF's Heat Orchestration Template's OS::Nova::Server
3697 Resource metadata map value parameter 'vm_role' **MUST NOT** have
3698 parameter contraints defined.
3706 A VNF's Heat Orchestration Template's OS::Nova::Server
3707 Resource metadata map value parameter 'vnf_name' **MUST** be
3710 - enumerated in the VNF's Heat Orchestration
3711 Template's environment file.
3713 - hard coded in the VNF's Heat Orchestration
3714 Template's OS::Nova::Resource metadata property.
3716 Defining the 'vm_role' as the '{vm-type}' is a recommended convention
3724 If a VNF's Heat Orchestration Template's OS::Nova::Server
3725 Resource metadata map value parameter 'vm_role' value **MUST** only
3726 contain alphanumeric characters and underscores '_'.
3733 If a VNF's Heat Orchestration Template's OS::Nova::Server
3734 Resource metadata map value parameter 'vm_role' is passed into a
3735 Nested YAML file, the parameter name 'vm_role' **MUST NOT** change.
3737 *Example 'vm\_role' Parameter Definition*
3739 .. code-block:: yaml
3745 description: Unique role for this VM
3747 *Example: 'vm-role' Definition: Hard Coded in
3748 OS::Nova::Resource metadata property*
3750 .. code-block:: yaml
3755 type: OS::Nova::Server
3761 *Example 'vm-role' Definition: Defined in Environment file
3762 and retrieved via 'get_param'*
3764 .. code-block:: yaml
3769 type: OS::Nova::Server
3773 vm_role: { get_param: vm_role }
3775 Example vnf_id, vf_module_id, vnf_name, vf_module_name, vm_role
3776 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3778 The example below depicts part of a Heat Orchestration Template
3779 that uses the five of the OS::Nova::Server metadata parameter
3780 discussed in this section. The {vm-type} has been defined as lb
3783 .. code-block:: yaml
3788 description: VM Name for lb VM 0
3791 description: Unique name for this VNF instance
3794 description: Unique ID for this VNF instance
3797 description: Unique name for this VNF Module instance
3800 description: Unique ID for this VNF Module instance
3803 description: Unique role for this VM
3806 type: OS::Nova::Server
3808 name: { get_param: lb_name_0 }
3811 vnf_name: { get_param: vnf_name }
3812 vnf_id: { get_param: vnf_id }
3813 vf_module_name: { get_param: vf_module_name }
3814 vf_module_id: { get_param: vf_module_id }
3826 A VNF's Heat Orchestration Template's OS::Nova::Server
3827 Resource **MAY** contain the metadata map value parameter
3828 'vf\_module\_index'.
3835 A VNF's Heat Orchestration Template's OS::Nova::Server
3836 Resource metadata map value parameter 'vf\_module\_index' **MUST** be
3837 declared as type: 'number'.
3844 A VNF's Heat Orchestration Template's OS::Nova::Server
3845 Resource metadata map value parameter 'vf\_module\_index' **MUST NOT**
3846 have parameter contraints defined.
3853 A VNF's Heat Orchestration Template's OS::Nova::Server
3854 Resource metadata map value parameter 'vf\_module\_index' **MUST NOT**
3855 be enumerated in the Heat Orchestration Template's environment file.
3862 If a VNF's Heat Orchestration Template's OS::Nova::Server
3863 Resource metadata map value parameter 'vf\_module\_index' is passed
3864 into a Nested YAML file, the parameter name 'vf\_module\_index'
3865 **MUST NOT** change.
3872 If a VNF's Heat Orchestration Template's OS::Nova::Server
3873 Resource metadata map value parameter 'vf\_module\_index' **MUST NOT** be
3874 used in a VNF's Volume Template; it is not supported.
3876 The vf\_module_index parameter indicates which instance of the module is being
3877 deployed into the VNF.
3878 This parameter may be used in cases where multiple instances of the same
3879 incremental module may be instantiated for scaling purposes. The index
3880 can be used in the Heat Orchestration Template for indexing into a
3881 pseudo-constant array parameter when unique values are required for each
3882 module instance, e.g., for fixed private IP addresses on VM types.
3884 The vf\_module\_index will start at 0 for the first instance of a module
3885 type. Subsequent instances of the same module type will receive the
3886 lowest unused index. This means that indexes will be reused if a module
3887 is deleted and re-added. As an example, if three copies of a module are
3888 deployed with vf\_module\_index values of 0, 1, and 2 then subsequently
3889 the second one is deleted (index 1), and then re-added, index 1 will be
3894 In this example, the {vm-type} has been defined as oam\_vm to represent
3895 an OAM VM. An incremental heat module is used to deploy the OAM VM. The
3896 OAM VM attaches to an internal control network which has a
3897 {network-role} of ctrl. A maximum of four OAM VMs can be deployed. The
3898 environment file contains the four IP addresses that each successive OAM
3899 VM will be assigned. The vf\_module\_index is used as the index to
3900 determine the IP assignment.
3904 .. code-block:: yaml
3907 oam_vm_int_ctrl_ips: 10.10.10.1,10.10.10.2,10.10.10.3,10.10.10.4
3911 .. code-block:: yaml
3916 description: Unique index for this VNF Module instance
3919 description: VM Name for lb VM 0
3922 description: Neutron UUID for the internal control network
3923 oam_vm_int_ctrl_ips:
3924 type: comma_delimited_list
3925 description: Fixed IP assignments for oam VMs on the internal control
3929 type: OS::Nova::Server
3931 name: { get_param: oam_vm_name_0 }
3933 port: { get_resource: oam_vm_0_int_ctrl_port_0 }
3938 vf_module_index: { get_param: vf_module_index }
3939 oam_vm_0_int_ctrl_port_0:
3940 type: OS::Neutron::Port
3942 network: { get_param: int_ctrl_net_id }
3943 fixed_ips: [ { "ip_address": {get_param: [ oam_vm_int_ctrl_ips, { get_param, vf_module_index}]}}]
3954 A VNF's Heat Orchestration Template's OS::Nova::Server
3955 Resource **SHOULD** contain the metadata map value parameter
3963 A VNF's Heat Orchestration Template's OS::Nova::Server
3964 Resource metadata map value parameter 'workload_context' **MUST** be
3965 declared as type: 'string'.
3972 A VNF's Heat Orchestration Template's OS::Nova::Server
3973 Resource metadata map value parameter 'workload_context' **MUST NOT**
3974 have parameter contraints defined.
3981 A VNF's Heat Orchestration Template's OS::Nova::Server
3982 Resource metadata map value parameter 'workload_context' **MUST NOT**
3983 be enumerated in the Heat Orchestration Template's environment file.
3990 If a VNF's Heat Orchestration Template's OS::Nova::Server
3991 Resource metadata map value parameter 'workload_context' is passed
3992 into a Nested YAML file, the parameter name 'workload_context'
3993 **MUST NOT** change.
3995 The 'workload\_context' parameter value will be chosen by the Service Model
3996 Distribution context client in VID and will be supplied to the
3997 Heat Orchestration Template by ONAP at orchestration time.
3999 *Example Parameter Definition*
4001 .. code-block:: yaml
4006 description: Workload Context for this VNF instance
4009 *Example OS::Nova::Server with metadata*
4011 .. code-block:: yaml
4016 {vm-type}_server_{index}:
4017 type: OS::Nova::Server
4024 vnf_name: { get_param: vnf_name }
4025 vnf_id: { get_param: vnf_id }
4026 vf_module_name: { get_param: vf_module_name }
4027 vf_module_id: { get_param: vf_module_id }
4028 workload_context: {get_param: workload_context}
4030 environment\_context
4031 ++++++++++++++++++++++
4039 A VNF's Heat Orchestration Template's OS::Nova::Server
4040 Resource **SHOULD** contain the metadata map value parameter
4041 'environment_context'.
4048 A VNF's Heat Orchestration Template's OS::Nova::Server
4049 Resource metadata map value parameter 'environment_context' **MUST**
4050 be declared as type: 'string'.
4057 A VNF's Heat Orchestration Template's OS::Nova::Server
4058 Resource metadata map value parameter 'environment_context' **MUST NOT**
4059 have parameter contraints defined.
4066 A VNF's Heat Orchestration Template's OS::Nova::Server
4067 Resource metadata map value parameter 'environment_context' **MUST NOT**
4068 be enumerated in the Heat Orchestration Template's environment file.
4075 If a VNF's Heat Orchestration Template's OS::Nova::Server
4076 Resource metadata map value parameter 'environment_context' is
4077 passed into a Nested YAML file, the parameter name
4078 'environment_context' **MUST NOT** change.
4080 The 'environment\_context' parameter value will be defined by the
4081 service designer as part of the service model during the SDC
4082 on-boarding process and will be supplied to the Heat Orchestration
4083 Template by ONAP at orchestration time.
4086 *Example Parameter Definition*
4088 .. code-block:: yaml
4091 environment_context:
4093 description: Environment Context for this VNF instance
4096 *Example OS::Nova::Server with metadata*
4098 .. code-block:: yaml
4103 {vm-type}_server_{index}:
4104 type: OS::Nova::Server
4111 vnf_name: { get_param: vnf_name }
4112 vnf_id: { get_param: vnf_id }
4113 vf_module_name: { get_param: vf_module_name }
4114 vf_module_id: { get_param: vf_module_id }
4115 workload_context: {get_param: workload_context}
4116 environment_context: {get_param: environment_context }
4119 Resource: OS::Neutron::Port - Parameters
4120 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4122 The resource OS::Neutron::Port is for managing Neutron ports (See
4123 https://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::Port.)
4128 Four properties of the resource OS::Neutron::Port that must follow the
4129 ONAP parameter naming convention. The four properties are:
4132 2. fixed_ips, ip_address
4133 3. fixed_ips, subnet_id or fixed_ips, subnet
4135 * Note that in many examples in this document fixed_ips, subnet_id is used.
4137 4. allowed_address_pairs, ip_address
4139 Below is a generic example. Note that for some parameters
4140 comma_delimited_list are supported in addition to String.
4142 .. code-block:: yaml
4149 type: OS::Neutron::Port
4151 allowed_address_pairs: [{"ip_address": String, "mac_address": String},
4152 {"ip_address": String, "mac_address": String}, ...]
4153 fixed_ips: [{"ip_address": String, "subnet_id": String, "subnet":
4154 String}, {"ip_address": String, "subnet_id": String, "subnet": String},
4158 The values associated with these properties may reference an external
4159 network or internal network. External networks and internal
4160 networks are defined in `Networking`_.
4162 When the OS::Neutron::Port is attaching to an external network, all
4163 property values are parameters that are retrieved via the intrinsic
4164 function 'get_param'.
4166 When the OS::Neutron::Port is attaching to an internal network, a
4167 property value maybe retrieved via the intrinsic
4168 function 'get_param', 'get_resource', or 'get_attr'.
4170 This will be described in the forth coming sections.
4180 :test: no test found
4181 :test_case: no test found
4182 :test_file: no test found
4184 A VNF **MAY** have one or more ports connected to a unique
4185 external network. All VNF ports connected to the unique external
4186 network **MUST** have Cloud Assigned IP Addresses
4187 or **MUST** have ONAP SDN-C assigned IP addresses.
4193 :test: no test found
4194 :test_case: no test found
4195 :test_file: no test found
4197 A VNF **MAY** have one or more ports connected to a unique
4198 internal network. All VNF ports connected to the unique internal
4199 network **MUST** have Cloud Assigned IP Addresses
4200 or **MUST** have statically assigned IP addresses.
4206 :test: no test found
4207 :test_case: no test found
4208 :test_file: no test found
4210 If the VNF's ports connected to a unique network (internal or external)
4211 and the port's IP addresses are Cloud Assigned IP Addresses,
4212 all the IPv4 Addresses **MUST** be from
4213 the same subnet and all the IPv6 Addresses **MUST** be from the
4220 :test: no test found
4221 :test_case: no test found
4222 :test_file: no test found
4224 If a VNF's Port is attached to a network (internal or external)
4225 and the port's IP addresses are Cloud Assigned by OpenStack's DHCP
4226 Service, the 'OS::Neutron::Port' Resource's
4228 * property 'fixed_ips' map property 'ip_address' **MUST NOT** be used
4229 * property 'fixed_ips' map property 'subnet'/'subnet_id' **MAY** be used
4235 :test: no test found
4236 :test_case: no test found
4237 :test_file: no test found
4239 If the VNF's ports connected to a unique external network
4240 and the port's IP addresses are ONAP SDN-C assigned IP Addresses,
4241 the IPv4 Addresses **MAY** be from different subnets and the IPv6
4242 Addresses **MAY** be from different subnets.
4248 :test: no test found
4249 :test_case: no test found
4250 :test_file: no test found
4252 If a VNF's Port is attached to an external network and the port's
4253 IP addresses are assigned by ONAP's SDN-Controller,
4254 the 'OS::Neutron::Port' Resource's
4256 * property 'fixed_ips' map property 'ip_address' **MUST** be used
4257 * property 'fixed_ips' map property 'subnet'/'subnet_id' **MUST NOT** be used
4263 :test: no test found
4264 :test_case: no test found
4265 :test_file: no test found
4267 If the VNF's ports connected to a unique internal network
4268 and the port's IP addresses are statically assigned IP Addresses,
4269 the IPv4 Addresses **MAY** be from different subnets and the
4270 IPv6 Addresses **MAY** be from different subnets.
4276 :test: no test found
4277 :test_case: no test found
4278 :test_file: no test found
4280 If a VNF's Port is attached to an internal network and the port's
4281 IP addresses are statically assigned by the VNF's Heat Orchestration\
4282 Template (i.e., enumerated in the Heat Orchestration Template's
4283 environment file), the 'OS::Neutron::Port' Resource's
4285 * property 'fixed_ips' map property 'ip_address' **MUST** be used
4286 * property 'fixed_ips' map property 'subnet'/'subnet_id'
4287 **MUST NOT** be used
4292 The Resource 'OS::Neutron::Port' property 'network' determines what network
4293 the port is attached to.
4301 The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4302 property 'network' parameter **MUST** be declared as type: 'string'.
4309 When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4310 is attaching to an external network, the 'network' parameter name **MUST**
4312 - follow the naming convention '{network-role}_net_id' if the Neutron
4313 network UUID value is used to reference the network
4314 - follow the naming convention '{network-role}_net_name' if the OpenStack
4315 network name is used to reference the network.
4317 where '{network-role}' is the network-role of the external network and
4318 a 'get_param' **MUST** be used as the intrinsic function.
4325 When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4326 is attaching to an internal network, and the internal network is created in a different
4327 Heat Orchestration Template than the 'OS::Neutron::Port', the 'network'
4328 parameter name **MUST**
4330 - follow the naming convention 'int\_{network-role}_net_id' if the Neutron
4331 network UUID value is used to reference the network
4332 - follow the naming convention 'int\_{network-role}_net_name' if the
4333 OpenStack network name in is used to reference the network.
4335 where '{network-role}' is the network-role of the internal network and a 'get_param' **MUST** be used as the intrinsic function.
4337 In Requirement R-86182, the internal network is created in the VNF's
4338 Base Module (Heat Orchestration Template) and the parameter name is
4339 declared in the Base Module's outputs' section.
4340 The output parameter name will be declared as a parameter in the
4341 'parameters' section of the incremental module.
4349 When the VNF's Heat Orchestration Template's
4350 Resource 'OS::Neutron::Port' is attaching to an internal
4351 network, and the internal network is created in the same Heat
4352 Orchestration Template than the 'OS::Neutron::Port', the 'network'
4353 parameter name **MUST** obtain the UUID of the internal network
4354 by using the intrinsic function 'get_resource' or 'get_attr'
4355 and referencing the Resource ID of the internal network.
4362 The VNF's Heat Orchestration Template's Resource 'OS::Nova::Server'
4363 property 'network' parameter **MUST NOT** be enumerated in the Heat
4364 Orchestration Template's Environment File.
4366 The parameter values for external networks are provided by ONAP
4367 to the VNF's Heat Orchestration Template at orchestration time.
4369 The parameter values for internal networks created in the VNF's Base Module
4370 Heat Orchestration Template
4371 are provided to the VNF's Incremental Module Heat Orchestration Template
4372 at orchestration time.
4374 *Example Parameter Definition of External Networks*
4376 .. code-block:: yaml
4380 {network-role}_net_id:
4382 description: Neutron UUID for the external {network-role} network
4384 {network-role}_net_name:
4386 description: Neutron name for the external {network-role} network
4389 *Example Parameter Definition of Internal Networks in an Incremental Module*
4391 .. code-block:: yaml
4395 int_{network-role}_net_id:
4397 description: Neutron UUID for the internal int_{network-role} network
4399 int_{network-role}_net_name:
4401 description: Neutron name for the internal int_{network-role} network
4403 Property: fixed_ips, Map Property: ip_address
4404 +++++++++++++++++++++++++++++++++++++++++++++
4406 The resource 'OS::Neutron::Port' property 'fixed_ips'
4407 map property 'ip_address'
4408 is used to assign one IPv4 or IPv6
4411 One 'OS::Neutron::Port' resource may assign one or more
4412 IPv4 and/or IPv6 addresses.
4420 The VNF's Heat Orchestration Template's resource 'OS::Neutron::Port'
4421 property 'fixed_ips' map property 'ip_address' parameter **MUST**
4422 be declared as either type 'string' or type 'comma_delimited_list'.
4429 When the VNF's Heat Orchestration Template's Resource
4430 'OS::Neutron::Port' is attaching to an external network, and an IPv4
4431 address is assigned using the property 'fixed_ips' map property
4432 'ip_address' and the parameter type is defined
4433 as a string, the parameter name **MUST** follow the naming
4435 - '{vm-type}_{network-role}\_ip\_{index}'
4439 - '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4440 - '{network-role}' is the {network-role} of the external network
4441 - the value for {index} must start at zero (0) and increment by one
4448 The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4449 property 'fixed_ips' map property 'ip_address' parameter
4450 '{vm-type}_{network-role}\_ip\_{index}' **MUST NOT** be enumerated in the
4451 VNF's Heat Orchestration Template's Environment File.
4453 ONAP's SDN-Controller assigns the IP Address and ONAP provides
4454 the value at orchestration to the Heat Orchestration Template.
4456 *Example External Network IPv4 Address string Parameter Definition*
4458 .. code-block:: yaml
4462 {vm-type}_{network-role}_ip_{index}:
4464 description: Fixed IPv4 assignment for {vm-type} VM {index} on the{network-role} network
4472 When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4473 is attaching to an external network, and an IPv4 address is assigned using
4474 the property 'fixed_ips' map property 'ip_address' and the parameter type
4475 is defined as a comma_delimited_list, the parameter name **MUST** follow the
4478 * '{vm-type}_{network-role}_ips',
4482 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4483 * '{network-role}' is the {network-role} of the external network
4490 The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port'
4491 property 'fixed_ips' map property 'ip_address' parameter
4492 '{vm-type}_{network-role}_ips' **MUST NOT** be enumerated in the VNF's
4493 Heat Orchestration Template's Environment File.
4495 ONAP's SDN-Controller assigns the IP Address and ONAP provides
4496 the value at orchestration to the Heat Orchestration Template.
4498 *Example External Network IPv4 Address comma_delimited_list
4499 Parameter Definition*
4501 .. code-block:: yaml
4505 {vm-type}_{network-role}_ips:
4506 type: comma_delimited_list
4507 description: Fixed IPv4 assignments for {vm-type} VMs on the {network-role} network
4515 When the VNF's Heat Orchestration Template's Resource
4516 'OS::Neutron::Port' is attaching to an external network, and an IPv6 address
4517 is assigned using the property 'fixed_ips' map property 'ip_address' and
4518 the parameter type is defined as a string, the parameter name **MUST** follow
4519 the naming convention
4521 * '{vm-type}_{network-role}\_v6\_ip\_{index}'
4525 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4526 * '{network-role}' is the {network-role} of the external network
4527 * the value for {index} must start at zero (0) and increment by one
4534 The VNF's Heat Orchestration Template's Resource
4535 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4536 parameter '{vm-type}_{network-role}\_v6\_ip\_{index}'
4537 **MUST NOT** be enumerated in the VNF's Heat Orchestration
4538 Template's Environment File.
4540 ONAP's SDN-Controller assigns the IP Address and ONAP provides
4541 the value at orchestration to the Heat Orchestration Template.
4543 *Example External Network IPv6 Address string Parameter Definition*
4545 .. code-block:: yaml
4549 {vm-type}_{network-role}_v6_ip_{index}:
4551 description: Fixed IPv6 assignment for {vm-type} VM {index} on the {network-role} network
4559 When the VNF's Heat Orchestration Template's Resource
4560 'OS::Neutron::Port' is attaching to an external network, and an IPv6
4561 address is assigned using the property 'fixed_ips' map property 'ip_address'
4562 and the parameter type is defined as a comma_delimited_list, the parameter
4563 name **MUST** follow the naming convention
4565 * '{vm-type}_{network-role}_v6_ips'
4569 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4570 * '{network-role}' is the {network-role} of the external network
4577 The VNF's Heat Orchestration Template's Resource
4578 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4579 parameter '{vm-type}_{network-role}_v6_ips' **MUST NOT** be enumerated in the
4580 VNF's Heat Orchestration Template's Environment File.
4582 ONAP's SDN-Controller assigns the IP Address and ONAP provides
4583 the value at orchestration to the Heat Orchestration Template.
4585 *Example External Network IPv6 Address comma_delimited_list Parameter
4588 .. code-block:: yaml
4592 {vm-type}_{network-role}_v6_ips:
4593 type: comma_delimited_list
4594 description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network
4602 When the VNF's Heat Orchestration Template's Resource
4603 'OS::Neutron::Port' is attaching to an internal network, and an IPv4 address
4604 is assigned using the property 'fixed_ips' map property 'ip_address' and
4605 the parameter type is defined as a string, the parameter name **MUST** follow
4606 the naming convention
4608 * '{vm-type}\_int\_{network-role}\_ip\_{index}'
4612 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4613 * '{network-role}' is the {network-role} of the internal network
4614 * the value for {index} must start at zero (0) and increment by one
4621 The VNF's Heat Orchestration Template's Resource
4622 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4623 parameter '{vm-type}\_int\_{network-role}\_ip\_{index}' **MUST** be enumerated
4624 in the VNF's Heat Orchestration Template's Environment File.
4626 The IP address is local to the VNF's internal network and is (re)used
4627 in every VNF spin up, thus the constant value is declared in the VNF's
4628 Heat Orchestration Template's Environment File.
4630 *Example Internal Network IPv4 Address string Parameter Definition*
4632 .. code-block:: yaml
4636 {vm-type}_int_{network-role}_ip_{index}:
4638 description: Fixed IPv4 assignment for {vm-type} VM {index} on the int_{network-role} network
4646 When the VNF's Heat Orchestration Template's Resource
4647 'OS::Neutron::Port' is attaching to an internal network, and an IPv4
4648 address is assigned using the property 'fixed_ips' map property 'ip_address'
4649 and the parameter type is defined as a comma_delimited_list, the parameter
4650 name **MUST** follow the naming convention
4652 * '{vm-type}\_int\_{network-role}_ips'
4656 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4657 * '{network-role}' is the {network-role} of the internal network
4664 The VNF's Heat Orchestration Template's Resource
4665 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4666 parameter '{vm-type}\_int\_{network-role}_int_ips' **MUST** be enumerated in
4667 the VNF's Heat Orchestration Template's Environment File.
4669 The IP address is local to the VNF's internal network and is (re)used
4670 in every VNF spin up, thus the constant value is declared in the VNF's
4671 Heat Orchestration Template's Environment File.
4673 .. code-block:: yaml
4677 {vm-type}_int_{network-role}_ips:
4678 type: comma_delimited_list
4679 description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network
4687 When the VNF's Heat Orchestration Template's Resource
4688 'OS::Neutron::Port' is attaching to an internal network, and an IPv6 address
4689 is assigned using the property 'fixed_ips' map property 'ip_address' and
4690 the parameter type is defined as a string, the parameter name **MUST** follow
4691 the naming convention
4693 * '{vm-type}\_int\_{network-role}\_v6\_ip\_{index}'
4697 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4698 * '{network-role}' is the {network-role} of the internal network
4699 * the value for {index} must start at zero (0) and increment by one
4706 The VNF's Heat Orchestration Template's Resource
4707 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4708 parameter '{vm-type}\_int\_{network-role}\_v6\_ip\_{index}'
4709 **MUST** be enumerated in the VNF's Heat Orchestration
4710 Template's Environment File.
4712 The IP address is local to the VNF's internal network and is (re)used
4713 in every VNF spin up, thus the constant value is declared in the VNF's
4714 Heat Orchestration Template's Environment File.
4716 *Example Internal Network IPv6 Address string Parameter Definition*
4718 .. code-block:: yaml
4722 {vm-type}_int_{network-role}_v6_ip_{index}:
4724 description: Fixed IPv6 assignment for {vm-type} VM {index} on the int_{network-role} network
4732 When the VNF's Heat Orchestration Template's Resource
4733 'OS::Neutron::Port' is attaching to an internal network, and an IPv6
4734 address is assigned using the property 'fixed_ips' map property 'ip_address'
4735 and the parameter type is defined as a comma_delimited_list, the parameter
4736 name **MUST** follow the naming convention
4738 * '{vm-type}\_int\_{network-role}_v6_ips'
4742 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
4743 * '{network-role}' is the {network-role} of the internal network
4745 *Example Internal Network IPv6 Address comma_delimited_list Parameter
4748 .. code-block:: yaml
4752 {vm-type}_int_{network-role}_v6_ips:
4753 type: comma_delimited_list
4754 description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network
4762 The VNF's Heat Orchestration Template's Resource
4763 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4764 parameter '{vm-type}\_int\_{network-role}_v6_ips' **MUST** be enumerated in
4765 the VNF's Heat Orchestration Template's Environment File.
4767 The IP address is local to the VNF's internal network and is (re)used
4768 in every VNF spin up, thus the constant value is declared in the VNF's
4769 Heat Orchestration Template's Environment File.
4777 The VNF's Heat Orchestration Template's Resource
4778 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4779 parameter associated with an external network, i.e.,
4781 - {vm-type}_{network-role}\_ip\_{index}
4782 - {vm-type}_{network-role}\_ip\_v6\_{index}
4783 - {vm-type}_{network-role}_ips
4784 - {vm-type}_{network-role}_v6_ips
4786 **MUST NOT** be enumerated in the Heat Orchestration Template's Environment File.
4787 ONAP provides the IP address assignments at orchestration time.
4794 The VNF's Heat Orchestration Template's Resource
4795 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address'
4796 parameter associated with an internal network, i.e.,
4798 - {vm-type}\_int\_{network-role}\_ip\_{index}
4799 - {vm-type}\_int\_{network-role}\_ip\_v6\_{index}
4800 - {vm-type}\_int\_{network-role}_ips
4801 - {vm-type}\_int\_{network-role}_v6_ips
4803 **MUST** be enumerated in the Heat Orchestration Template's Environment
4804 File and IP addresses **MUST** be assigned.
4809 .. csv-table:: **Table # OS::Neutron::Port Property fixed_ips map property ip_address Parameter Naming Convention**
4810 :header: Resource,Property,Map Property,Network Type,IP Address,Parameter Type,Parameter Name, Environment File
4814 OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, string, {vm-type}\_{network-role}\_ip\_{index}, NO
4815 OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, comma\_delimited\_list, {vm-type}\_{network-role}\_ips, NO
4816 OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, string, {vm-type}\_{network-role}\_v6\_ip\_{index}, NO
4817 OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, comma\_delimited\_list, {vm-type}\_{network-role}\_v6\_ips, NO
4818 OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, string, {vm-type}\_int\_{network-role}\_ip\_{index}, YES
4819 OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_ips, YES
4820 OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, string, {vm-type}\_int\_{network-role}\_v6\_ip\_{index}, YES
4821 OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_v6\_ips, YES
4827 *Example: comma_delimited_list parameters for IPv4 and IPv6 Address
4828 Assignments to an external network*
4830 In this example, the '{network-role}' has been defined as 'oam' to represent
4831 an oam network and the '{vm-type}' has been defined as 'db' for database.
4833 .. code-block:: yaml
4838 description: Neutron UUID for a oam network
4840 type: comma_delimited_list
4841 description: Fixed IPv4 assignments for db VMs on the oam network
4843 type: comma_delimited_list
4844 description: Fixed IPv6 assignments for db VMs on the oam network
4847 type: OS::Neutron::Port
4849 network: { get_param: oam_net_id }
4850 fixed_ips: [ { "ip_address": {get_param: [ db_oam_ips, 0 ]}}, {
4851 "ip_address": {get_param: [ db_oam_v6_ips, 0 ]}}]
4853 type: OS::Neutron::Port
4855 network: { get_param: oam_net_id }
4857 - "ip_address": {get_param: [ db_oam_ips, 1 ]}
4858 - "ip_address": {get_param: [ db_oam_v6_ips, 1 ]}
4860 *Example: string parameters for IPv4 and IPv6 Address Assignments to an
4863 In this example, the '{network-role}' has been defined as 'oam' to
4864 represent an oam network and the '{vm-type}' has been defined as 'db' for
4867 .. code-block:: yaml
4872 description: Neutron UUID for an OAM network
4875 description: Fixed IPv4 assignment for db VM 0 on the OAM network
4878 description: Fixed IPv4 assignment for db VM 1 on the OAM network
4881 description: Fixed IPv6 assignment for db VM 0 on the OAM network
4884 description: Fixed IPv6 assignment for db VM 1 on the OAM network
4887 type: OS::Neutron::Port
4889 network: { get_param: oam_net_id }
4890 fixed_ips: [ { "ip_address": {get_param: db_oam_ip_0}}, { "ip_address": {get_param: db_oam_v6_ip_0 }}]
4892 type: OS::Neutron::Port
4894 network: { get_param: oam_net_id }
4896 - "ip_address": {get_param: db_oam_ip_1}
4897 - "ip_address": {get_param: db_oam_v6_ip_1}
4900 *Example: comma_delimited_list parameters for IPv4 and IPv6 Address
4901 Assignments to an internal network*
4903 In this example, the '{network-role}' has been defined as 'ctrl' to
4904 represent an ctrl network internal to the vnf.
4905 The '{vm-type}' has been defined as 'db' for
4908 .. code-block:: yaml
4913 description: Neutron UUID for the ctrl internal network
4915 type: comma_delimited_list
4916 description: Fixed IPv4 assignments for db VMs on the ctrl internal
4919 type: comma_delimited_list
4920 description: Fixed IPv6 assignments for db VMs on the ctrl internal
4923 db_0_int_ctrl_port_0:
4924 type: OS::Neutron::Port
4926 network: { get_param: int_ctrl_net_id }
4927 fixed_ips: [ { "ip_address": {get_param: [ db_int_ctrl_ips, 0 ]}}, {
4928 "ip_address": {get_param: [ db_int_ctrl_v6_ips, 0 ]}}]
4929 db_1_int_ctrl_port_0:
4930 type: OS::Neutron::Port
4932 network: { get_param: int_ctrl_net_id }
4934 - "ip_address": {get_param: [ db_int_ctrl_ips, 1 ]}
4935 - "ip_address": {get_param: [ db_int_ctrl_v6_ips, 1 ]}
4938 *Example: string parameters for IPv4 and IPv6 Address Assignments to an
4941 In this example, the int\_{network-role} has been defined as
4942 int_ctrl to represent a control network internal to the vnf.
4943 The {vm-type} has been defined as db for database.
4945 .. code-block:: yaml
4950 description: Neutron UUID for an OAM internal network
4953 description: Fixed IPv4 assignment for db VM on the oam_int network
4956 description: Fixed IPv4 assignment for db VM 1 on the oam_int network
4957 db_int_ctrl_v6_ip_0:
4959 description: Fixed IPv6 assignment for db VM 0 on the oam_int network
4960 db_int_ctrl_v6_ip_1:
4962 description: Fixed IPv6 assignment for db VM 1 on the oam_int network
4964 db_0_int_ctrl_port_0:
4965 type: OS::Neutron::Port
4967 network: { get_param: int_oam_int_net_id }
4968 fixed_ips: [ { "ip_address": {get_param: db_oam_int_ip_0}}, {
4969 "ip_address": {get_param: db_oam_int_v6_ip_0 }}]
4970 db_1_int_ctrl_port_0:
4971 type: OS::Neutron::Port
4973 network: { get_param: int_oam_int_net_id }
4975 - "ip_address": {get_param: db_oam_int_ip_1}
4976 - "ip_address": {get_param: db_oam_int_v6_ip_1}
4979 Property: fixed\_ips, Map Property: subnet\_id
4980 ++++++++++++++++++++++++++++++++++++++++++++++
4982 The resource 'OS::Neutron::Port' property 'fixed_ips' map
4983 property 'subnet'/'subnet_id' is used when a
4984 port is requesting an IP assignment via
4985 OpenStack's DHCP Service (i.e., Cloud Assigned).
4987 The IP address assignment will be made from the specified subnet.
4989 Specifying the subnet is not required; it is optional.
4991 If the network (external or internal) that the port is attaching
4992 to only contains one subnet, specifying the subnet is
4993 superfluous. The IP address will be assigned from the one existing
4996 If the network (external or internal) that the port is attaching
4997 to contains two or more subnets, specifying the subnet in the
4998 'fixed_ips' map property 'subnet'/'subnet_id' determines which
4999 subnet the IP address will be assigned from.
5001 If the network (external or internal) that the port is attaching
5002 to contains two or more subnets, and the subnet is not is not
5003 specified, OpenStack will randomly(?) determine which subnet
5004 the IP address will be assigned from.
5006 The property fixed_ips is used to assign IPs to a port. The Map Property
5007 subnet_id specifies the subnet the IP is assigned from.
5015 The VNF's Heat Orchestration Template's resource
5016 'OS::Neutron::Port' property 'fixed_ips' map property
5017 'subnet'/'subnet_id' parameter **MUST** be declared type 'string'.
5024 When the VNF's Heat Orchestration Template's resource
5025 'OS::Neutron::Port' is attaching to an external network, and an IPv4
5026 address is being Cloud Assigned by OpenStack's DHCP Service and the
5027 external network IPv4 subnet is to be specified using the property
5028 'fixed_ips' map property 'subnet'/'subnet_id', the parameter **MUST**
5029 follow the naming convention
5031 * '{network-role}_subnet_id'
5035 * '{network-role}' is the network role of the network.
5042 The VNF's Heat Orchestration Template's Resource
5043 'OS::Neutron::Port' property 'fixed_ips' map property
5044 subnet'/'subnet_id' parameter '{network-role}_subnet_id'
5045 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
5048 ONAP's SDN-Controller provides the network's subnet's UUID
5049 value at orchestration to the Heat Orchestration Template.
5051 *Example Parameter Definition*
5053 .. code-block:: yaml
5057 {network-role}_subnet_id:
5059 description: Neutron IPv4 subnet UUID for the {network-role} network
5067 When the VNF's Heat Orchestration Template's resource
5068 'OS::Neutron::Port' is attaching to an external network, and an IPv6
5069 address is being Cloud Assigned by OpenStack's DHCP Service and the
5070 external network IPv6 subnet is to be specified using the property
5071 'fixed_ips' map property 'subnet'/'subnet_id', the parameter **MUST**
5072 follow the naming convention
5074 * '{network-role}_subnet_v6_id'
5078 * '{network-role}' is the network role of the network.
5085 The VNF's Heat Orchestration Template's Resource
5086 'OS::Neutron::Port' property 'fixed_ips' map property
5087 subnet'/'subnet_id' parameter '{network-role}_subnet_v6_id'
5088 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
5091 ONAP's SDN-Controller provides the network's subnet's UUID
5092 value at orchestration to the Heat Orchestration Template.
5094 *Example Parameter Definition*
5096 .. code-block:: yaml
5100 {network-role}_v6_subnet_id:
5102 description: Neutron IPv6 subnet UUID for the {network-role} network
5105 *Example: One Cloud Assigned IPv4 Address (DHCP) assigned to a network
5106 that has two or more IPv4 subnets*
5108 In this example, the '{network-role}' has been defined as 'oam' to represent
5109 an oam network and the '{vm-type}' has been defined as 'lb' for load
5110 balancer. The Cloud Assigned IP Address uses the OpenStack DHCP service
5111 to assign IP addresses.
5113 .. code-block:: yaml
5118 description: Neutron UUID for the oam network
5121 description: Neutron IPv4 subnet UUID for the oam network
5124 type: OS::Neutron::Port
5126 network: { get_param: oam_net_id }
5128 - subnet_id: { get_param: oam_subnet_id }
5130 *Example: One Cloud Assigned IPv4 address and one Cloud Assigned IPv6
5131 address assigned to a network that has at least one IPv4 subnet and one
5134 In this example, the '{network-role}' has been defined as 'oam' to represent
5135 an oam network and the '{vm-type}' has been defined as 'lb' for load
5138 .. code-block:: yaml
5143 description: Neutron UUID for the oam network
5146 description: Neutron IPv4 subnet UUID for the oam network
5149 description: Neutron IPv6 subnet UUID for the oam network
5152 type: OS::Neutron::Port
5154 network: { get_param: oam_net_id }
5156 - subnet_id: { get_param: oam_subnet_id }
5157 - subnet_id: { get_param: oam_v6_subnet_id }
5167 - the VNF's Heat Orchestration Template's resource 'OS::Neutron::Port'
5168 in an Incremental Module is attaching to an internal network
5169 that is created in the Base Module, AND
5170 - an IPv4 address is being Cloud Assigned by OpenStack's DHCP Service AND
5171 - the internal network IPv4 subnet is to be specified using the
5172 property 'fixed_ips' map property 'subnet'/'subnet_id',
5174 the parameter **MUST** follow the naming convention
5175 * 'int\_{network-role}_subnet_id'
5177 * '{network-role}' is the network role of the internal network
5179 - Note that the parameter **MUST** be defined as an 'output' parameter in
5187 The VNF's Heat Orchestration Template's Resource
5188 'OS::Neutron::Port' property 'fixed_ips' map property
5189 subnet'/'subnet_id' parameter 'int\_{network-role}_subnet_id'
5190 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
5193 The assumption is that internal networks are created in the base module.
5194 The Neutron subnet network ID will be passed as an output parameter
5195 (e.g., ONAP Base Module Output Parameter) to the incremental modules.
5196 In the incremental modules, the output parameter name will be defined as
5199 *Example Parameter Definition*
5201 .. code-block:: yaml
5205 int_{network-role}_subnet_id:
5207 description: Neutron IPv4 subnet UUID for the int_{network-role} network
5217 - the VNF's Heat Orchestration Template's resource
5218 'OS::Neutron::Port' in an Incremental Module is attaching to an
5219 internal network that is created in the Base Module, AND
5220 - an IPv6 address is being Cloud Assigned by OpenStack's DHCP Service AND
5221 - the internal network IPv6 subnet is to be specified using the property
5222 'fixed_ips' map property 'subnet'/'subnet_id',
5224 the parameter **MUST** follow the naming convention
5225 * 'int\_{network-role}_v6_subnet_id'
5227 * '{network-role}' is the network role of the internal network
5229 - Note that the parameter **MUST** be defined as an 'output' parameter in
5237 The VNF's Heat Orchestration Template's Resource
5238 'OS::Neutron::Port' property 'fixed_ips' map property
5239 'subnet'/'subnet_id' parameter 'int\_{network-role}_v6_subnet_id'
5240 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
5243 *Example Parameter Definition*
5245 .. code-block:: yaml
5249 int_{network-role}_v6_subnet_id:
5251 description: Neutron subnet UUID for the int_{network-role} network
5254 Property: allowed\_address\_pairs, Map Property: ip\_address
5255 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5257 The property 'allowed_address_pairs' in the resource 'OS::Neutron::Port'
5258 allows the user to specify a mac_address and/or ip_address that will
5259 pass through a port regardless of subnet. This enables the use of
5260 protocols, such as VRRP, which allow for a Virtual IP (VIP) address
5261 to be shared among two or more ports, with one designated as the master
5262 and the others as backups. In case the master fails,
5263 the Virtual IP address is mapped to a backup's IP address and
5264 the backup becomes the master.
5266 Note that the management of the VIP IP addresses (i.e. transferring
5267 ownership between active and standby VMs) is the responsibility of
5268 the VNF application.
5276 If a VNF has two or more ports that require a Virtual IP Address (VIP),
5277 a VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' property
5278 'allowed_address_pairs' map property 'ip_address' parameter **MUST** be used.
5280 The 'allowed_address_pairs' is an optional property. It is not required.
5282 ONAP automation supports the assignment of VIP addresses
5283 for external networks. ONAP support the assignment of one IPv4 VIP address
5284 and/or one IPv6 VIP address to a set of ports associated with a
5285 '{vm-type}' and '{network-role}'.
5287 If a VNF requires more than one IPv4 VIP address
5288 and/or more than one IPv6 VIP address to a set of ports associated with a
5289 '{vm-type}' and '{network-role}', there are "manual" work-around
5290 procedures that can be utilized.
5292 VIP Assignment, External Networks, Supported by Automation
5293 __________________________________________________________
5301 :test: no test found
5302 :test_case: no test found
5303 :test_file: no test found
5305 If a VNF requires ONAP to assign a Virtual IP (VIP) Address to
5306 ports connected an external network, the port
5307 **MUST NOT** have more than one IPv4 VIP address.
5313 :test: no test found
5314 :test_case: no test found
5315 :test_file: no test found
5317 If a VNF requires ONAP to assign a Virtual IP (VIP) Address to
5318 ports connected an external network, the port
5319 **MUST NOT** have more than one IPv6 VIP address.
5325 :test: no test found
5326 :test_case: no test found
5327 :test_file: no test found
5329 If a VNF has two or more ports that
5330 attach to an external network that require a Virtual IP Address (VIP),
5331 and the VNF requires ONAP automation to assign the IP address,
5332 all the Virtual Machines using the VIP address **MUST**
5333 be instantiated in the same Base Module Heat Orchestration Template
5334 or in the same Incremental Module Heat Orchestration Template.
5340 :test: no test found
5341 :test_case: no test found
5342 :test_file: no test found
5344 The VNF's Heat Orchestration Template's Resource
5345 'OS::Neutron::Port' property 'allowed_address_pairs'
5346 map property 'ip_address' parameter
5347 **MUST** be declared as type 'string'.
5353 :test: no test found
5354 :test_case: no test found
5355 :test_file: no test found
5357 When the VNF's Heat Orchestration Template's Resource
5358 'OS::Neutron::Port' is attaching to an external network,
5359 and an IPv4 Virtual IP (VIP) address is assigned via ONAP automation
5360 using the property 'allowed_address_pairs' map property 'ip_address' and
5361 the parameter name **MUST** follow the naming convention
5363 * '{vm-type}_{network-role}_floating_ip'
5367 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
5368 * '{network-role}' is the {network-role} of the external network
5370 And the parameter **MUST** be declared as type 'string'.
5376 :test: no test found
5377 :test_case: no test found
5378 :test_file: no test found
5380 The VNF's Heat Orchestration Template's Resource
5381 'OS::Neutron::Port' property 'allowed_address_pairs'
5382 map property 'ip_address' parameter
5383 '{vm-type}_{network-role}_floating_ip'
5384 **MUST NOT** be enumerated in the
5385 VNF's Heat Orchestration Template's Environment File.
5387 *Example Parameter Definition*
5389 .. code-block:: yaml
5393 {vm-type}_{network-role}_floating_ip:
5395 description: IPv4 VIP for {vm-type} VMs on the {network-role} network
5404 :test: no test found
5405 :test_case: no test found
5406 :test_file: no test found
5408 When the VNF's Heat Orchestration Template's Resource
5409 'OS::Neutron::Port' is attaching to an external network,
5410 and an IPv6 Virtual IP (VIP) address is assigned via ONAP automation
5411 using the property 'allowed_address_pairs' map property 'ip_address',
5412 the parameter name **MUST** follow the naming convention
5414 * '{vm-type}_{network-role}_v6_floating_ip'
5418 * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server
5419 * '{network-role}' is the {network-role} of the external network
5421 And the parameter **MUST** be declared as type 'string'.
5427 :test: no test found
5428 :test_case: no test found
5429 :test_file: no test found
5431 The VNF's Heat Orchestration Template's Resource
5432 'OS::Neutron::Port' property 'allowed_address_pairs'
5433 map property 'ip_address' parameter
5434 '{vm-type}_{network-role}_floating_v6_ip'
5435 **MUST NOT** be enumerated in the
5436 VNF's Heat Orchestration Template's Environment File.
5438 *Example Parameter Definition*
5440 .. code-block:: yaml
5444 {vm-type}_{network-role}_floating_v6_ip:
5446 description: VIP for {vm-type} VMs on the {network-role} network
5448 Note that these parameters are **not** intended to represent an OpenStack
5449 "Floating IP", for which OpenStack manages a pool of public IP
5450 addresses that are mapped to specific VM ports. In that case, the
5451 individual VMs are not even aware of the public IPs, and all assignment
5452 of public IPs to VMs is via OpenStack commands. ONAP does not support
5453 Neutron-style Floating IPs. That is, ONAP does not support the
5454 resources 'OS::Neutron::FloatingIP'
5455 and 'OS::Neutron::FloatingIPAssociation'.
5462 :test: no test found
5463 :test_case: no test found
5464 :test_file: no test found
5466 A VNF's Heat Orchestration Template's **MUST NOT**
5467 contain the Resource 'OS::Neutron::FloatingIP'.
5473 :test: no test found
5474 :test_case: no test found
5475 :test_file: no test found
5477 A VNF's Heat Orchestration Template's **MUST NOT**
5478 contain the Resource 'OS::Neutron::FloatingIPAssociation'.
5480 The Floating IP functions as a NAT. They are allocated within
5481 Openstack, and always "terminate" within the Openstack infrastructure.
5482 When Openstack receives packets on a Floating IP, the packets will
5484 Port that has been mapped to the Floating IP, using the private address of the
5485 port. The VM never sees or knows about the Openstack Floating IP.
5486 The process to use is:
5488 - User allocates a floating IP from the Openstack pool.
5489 - User 'attaches' that floating IP to one of the VM ports.
5491 If there is a high-availability VNF that wants to "float" the IP to a
5492 different VM, it requires a Neutron command to request Openstack to 'attach'
5493 the floating IP to a different VM port.
5494 The pool of such addresses is managed by Openstack infrastructure.
5495 Users cannot create new ones, they can only choose from those in the pool.
5496 The pool is typically global (i.e. any user/tenant can grab them).
5498 Allowed address pairs are for more typical Linux-level "virtual IPs".
5499 They are additional IP addresses that are advertised by some port on the VM,
5500 in addition to the primary private IP address. Typically in a
5501 high-availability VNF, an additional IP is assigned and will float between
5502 VMs (e.g., via some health-check app that will plumb the IP on one or other
5503 VM). In order for this to work, the actual packets must be addressed to that
5504 IP address (and the allowed_ip_address list will let it pass through
5505 to the VM). This generally requires provider network access
5506 (i.e. direct access to a data center network for the VMs), such that these
5507 IPs can pass through all of the virtual routers.
5508 Contrail also provides the enhanced networking that allows routing of such
5511 Floating IPs are not used in ONAP due to the NAT-ting nature of the IPs,
5512 the inability to reserve such IPs for specific use, the need to manage them
5513 via Openstack commands (i.e. a HA VNF would require direct access to
5514 Openstack to 'float' such an IP from one VM to another).
5518 In this example, the {network-role} has been defined as oam to represent
5519 an oam network and the {vm-type} has been defined as db for database.
5521 .. code-block:: yaml
5526 description: Neutron UUID for the oam network
5528 type: comma_delimited_list
5529 description: Fixed IPs for db VMs on the oam network
5532 description: VIP IP for db VMs on the oam network
5535 type: OS::Neutron::Port
5537 network: { get_param: oam_net_id }
5538 fixed_ips: [ { "ip_address": {get_param: [db_oam_ips,0] }}]
5539 allowed_address_pairs: [ { "ip_address": {get_param:
5540 db_oam_floating_ip}}]
5542 type: OS::Neutron::Port
5544 network: { get_param: oam_net_id }
5545 fixed_ips: [ { "ip_address": {get_param: [db_oam_ips,1] }}]
5546 allowed_address_pairs: [ { "ip_address": {get_param:
5547 db_oam_floating_ip}}]
5550 VIP Assignment, External Networks, Additional Options
5551 _____________________________________________________
5553 The parameter {'vm-type}_{network-role}_floating_ip' allows for only one
5554 allowed address pair IPv4 address per '{vm-type}' and '{network-role}'
5557 The parameter '{vm-type}_{network-role}_floating_v6_ip' allows for only one
5558 allowed address pair IPv6 address per '{vm-type}' and '{network-role}'
5561 If there is a need for multiple allowed address pair IPs for a given
5562 {vm-type} and {network-role} combination within a VNF, there are two
5567 If there is a need for multiple allowed address pair IPs for a given
5568 '{vm-type}' and '{network-role}' combination within a VNF, then the
5569 parameter names defined for the Property 'fixed_ips' Map Property
5570 'ip_address' should be used or the Property 'allowed_address_pairs'
5571 Map Property 'ip_address'. The
5572 parameter names are provided in the table below.
5574 .. csv-table:: **Table 5 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention**
5575 :header: IP Address,Parameter Type,Parameter Name
5579 IPv4, string, {vm-type}_{network-role}_ip_{index}
5580 IPv4, comma_delimited_list, {vm-type}_{network-role}_ips
5581 IPv6, string, {vm-type}_{network-role}_v6_ip_{index}
5582 IPv6, comma_delimited_list, {vm-type}_{network-role}_v6_ips
5584 The examples below illustrate this concept.
5586 *Example: A VNF has four load balancers. Each pair has a unique VIP.*
5588 In this example, there are two administrative VM pairs. Each pair has
5589 one VIP. The {network-role} has been defined as oam to represent an oam
5590 network and the {vm-type} has been defined as admin for an
5593 Pair 1: Resources admin_0_port_0 and admin_1_port_0 share a unique VIP,
5596 Pair 2: Resources admin_2_port_0 and admin_3_port_0 share a unique VIP,
5599 .. code-block:: yaml
5604 description: Neutron UUID for the oam network
5606 type: comma_delimited_list
5607 description: Fixed IP assignments for admin VMs on the oam network
5611 type: OS::Neutron::Port
5613 network: { get_param: oam_net_id }
5614 fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,0] }}]
5615 allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,2]
5618 type: OS::Neutron::Port
5620 network: { get_param: oam_net_id }
5621 fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,1] }}]
5622 allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,2]
5625 type: OS::Neutron::Port
5627 network: { get_param: oam_net_id }
5628 fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,3] }}]
5629 allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,5]
5632 type: OS::Neutron::Port
5634 network: { get_param: oam_net_id }
5635 fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,4] }}]
5636 allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,5]
5639 *Example: A VNF has two load balancers. The pair of load balancers share
5642 In this example, there is one load balancer pairs. The pair has two
5643 VIPs. The {network-role} has been defined as oam to represent an oam
5644 network and the {vm-type} has been defined as lb for a load balancer VM.
5646 .. code-block:: yaml
5650 type: OS::Neutron::Port
5652 network: { get_param: oam_net_id }
5653 fixed_ips: [ { "ip_address": {get_param: [lb_oam_ips,0] }}]
5654 allowed_address_pairs: [{ "ip_address": {get_param: [lb_oam_ips,2] },
5655 {get_param: [lb_oam_ips,3] }}]
5657 type: OS::Neutron::Port
5659 network: { get_param: oam_net_id }
5660 fixed_ips: [ { "ip_address": {get_param: [lb_oam_ips,1] }}]
5661 allowed_address_pairs: [{ "ip_address": {get_param: [lb_oam_ips,2] },
5662 {get_param: [lb_oam_ips,3] }}]
5664 As a general rule, provide the fixed IPs for the VMs indexed first in
5665 the CDL and then the VIPs as shown in the examples above.
5669 If there is a need for multiple allowed address pair IPs for a given
5670 '{vm-type}' and '{network-role}' combination within a VNF, then the
5671 parameter names defined for the table below can be used.
5673 **Resource OS::Neutron::Port**
5675 Table 6: Multiple allowed_address_pairs Option 2A
5677 .. csv-table:: **Table 6 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention**
5678 :header: IP Address,Parameter Type,Parameter Name
5682 IPv4, string, {vm-type}_{network-role}_vip_{index}
5683 IPv4, comma_delimited_list, {vm-type}_{network-role}_vips
5684 IPv6, string, {vm-type}_{network-role}_v6_vip_{index}
5685 IPv6, comma_delimited_list, {vm-type}_{network-role}_v6_vips
5688 If there is a need for multiple allowed address pair IPs for a given
5689 '{vm-type}' and '{network-role}' combination within a VNF and the need to
5690 differentiate the VIPs for different traffic types (e.g., 911 VIP,
5691 fail-over VIP), then the parameter names defined for the table below can
5694 **Resource OS::Neutron::Port**
5696 Table 7: Multiple allowed_address_pairs Option 2B
5698 .. csv-table:: **Table 7 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention**
5699 :header: IP Address,Parameter Type,Parameter Name
5703 IPv4, string, {vm-type}_{network-role}_{vip_type}_vip
5704 IPv4, comma_delimited_list, {vm-type}_{network-role}_{vip_type}_vips
5705 IPv6, string, {vm-type}_{network-role}_{vip_type}_v6_vip
5706 IPv6, comma_delimited_list, {vm-type}_{network-role}_{vip_type}_v6_vips
5711 ONAP defines an internal network in relation to
5712 the VNF and not with regard to the Network Cloud site. Internal
5713 networks may also be referred to as "intra-VNF" networks or "private"
5714 networks. An internal network only connects VMs in a single VNF. It
5715 must not connect to other VNFs or an external (to the cloud) gateway or an
5716 external (to the cloud) router.
5718 ONAP internal networks should be created in the base module.
5720 As previously mentioned,
5721 ports that connect to an internal network are assigned IP addresses
5722 via one of two methods
5724 * Method 1: Cloud assigned by OpenStack's DHCP Service
5725 * Method 2: Statically assigned. That is, predetermined by the VNF designer
5726 and are specified in the VNF's Heat Orchestration Template's
5729 If Cloud assigned IP addressing is being used, output statements
5730 are created in the base module.
5732 If static assigned IP addressing is being used, the IP addresses
5733 are defined in the environment file.
5736 * {vm-type}_int_{network-role}_floating_ip
5737 * {vm-type}_int_{network-role}_floating_v6_ip
5739 * {vm-type}_int_{network-role}_vip_{index}
5740 * {vm-type}_int_{network-role}_vips
5741 * {vm-type}_int_{network-role}_v6_vip_{index}
5742 * {vm-type}_int_{network-role}_v6_vips
5745 * {vm-type}_int_{network-role}_{vip_type}_vip
5746 * {vm-type}_int_{network-role}_{vip_type}_vips
5747 * {vm-type}_int_{network-role}_{vip_type}_v6_vip
5748 * {vm-type}_int_{network-role}_{vip_type}_v6_vips
5752 *Example Parameter Definition*
5754 .. code-block:: yaml
5757 {vm-type}_int_{network-role}_floating_ip:
5759 description: VIP for {vm-type} VMs on the int_{network-role} network
5761 {vm-type}_int_{network-role}_floating_v6_ip:
5763 description: VIP for {vm-type} VMs on the int_{network-role} network
5768 allowed_address_pair IP Addresses Required in more than one module
5769 __________________________________________________________________
5771 If the IP address {vm-type}_{network-role}_floating_ip and/or
5772 {vm-type}_{network-role}_floating_v6_ip must be used in more than module in the
5773 VNF, the parameter values must be defined as output values in the base
5774 module with output names: {vm-type}_{network-role}_shared_vip or
5775 {vm-type}_{network-role}_v6_shared_vip
5777 .. code-block:: yaml
5780 {vm-type}_{network-role}_shared_vip:
5782 value: { get_param: {vm-type}_{network-role}_floating_ip }
5784 {vm-type}_{network-role}_v6_shared_vip:
5786 value: { get_param: {vm-type}_{network-role}_v6_floating_ip }
5788 The output parameters must be defined as input parameter in the
5789 incremental modules that require the IP addresses. When defining the
5790 allowed_address_pairs: in the OS::Neutron::Port, it should be as
5793 .. code-block:: yaml
5795 allowed_address_pairs: [ { "ip_address": {get_param:
5796 {vm-type}_{network-role}_shared_vip }}, { "ip_address": {get_param:
5797 {vm-type}_{network-role}_v6_shared_vip }}]
5799 Reserve Port Concept
5800 ____________________
5802 A "Reserve Port" is an OS::Neutron::Port that fixed_ips, ip_address
5803 property is assigned one or more IP addresses that are used as Virtual
5804 IP (VIP) Addresses (i.e., allowed_address_pairs) on other ports.
5806 A "Reserve Port" is never attached to a Virtual Machine
5807 (OS::Nova::Server). The reserve port ensures that the intended
5808 allowed_address_pair IP address is not inadvertently assigned as a
5809 fixed_ips to a OS::Neutron::Port that is attached OS::Nova::Server and
5810 thus causing routing issues.
5812 A VNF may have one or more "Reserve Ports". A reserve port maybe created
5813 in the base module or an incremental module. If created in the base
5814 module, parameters may be defined in the outputs: section of the base
5815 template so the IP Address assigned to the reserve port maybe assigned
5816 to the allowed_address_pair property of an OS::Neutron::Port in one or
5817 more incremental modules.
5819 The parameter name of the IP address used in the "Reserve Port" depends
5820 on the allowed_address_pair "option" utilized by the VNF.
5822 When creating a Reserve Port, if only one allowed_address_pair is configured
5823 on a port, then the parameter name depends upon the IP addresses type
5824 (IPv4 or IPv6) and network type (internal or external).
5825 The valid parameter names are:
5827 * {vm-type}_{network-role}_floating_ip
5828 * {vm-type}_{network-role}_floating_v6_ip
5829 * {vm-type}_int_{network-role}_floating_ip
5830 * {vm-type}_int_{network-role}_floating_v6_ip
5832 When creating a Reserve Port, if more than one (e.g., multiple)
5833 allowed_address_pair is configured on a port, then the parameter name depends
5834 upon the IP addresses type (IPv4 or IPv6) and network type
5835 (internal or external) and the option being used. The valid parameter
5838 * {vm-type}_{network-role}_ip_{index}
5839 * {vm-type}_{network-role}_ips
5840 * {vm-type}_{network-role}_v6_ip_{index}
5841 * {vm-type}_{network-role}_v6_ips
5842 * {vm-type}_{network-role}_vip_{index}
5843 * {vm-type}_{network-role}_vips
5844 * {vm-type}_{network-role}_v6_vip_{index}
5845 * {vm-type}_{network-role}_v6_vips
5846 * {vm-type}_{network-role}_{vip-type}_vip
5847 * {vm-type}_{network-role}_v6_{vip-type}_vip
5848 * {vm-type}_{network-role}_{vip-type}_vips
5849 * {vm-type}_{network-role}_v6_{vip-type}_vips
5851 *Example IPv4 Reserve Port Definition: one allowed_address_pair
5852 configured on a port*
5854 .. code-block:: yaml
5856 Reserve_Port_{vm-type}_{network-role}_floating_ip_{index}:
5857 type: OS::Neutron::Port
5859 network: { get_param: {network-role}_net_id }
5861 - ip_address : { get_param: {vm-type}_{network-role}_floating_ip }
5863 *Example IPv6 Reserve Port Definition: one allowed_address_pair
5864 configured on a port*
5866 .. code-block:: yaml
5868 Reserve_Port_{vm-type}_{network-role}_floating_v6_ip_{index}:
5869 type: OS::Neutron::Port
5871 network: { get_param: {network-role}_net_id }
5873 - ip_address : { get_param: {vm-type}_{network-role}_floating_v6_ip }
5876 Resource Property "name"
5877 ~~~~~~~~~~~~~~~~~~~~~~~~
5879 The parameter naming convention of the property name for the resource
5880 OS::Nova::Server has been defined in
5881 `Resource: OS::Nova::Server – Metadata Parameters`_.
5883 This section provides the requirements how the property name for non
5884 OS::Nova::Server resources must be defined when the property is used.
5885 Not all resources require the property name (e.g., it is optional) and
5886 some resources do not support the property.
5894 If a VNF's Heat Orchestration Template contains the property 'name'
5895 for a non 'OS::Nova::Server' resource, the intrinsic function
5896 'str_replace' **MUST** be used in conjunction with the ONAP
5897 supplied metadata parameter 'vnf_name' to generate a unique value.
5899 This prevents the enumeration of a
5900 unique value for the property name in a per instance environment file.
5907 :test: no test found
5908 :test_case: no test found
5909 :test_file: no test found
5911 A value for VNF's Heat Orchestration Template's property 'name'
5912 for a non 'OS::Nova::Server' resource **MUST NOT** be declared
5913 in the VNF's Heat Orchestration Template's Environment File.
5915 In most cases the use of the metadata value 'vnf_name' is required to create a
5916 unique property name. If this will not provide a unique value,
5917 additional options include:
5919 - Using the Heat Orchestration Template pseudo parameter
5920 'OS::stack_name' in the str_replace construct
5921 - Resources created in a nested heat file invoked by an
5922 'OS::Heat::ResourceGroup' can use the 'index' to construct a unique name
5929 :test: no test found
5930 :test_case: no test found
5931 :test_file: no test found
5933 If a VNF's Heat Orchestration Template property 'name'
5934 for a non 'OS::Nova::Server' resource uses the intrinsic function
5935 'str_replace' in conjunction with the ONAP
5936 supplied metadata parameter 'vnf_name' and does not create
5937 a unique value, additional data **MUST** be used in the
5938 'str_replace' to create a unique value, such as 'OS::stack_name'
5939 and/or the 'OS::Heat::ResourceGroup' 'index'.
5941 *Example: Property 'name' for resource 'OS::Neutron::SecurityGroup'*
5943 .. code-block:: yaml
5947 type: OS::Neutron::SecurityGroup
5949 description: vDNS security group
5952 template: VNF_NAME_sec_grp_DNS
5954 VNF_NAME: {get_param: vnf_name}
5957 *Example: Property 'name' for resource 'OS::Cinder::Volume'*
5959 .. code-block:: yaml
5963 type: OS::Cinder::Volume
5965 description: Cinder Volume
5968 template: VNF_NAME_STACK_NAME_dns_volume
5970 VNF_NAME: {get_param: vnf_name}
5971 STACK_NAME: { get_param: 'OS::stack_name' }
5974 *Example: Property 'name' for resource 'OS::Cinder::Volume' invoked by a
5975 'OS::Heat::ResourceGroup'*
5977 .. code-block:: yaml
5981 type: OS::Cinder::Volume
5983 description: Cinder Volume
5986 template: VNF_NAME_STACK_NAME_dns_volume_INDEX
5988 VNF_NAME: { get_param: vnf_name }
5989 STACK_NAME: { get_param: 'OS::stack_name' }
5990 INDEX: { get_param: index }
5993 Contrail Issue with Values for the Property Name
5994 ++++++++++++++++++++++++++++++++++++++++++++++++
6001 :test: no test found
6002 :test_case: no test found
6003 :test_file: no test found
6005 The Contrail GUI has a limitation displaying special characters.
6006 The issue is documented in
6007 https://bugs.launchpad.net/juniperopenstack/+bug/1590710.
6008 It is recommended that special **SHOULD** characters be avoided.
6009 However, if special characters must be used, note that for
6010 the following resources:
6019 the only special characters supported
6020 are - \" ! $\ \ ' ( ) = ~ ^ | @ ` { } [ ] > , . _"
6022 ONAP Output Parameter Names
6023 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
6025 ONAP defines three types of Output Parameters as detailed in
6026 `Output Parameters`_.
6028 ONAP Base Module Output Parameters:
6029 +++++++++++++++++++++++++++++++++++
6031 ONAP Base Module Output Parameters do not have an explicit naming
6039 :test: no test found
6040 :test_case: no test found
6041 :test_file: no test found
6043 A VNF's Heat Orchestration Template's Base Module Output
6044 Parameter names **MUST** contain {vm-type} and/or {network-role}
6047 ONAP Volume Template Output Parameters:
6048 +++++++++++++++++++++++++++++++++++++++
6055 :test: no test found
6056 :test_case: no test found
6057 :test_file: no test found
6059 A VNF's Heat Orchestration Template's Volume Template
6060 Output Parameter names **MUST** contain {vm-type} when appropriate.
6062 Predefined Output Parameters
6063 ++++++++++++++++++++++++++++
6065 ONAP currently defines one predefined output parameter the OAM
6066 Management IP Addresses.
6068 OAM Management IP Addresses
6069 ___________________________
6071 A VNF may have a management interface for application controllers to
6072 interact with and configure the VNF. Typically, this will be via a
6073 specific VM that performs a VNF administration function. The IP address
6074 of this interface must be captured and inventoried by ONAP. The IP
6075 address might be a VIP if the VNF contains an HA pair of management VMs,
6076 or may be a single IP address assigned to one VM.
6083 :test: no test found
6084 :test_case: no test found
6085 :test_file: no test found
6089 * Only an IPv4 OAM Management IP Address
6090 * Only an IPv6 OAM Management IP Address
6091 * Both a IPv4 and IPv6 OAM Management IP Addresses
6097 :test: no test found
6098 :test_case: no test found
6099 :test_file: no test found
6101 If a VNF has one IPv4 OAM Management IP Address and the
6102 IP Address needs to be inventoried in ONAP's A&AI
6103 database, an output parameter **MUST** be declared in only one of the
6104 VNF's Heat Orchestration Templates and the parameter **MUST** be named
6105 'oam_management_v4_address'.
6111 :test: no test found
6112 :test_case: no test found
6113 :test_file: no test found
6115 If a VNF has one IPv6 OAM Management IP Address and the
6116 IP Address needs to be inventoried in ONAP's AAI
6117 database, an output parameter **MUST** be declared in only one of the
6118 VNF's Heat Orchestration Templates and the parameter **MUST** be named
6119 'oam_management_v6_address'.
6121 The OAM Management IP Address maybe assigned either via
6130 :test: no test found
6131 :test_case: no test found
6132 :test_file: no test found
6134 If the VNF's OAM Management IP Address is assigned by ONAP SDN-C and
6135 assigned in the VNF's Heat Orchestration Template's via a heat resource
6136 'OS::Neutron::Port' property 'fixed_ips' map property
6137 'ip_adress' parameter (e.g., '{vm-type}_{network-role}_ip_{index}',
6138 '{vm-type}_{network-role}_v6_ip_{index}')
6139 and the OAM IP Address is required to be inventoried in ONAP AAI,
6140 then the parameter **MUST** be echoed in an output statement.
6142 .. code-block:: yaml
6145 oam_management_v4_address:
6146 value: {get_param: {vm-type}_{network-role}_ip_{index} }
6147 oam_management_v6_address:
6148 value: {get_param: {vm-type}_{network-role}_v6_ip_{index} }
6150 *Example: ONAP SDN-C Assigned IP Address echoed as
6151 oam_management_v4_address*
6153 .. code-block:: yaml
6158 description: Fixed IPv4 assignment for admin VM 0 on the OAM network
6162 type: OS::Neutron::Port
6166 template: VNF_NAME_admin_oam_port_0
6168 VNF_NAME: {get_param: vnf_name}
6169 network: { get_param: oam_net_id }
6170 fixed_ips: [{ "ip_address": { get_param: admin_oam_ip_0 }}]
6171 security_groups: [{ get_param: security_group }]
6173 type: OS::Nova::Server
6175 name: { get_param: admin_names }
6176 image: { get_param: admin_image_name }
6177 flavor: { get_param: admin_flavor_name }
6178 availability_zone: { get_param: availability_zone_0 }
6180 - port: { get_resource: admin_0_oam_net_port_0 }
6182 vnf_id: { get_param: vnf_id }
6183 vf_module_id: { get_param: vf_module_id }
6184 vnf_name: {get_param: vnf_name }
6186 oam_management_v4_address:
6187 value: {get_param: admin_oam_ip_0 }
6194 :test: no test found
6195 :test_case: no test found
6196 :test_file: no test found
6198 If the VNF's OAM Management IP Address is Cloud assigned and
6199 and the OAM IP Address is required to be inventoried in ONAP AAI,
6200 then the parameter **MUST** be obtained by the resource 'OS::Neutron::Port'
6201 attribute 'ip_address'.
6203 .. code-block:: yaml
6206 oam_management_v4_address:
6207 value: {get_attr: [ {OS::Neutron Port Resource ID}, fixed_ips, 0, ip_address] }
6209 *Example: Cloud Assigned IP Address output as oam_management_v4_address*
6211 .. code-block:: yaml
6217 type: OS::Neutron::Port
6221 template: VNF_NAME_admin_oam_0_port
6223 VNF_NAME: {get_param: vnf_name}
6224 network: { get_param: oam_net_id }
6225 security_groups: [{ get_param: security_group }]
6227 type: OS::Nova::Server
6229 name: { get_param: admin_name_0 }
6230 image: { get_param: admin_image_name }
6231 flavor: { get_param: admin_flavor_name }
6232 availability_zone: { get_param: availability_zone_0 }
6234 - port: { get_resource: admin_0_oam_port_0 }
6236 vnf_id: { get_param: vnf_id }
6237 vf_module_id: { get_param: vf_module_id }
6238 vnf_name: {get_param: vnf_name }
6240 oam_management_v4_address:
6241 value: {get_attr: [admin_0_oam_port_0, fixed_ips, 0, ip_address] }
6243 Contrail Resource Parameters
6244 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6246 ONAP requires the parameter names of certain Contrail Resources to
6247 follow specific naming conventions. This section provides these
6250 Contrail Network Parameters
6251 +++++++++++++++++++++++++++
6253 Contrail based resources may require references to a Contrail network
6254 using the network FQDN.
6264 :test: no test found
6265 :test_case: no test found
6266 :test_file: no test found
6268 When a VNF's Heat Orchestration Template's Contrail resource
6270 references an external network that requires the network's
6271 Fully Qualified Domain Name (FQDN), the property parameter
6273 * **MUST** follow the format '{network-role}_net_fqdn'
6274 * **MUST** be declared as type 'string'
6275 * **MUST NOT** be enumerated in the NF's Heat Orchestration Template's
6282 :test: no test found
6283 :test_case: no test found
6284 :test_file: no test found
6286 A VNF's Heat Orchestration Template's parameter
6287 '{network-role}_net_fqdn'
6288 **MUST** be declared as type 'string'.
6294 :test: no test found
6295 :test_case: no test found
6296 :test_file: no test found
6298 A VNF's Heat Orchestration Template's parameter
6299 '{network-role}_net_fqdn'
6300 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
6303 *Example: Parameter declaration*
6305 .. code-block:: yaml
6308 {network-role}_net_fqdn:
6310 description: Contrail FQDN for the {network-role} network
6312 *Example: Contrail Resource OS::ContrailV2::VirtualMachineInterface
6313 Reference to a Network FQDN.*
6315 In this example, the {network-role} has been defined as oam to represent
6316 an oam network and the {vm-type} has been defined as fw for firewall.
6317 The Contrail resource OS::ContrailV2::VirtualMachineInterface property
6318 virtual_network_refs references a contrail network FQDN.
6320 .. code-block:: yaml
6323 type: OS::ContrailV2::VirtualMachineInterface
6327 template: VM_NAME_virtual_machine_interface_1
6329 VM_NAME: { get_param: fw_name_0 }
6330 virtual_machine_interface_properties:
6331 virtual_machine_interface_properties_service_interface_type: {
6332 get_param: oam_protected_interface_type }
6333 virtual_network_refs:
6334 - get_param: oam_net_fqdn
6335 security_group_refs:
6336 - get_param: fw_sec_grp_id
6339 Interface Route Table Prefixes for Contrail InterfaceRoute Table
6340 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6347 :test: no test found
6348 :test_case: no test found
6349 :test_file: no test found
6351 If a VNF's Heat Orchestration Template
6352 'OS::ContrailV2::InterfaceRouteTable' resource
6353 'interface_route_table_routes' property
6354 'interface_route_table_routes_route' map property parameter name
6355 **MUST** follow the format
6357 * {vm-type}_{network-role}_route_prefixes
6363 :test: no test found
6364 :test_case: no test found
6365 :test_file: no test found
6367 If a VNF's Heat Orchestration Template
6368 'OS::ContrailV2::InterfaceRouteTable' resource
6369 'interface_route_table_routes' property
6370 'interface_route_table_routes_route' map property parameter
6371 '{vm-type}_{network-role}_route_prefixes'
6372 **MUST** be defined as type 'json'.
6378 :test: no test found
6379 :test_case: no test found
6380 :test_file: no test found
6382 If a VNF's Heat Orchestration Template
6383 'OS::ContrailV2::InterfaceRouteTable' resource
6384 'interface_route_table_routes' property
6385 'interface_route_table_routes_route' map property parameter
6386 '{vm-type}_{network-role}_route_prefixes'
6387 **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
6390 The parameter '{vm-type}_{network-role}_route_prefixes'
6391 supports IP addresses in the format:
6393 1. Host IP Address (e.g., 10.10.10.10)
6395 2. CIDR Notation format (e.g., 10.0.0.0/28)
6398 *Example Parameter Definition*
6400 .. code-block:: yaml
6403 {vm-type}_{network-role}_route_prefixes:
6405 description: JSON list of Contrail Interface Route Table route prefixes
6409 .. code-block:: yaml
6414 description: Unique name for this VF instance
6415 fw_oam_route_prefixes:
6417 description: prefix for the ServiceInstance InterfaceRouteTable
6418 int_fw_dns_trusted_interface_type:
6420 description: service_interface_type for ServiceInstance
6424 type: OS::ContrailV2::InterfaceRouteTable
6425 depends_on: [resource name of OS::ContrailV2::ServiceInstance]
6429 template: VNF_NAME_interface_route_table
6431 VNF_NAME: { get_param: vnf_name }
6432 interface_route_table_routes:
6433 interface_route_table_routes_route: { get_param: fw_oam_route_prefixes }
6434 service_instance_refs:
6435 - get_resource: <resource name of OS::ContrailV2::ServiceInstance>
6436 service_instance_refs_data:
6437 - service_instance_refs_data_interface_type: { get_param: oam_interface_type }
6439 Resource OS::ContrailV2::InstanceIp
6440 +++++++++++++++++++++++++++++++++++
6442 The Contrail resource OS::ContrailV2::InstanceIp has two properties
6443 that parameters **MUST** follow an explicit naming convention. The
6444 properties are 'instance_ip_address' and 'subnet_uuid'.
6446 *Example OS::ContrailV2::InstanceIp Resource*
6448 .. code-block:: yaml
6451 type: OS::ContrailV2::InstanceIp
6453 name: { get_param: name }
6454 fq_name: { get_param: fq_name }
6455 display_name: { get_param: display_name }
6456 secondary_ip_tracking_ip:
6458 secondary_ip_tracking_ip_ip_prefix: { get_param: secondary_ip_tracking_ip_ip_prefix },
6459 secondary_ip_tracking_ip_ip_prefix_len: { get_param: secondary_ip_tracking_ip_ip_prefix_len },
6461 instance_ip_address: { get_param: instance_ip_address }
6462 instance_ip_mode: { get_param: instance_ip_mode }
6463 subnet_uuid: { get_param: subnet_uuid }
6464 instance_ip_family: { get_param: instance_ip_family }
6467 annotations_key_value_pair:
6469 annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
6470 annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
6473 instance_ip_local_ip: { get_param: instance_ip_local_ip }
6474 instance_ip_secondary: { get_param: instance_ip_secondary }
6475 physical_router_refs: [{ get_param: physical_router_refs }]
6476 virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
6477 virtual_network_refs: [{ get_param: virtual_network_refs }]
6479 Resource OS::ContrailV2::InstanceIp Property instance_ip_address
6480 ________________________________________________________________
6482 A VNF's Heat Orchestration Templates resource 'OS::ContrailV2::InstanceIp'
6483 property 'instance_ip_address' parameter
6484 **MUST** follow the same requirements
6485 that apply to the resource 'OS::Neutron' property 'fixed_ips' map
6486 property 'ip_address' parameter.
6488 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
6489 instance_ip_address*
6491 The property instance_ip_address uses the same parameter naming
6492 convention as the property fixed_ips and Map Property ip_address in
6493 OS::Neutron::Port. The resource is assigning an ONAP SDN-C Assigned IP
6494 Address. The {network-role} has been defined as oam_protected to
6495 represent an oam protected network and the {vm-type} has been defined as
6498 .. code-block:: yaml
6500 fw_0_oam_protected_vmi_0_IP_0:
6501 type: OS::ContrailV2::InstanceIp
6503 - fw_0_oam_protected_vmi_0
6505 virtual_machine_interface_refs:
6506 - get_resource: fw_0_oam_protected_vmi_0
6507 virtual_network_refs:
6508 - get_param: oam_protected_net_fqdn
6509 instance_ip_address: { get_param: [fw_oam_protected_ips, get_param: index ] }
6511 Resource OS::ContrailV2::InstanceIp Property subnet_uuid
6512 ________________________________________________________________
6514 A VNF's Heat Orchestration Templates resource 'OS::ContrailV2::InstanceIp'
6515 property 'subnet_uuid' parameter
6516 **MUST** follow the same requirements
6517 that apply to the resource 'OS::Neutron' property 'fixed_ips' map
6518 property 'subnet'/'subnet_id' parameter.
6520 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
6523 The property instance_ip_address uses the same parameter naming
6524 convention as the property fixed_ips and Map Property subnet_id in
6525 OS::Neutron::Port. The resource is assigning a Cloud Assigned IP
6526 Address. The {network-role} has been defined as "oam_protected" to
6527 represent an oam protected network and the {vm-type} has been defined as
6530 .. code-block:: yaml
6532 fw_0_oam_protected_vmi_0_IP_0:
6533 type: OS::ContrailV2::InstanceIp
6535 - fw_0_oam_protected_vmi_0
6537 virtual_machine_interface_refs:
6538 - get_resource: fw_0_oam_protected_vmi_0
6539 virtual_network_refs:
6540 - get_param: oam_protected_net_fqdn
6541 subnet_uuid: { get_param: oam_protected_subnet_id }
6543 OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs
6544 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6547 A VNF's Heat Orchestration Templates resource
6548 'OS::ContrailV2::VirtualMachineInterface' map property,
6549 virtual_machine_interface_allowed_address_pairs,
6550 virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
6551 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
6552 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix
6553 parameter **MUST** follow the same requirements that apply to the
6554 resource 'OS::Neutron::Port' property
6555 'allowed_address_pairs', map property 'ip_address' parameter.
6557 *Example OS::ContrailV2::VirtualMachineInterface*
6559 .. code-block:: yaml
6562 type: OS::ContrailV2::VirtualMachineInterface
6564 name: { get_param: name }
6565 fq_name: { get_param: fq_name }
6566 ecmp_hashing_include_fields:
6568 ecmp_hashing_include_fields_hashing_configured: { get_param: ecmp_hashing_include_fields_hashing_configured },
6569 ecmp_hashing_include_fields_source_ip: { get_param: ecmp_hashing_include_fields_source_ip },
6570 ecmp_hashing_include_fields_destination_ip: { get_param: ecmp_hashing_include_fields_destination_ip },
6571 ecmp_hashing_include_fields_ip_protocol: { get_param: ecmp_hashing_include_fields_ip_protocol },
6572 ecmp_hashing_include_fields_source_port: { get_param: ecmp_hashing_include_fields_source_port },
6573 ecmp_hashing_include_fields_destination_port: { get_param: ecmp_hashing_include_fields_destination_port },
6575 virtual_machine_interface_host_routes:
6577 virtual_machine_interface_host_routes_route:
6579 virtual_machine_interface_host_routes_route_prefix: { get_param: virtual_machine_interface_host_routes_route_prefix },
6580 virtual_machine_interface_host_routes_route_next_hop: { get_param: virtual_machine_interface_host_routes_route_next_hop },
6581 virtual_machine_interface_host_routes_route_next_hop_type: { get_param: virtual_machine_interface_host_routes_route_next_hop_type },
6582 virtual_machine_interface_host_routes_route_community_attributes:
6584 virtual_machine_interface_host_routes_route_community_attributes_community_attribute: [{ get_param: virtual_machine_interface_host_routes_route_community_attributes_community_attribute }],
6588 virtual_machine_interface_mac_addresses:
6590 virtual_machine_interface_mac_addresses_mac_address: [{ get_param: virtual_machine_interface_mac_addresses_mac_address }],
6592 virtual_machine_interface_dhcp_option_list:
6594 virtual_machine_interface_dhcp_option_list_dhcp_option:
6596 virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name },
6597 virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value },
6598 virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value_bytes: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value_bytes },
6601 virtual_machine_interface_bindings:
6603 virtual_machine_interface_bindings_key_value_pair:
6605 virtual_machine_interface_bindings_key_value_pair_key: { get_param: virtual_machine_interface_bindings_key_value_pair_key },
6606 virtual_machine_interface_bindings_key_value_pair_value: { get_param: virtual_machine_interface_bindings_key_value_pair_value },
6609 virtual_machine_interface_disable_policy: { get_param: virtual_machine_interface_disable_policy }
6610 virtual_machine_interface_allowed_address_pairs:
6612 virtual_machine_interface_allowed_address_pairs_allowed_address_pair:
6614 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip:
6616 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix },
6617 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len },
6619 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac },
6620 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode },
6625 annotations_key_value_pair:
6627 annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
6628 annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
6631 virtual_machine_interface_fat_flow_protocols:
6633 virtual_machine_interface_fat_flow_protocols_fat_flow_protocol:
6635 virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol },
6636 virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port },
6639 virtual_machine_interface_device_owner: { get_param: virtual_machine_interface_device_owner }
6640 port_security_enabled: { get_param: port_security_enabled }
6641 virtual_machine_interface_properties:
6643 virtual_machine_interface_properties_service_interface_type: { get_param: virtual_machine_interface_properties_service_interface_type },
6644 virtual_machine_interface_properties_interface_mirror:
6646 virtual_machine_interface_properties_interface_mirror_traffic_direction: { get_param: virtual_machine_interface_properties_interface_mirror_traffic_direction },
6647 virtual_machine_interface_properties_interface_mirror_mirror_to:
6649 virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name },
6650 virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation },
6651 virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address },
6652 virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address },
6653 virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance },
6654 virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port },
6655 virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header },
6656 virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode },
6657 virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header:
6659 virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_ip_address },
6660 virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vtep_dst_mac_address },
6661 virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vni: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header_vni },
6665 virtual_machine_interface_properties_local_preference: { get_param: virtual_machine_interface_properties_local_preference },
6666 virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: virtual_machine_interface_properties_sub_interface_vlan_tag },
6668 display_name: { get_param: display_name }
6669 service_health_check_refs: [{ get_param: service_health_check_refs }]
6670 routing_instance_refs: [{ get_param: routing_instance_refs }]
6671 routing_instance_refs_data:
6673 routing_instance_refs_data_direction: { get_param: routing_instance_refs_data_direction },
6674 routing_instance_refs_data_vlan_tag: { get_param: routing_instance_refs_data_vlan_tag },
6675 routing_instance_refs_data_src_mac: { get_param: routing_instance_refs_data_src_mac },
6676 routing_instance_refs_data_dst_mac: { get_param: routing_instance_refs_data_dst_mac },
6677 routing_instance_refs_data_mpls_label: { get_param: routing_instance_refs_data_mpls_label },
6678 routing_instance_refs_data_service_chain_address: { get_param: routing_instance_refs_data_service_chain_address },
6679 routing_instance_refs_data_ipv6_service_chain_address: { get_param: routing_instance_refs_data_ipv6_service_chain_address },
6680 routing_instance_refs_data_protocol: { get_param: routing_instance_refs_data_protocol },
6682 security_group_refs: [{ get_param: security_group_refs }]
6683 physical_interface_refs: [{ get_param: physical_interface_refs }]
6684 port_tuple_refs: [{ get_param: port_tuple_refs }]
6685 interface_route_table_refs: [{ get_param: interface_route_table_refs }]
6686 virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
6687 virtual_network_refs: [{ get_param: virtual_network_refs }]
6688 virtual_machine_refs: [{ get_param: virtual_machine_refs }]
6689 qos_config_refs: [{ get_param: qos_config_refs }]
6690 virtual_machine: { get_param: virtual_machine }
6691 project: { get_param: project }
6695 Suggested Naming Convention for Common Parameters
6696 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6698 Many VNFs use the parameters in the table below are used in user_data.
6699 The table below provides a suggested naming convention for these common
6705 .. csv-table:: **Table 8: Suggested Naming Convention for Common Parameters: Netmask**
6706 :header: Parameter Name,Parameter Type,Notes
6710 {network-role}_subnet_<index>_netmask, string,
6711 int_<network-role>_subnet_<index>_netmask, string,
6712 {network-role}_v6_subnet_<index>_netmask , string,
6713 int_{network-role}_v6_subnet_<index>_netmask, string,
6718 .. csv-table:: **Table 9: Suggested Naming Convention for Common Parameters: CIDR**
6719 :header: Parameter Name,Parameter Type,Notes
6723 <network-role>_subnet_<index>_cidr, string,
6724 int_<network-role>_subnet_<index>_cidr, string,
6725 <network-role>_v6_subnet_<index>_cidr, string,
6726 int_<network-role>_v6_subnet_<index>_cidr, string,
6731 .. csv-table:: **Table 10: Suggested Naming Convention for Common Parameters: Default Gateway**
6732 :header: Parameter Name,Parameter Type,Notes
6736 {network-role}_subnet_<index>_default_gateway, string,
6737 {network-role}_v6_subnet_<index>_default_gateway, string,
6739 DCAE Collector IP Address
6740 +++++++++++++++++++++++++
6742 .. csv-table:: **Table 11: Suggested Naming Convention for Common Parameters: DCAE Collector Address**
6743 :header: Parameter Name,Parameter Type,Notes
6747 dcae_collector_ip_<index>, string,
6748 dcae_collector_v6_ip_<index>, string,
6750 NTP Server IP Address
6751 +++++++++++++++++++++
6753 .. csv-table:: **Table 12: Suggested Naming Convention for Common Parameters: NTP Server IP Address**
6754 :header: Parameter Name,Parameter Type,Notes
6758 ntp_ip_<index>, string,
6759 ntp_v6_ip_<index>, string,
6764 .. csv-table:: **Table 13: Suggested Naming Convention for Common Parameters: DCAE Collector Address**
6765 :header: Parameter Name,Parameter Type,Notes
6769 dns_{network-role}_ip_<index>, string,
6770 dns_{network-role}_v6_ip_<index>, string,
6775 .. csv-table:: **Table 14: Suggested Naming Convention for Common Parameters: Security Group**
6776 :header: Parameter Name,Parameter Type,Notes
6780 {vm-type}_security_group, string, Security Group applicable to one {vm-type} and more than one network (internal and/or external)
6781 {network-role}_security_group, string, Security Group applicable to more than one {vm-type} and one external network
6782 int_{network-role}_security_group, string, Security Group applicable to more than one {vm-type} and one internal network
6783 {vm-type}_{network-role}_security_group, string, Security Group applicable to one {vm-type} and one external network
6784 {vm-type}_int_{network-role}_security_group, string, Security Group applicable to one {vm-type} and one internal network
6785 shared_security_group, string, Security Group applicable to more than one {vm-type} and more than one network (internal and/or external)
6788 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6790 ONAP supports a modular Heat Orchestration Template design pattern,
6791 referred to as *VNF Modularity.* With this approach, a single VNF **MAY** be
6792 composed from one or more Heat Orchestration Templates, each of which
6793 represents a subset of the overall VNF. These component parts are
6794 referred to as *VNF Modules*. During orchestration, these modules
6795 are deployed incrementally to create the complete VNF.
6797 As stated in R-33132, a VNF's Heat Orchestration Template **MAY** be
6798 1.) Base Module Heat Orchestration Template (also referred to as a
6800 2.) Incremental Module Heat Orchestration Template (referred to as
6801 an Incremental Module), or
6802 3.) a Cinder Volume Module Heat Orchestration Template (referred to as
6803 Cinder Volume Module).
6805 As stated in R-20974, at orchestration time, the VNF's Base Module **MUST**
6806 be deployed first, prior to any incremental modules.
6808 As stated in R-28980, R-86926, and R-91497, a
6809 VNF's incremental module **MAY** be used for
6811 * initial VNF deployment only
6813 * both deployment and scale out
6815 As stated in R-68122, a VNF's incremental module **MAY** be deployed
6816 more than once, either during initial VNF deployment and/or scale out
6818 As stated in R-37028 and R-13196, a VNF **MUST** be composed
6819 of one Base Module and *MAY** be composed of zero to many Incremental
6822 ONAP also supports the concept of an optional, independently deployed
6823 Cinder volume via a separate Heat Orchestration Templates, referred to
6824 as a Cinder Volume Module. This allows the volume to persist after a VM
6825 (i.e., OS::Nova::Server) is deleted, allowing the volume to be reused on
6826 another instance (e.g., during a fail over activity).
6828 The scope of a Cinder volume module, when it exists, must be 1:1 with a
6829 Base module or Incremental Module.
6831 A VNF module (base, incremental, cinder) **MAY** support nested templates.
6833 A shared Heat Resource is a resource that **MAY** be used by
6834 other Heat Resources either in the Base Module or an
6844 A shared Heat Orchestration Template resource must be defined
6845 in the base module. A shared resource is a resource that that will
6846 be referenced by another resource that is defined in the Base Module
6847 and/or one or more incremental modules. When the shared resource needs
6848 to be referenced by a resource in an incremental module, the UUID of
6849 the shared resource **MUST** be exposed by declaring an ONAP Base
6850 Module Output Parameter.
6852 When the shared resource needs to be referenced by a resource in an
6853 incremental module, the UUID of the shared resource must be exposed by
6854 declaring an ONAP Base Module Output Parameter.
6856 An example of a shared resource is the resource
6857 OS::Neutron::SecurityGroup. Security groups are sets of IP filter rules
6858 that are applied to a VNF’s networking. The resource OS::Neutron::Port
6859 has a property security_groups which provides the security groups
6860 associated with port. The value of parameter(s) associated with this
6861 property must be the UUIDs of the resource(s)
6862 OS::Neutron::SecurityGroup.
6864 *Note:* A Cinder volume is not considered a shared resource. A volume
6865 template must correspond 1:1 with a base template or add-on module
6868 Suggested Patterns for Modular VNFs
6869 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6871 There are numerous variations of VNF modularity. Below are two suggested
6874 **Option 1: Incremental Modules per VNFC type**
6876 a. Base module contains only the shared resources.
6878 b. Group all VMs (e.g., VNFCs) of a given type (i.e. {vm-type}) into its
6879 own incremental module. That is, the VNF has an incremental module
6882 c. For a given {vm-type} incremental module, the VNF may have
6884 i. One incremental module used for both initial turn up and re-used
6885 for scaling. This approach is used when the number of VMs
6886 instantiated will be the same for initial deployment and scaling.
6888 ii. Two incremental modules, where one is used for initial turn up
6889 and one is used for scaling. This approach is used when the
6890 number of VMs instantiated will be different for initial
6891 deployment and scaling.
6893 **Option 2: Base VNF with Incremental Growth Modules**
6895 a. Base module contains a complete initial VNF instance
6897 b. Incremental modules for incremental scaling units
6899 i. May contain VMs of multiple types in logical scaling combinations
6901 ii. May be separated by VM type for multi-dimensional scaling
6903 With no growth units, Option 2 is equivalent to the "One Heat Template
6906 Note that modularization of VNFs is not required. A single Heat
6907 Orchestration Template (a base module) may still define a complete VNF,
6908 which might be appropriate for smaller VNFs that do not have any scaling
6912 ~~~~~~~~~~~~~~~~~~~~~
6914 There are some rules to follow when building modular VNF templates:
6916 1. All VNFs must have one Base VNF Module (template) that must be the
6917 first one deployed. The base template:
6919 a. Must include all shared resources (e.g., private networks, server
6920 groups, security groups)
6922 b. Must expose all shared resources (by UUID) as "outputs" in its
6923 associated Heat template (i.e., ONAP Base Module Output
6926 c. May include initial set of VMs
6928 d. May be operational as a stand-alone "minimum" configuration of the
6931 2. VNFs may have one or more incremental modules which:
6933 a. Defines additional resources that can be added to an existing VNF
6935 b. Must be complete Heat templates
6937 i. i.e. not snippets to be incorporated into some larger template
6939 c. Should define logical growth-units or sub-components of an overall
6942 d. On creation, receives appropriate Base Module outputs as
6945 i. Provides access to all shared resources (by UUID)
6947 ii. *VNFs may have one or more incremental modules which must not be
6948 dependent on other Add-On VNF Modules*
6950 e. Multiple instances of an incremental Module may be added to the
6951 same VNF (e.g., incrementally grow a VNF by a fixed "add-on"
6954 3. Each VNF Module (base or incremental) may have (optional) an
6955 associated Cinder Volume Module (see Cinder Volumes)
6957 a. Volume modules must correspond 1:1 with a base module or
6960 b. A Cinder volume may be embedded within the base module or
6961 incremental module if persistence is not required
6963 4. Shared resource UUIDs are passed between the base module and
6964 incremental modules via Heat Outputs Parameters (i.e., Base Module
6967 a. The output parameter name in the base must match the parameter
6968 name in the add-on module
6970 VNF Modularity Examples
6971 ~~~~~~~~~~~~~~~~~~~~~~~~~
6973 *Example: Base Module creates SecurityGroup*
6975 A VNF has a base module, named base.yaml, that defines a
6976 OS::Neutron::SecurityGroup. The security group will be referenced by an
6977 OS::Neutron::Port resource in an incremental module, named
6978 INCREMENTAL_MODULE.yaml. The base module defines a parameter in the
6979 outputs:section named dns_sec_grp_id. dns_sec_grp_id is defined as a
6980 parameter in the incremental module. ONAP captures the UUID value of
6981 dns_sec_grp_id from the base module output statement and provides the
6982 value to the incremental module.
6984 Note that the example below is not a complete Heat Orchestration
6985 Template. The {network-role} has been defined as oam to represent an oam
6986 network and the {vm-type} has been defined as dns.
6990 .. code-block:: yaml
6996 type: OS::Neutron::SecurityGroup
6998 description: vDNS security group
7001 template: VNF_NAME_sec_grp_DNS
7003 VMF_NAME: {get_param: vnf_name}
7009 description: UUID of DNS Resource SecurityGroup
7010 value: { get_resource: DNS_SECURITY_GROUP }
7012 INCREMENTAL_MODULE.yaml
7014 .. code-block:: yaml
7019 description: security group UUID
7024 type: OS::Neutron::Port
7028 template: VNF_NAME_dns_oam_port
7030 VNF_NAME: {get_param: vnf_name}
7031 network: { get_param: oam_net_name }
7032 fixed_ips: [{ "ip_address": { get_param: dns_oam_ip_0 }}]
7033 security_groups: [{ get_param: dns_sec_grp_id }]
7035 *Examples: Base Module creates an internal network*
7037 A VNF has a base module, named base_module.yaml, that creates an
7038 internal network. An incremental module, named incremental_module.yaml,
7039 will create a VM that will connect to the internal network. The base
7040 module defines a parameter in the out section named int_oam_net_id.
7041 int_oam_net_id is defined as a parameter in the incremental module.
7042 ONAP captures the UUID value of int_oam_net_id from the base module
7043 output statement and provides the value to the incremental module.
7045 Note that the example below is not a complete Heat Orchestration
7046 Template. The {network-role} has been defined as oam to represent an oam
7047 network and the {vm-type} has been defined as lb for load balancer.
7051 .. code-block:: yaml
7053 heat_template_version: 2013-05-23
7057 type: OS::Neutron::Network
7064 value: {get_resource: int_oam_network }
7068 .. code-block:: yaml
7070 heat_template_version: 2013-05-23
7075 description: ID of shared private network from Base template
7078 description: name for the add-on VM instance
7082 type: OS::Nova::Server
7084 name: {get_param: lb_name_0}
7086 - port: { get_resource: get_resource: lb_0_int_oam_port_0 }
7088 lb_0_int_oam_port_0:
7089 type: OS::Neutron::Port
7091 network: { get_param: int_oam_net_id }
7096 ^^^^^^^^^^^^^^^^^^^^^^^^
7098 Cinder Volumes are created with the heat resource OS::Cinder::Volume.
7100 As stated in R-46119, R-90748, R-03251, a VNF's Heat Orchestration
7101 Template's Resource OS::Heat::CinderVolume **MAY** be defined in a
7102 Base Module, Incremental Module, or Cinder Volume Module.
7104 ONAP supports the independent deployment of a Cinder volume via separate
7105 Heat Orchestration Templates, the Cinder Volume module. This allows the
7106 volume to persist after VNF deletion so that they can be reused on
7107 another instance (e.g., during a failover activity).
7109 A Base Module or Incremental Module may have a corresponding volume
7110 module. Use of separate volume modules is optional. A Cinder volume may
7111 be embedded within the Base Module or Incremental Module if persistence
7114 If a VNF Base Module or Incremental Module has an independent volume
7115 module, the scope of volume templates must be 1:1 with Base module or
7116 Incremental module. A single volume module must create only the volumes
7117 required by a single Incremental module or Base module.
7119 As stated in R-11200, a VNF's Cinder Volume Module, when it exists,
7120 **MUST** be 1:1 with a Base module or Incremental module. That is,
7121 A single volume module must create only the volumes required by a
7122 single Incremental module or Base module.
7124 As stated in R-30395, a VNF's Cinder Volume Module **MAY** utilize
7127 As stated in R-89913, a VNF's Heat Orchestration Template's Cinder Volume
7128 Module Output Parameter(s) **MUST** include the
7129 UUID(s) of the Cinder Volumes created in template,
7130 while others **MAY** be included.
7132 As stated in R-07443, a VNF's Heat Orchestration Templates' Cinder Volume
7133 Module Output Parameter's name and type **MUST** match the input parameter
7134 name and type in the corresponding Base Module or Incremental Module unless
7135 the Output Parameter is of the type 'comma_delimited_list',
7136 then the corresponding input parameter **MUST** be declared as type 'json'.
7138 A single volume module must create only the volumes
7139 required by a single Incremental module or Base module.
7141 The following rules apply to independent volume Heat templates:
7149 The VNF Heat Orchestration Template **MUST** define
7150 "outputs" in the volume template for each Cinder volume
7151 resource universally unique identifier (UUID) (i.e. ONAP
7152 Volume Template Output Parameters).
7154 - The VNF Incremental Module or Base Module must define input
7155 parameters that match each Volume output parameter (i.e., ONAP Volume
7156 Template Output Parameters).
7158 - ONAP will supply the volume template outputs automatically to the
7159 bases/incremental template input parameters.
7161 - Volume modules may utilize nested Heat templates.
7163 Optional Property availability_zone
7164 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7170 :keyword: SHOULD NOT
7172 A VNF's Heat Orchestration Template's Resource 'OS::Cinder::Volume'
7173 **SHOULD NOT** declare the property 'availability_zone'.
7175 If the property is used, the value **MUST**
7176 be enumerated in the environment file and must be set to nova', which
7177 is the default. There are no requirements on the parameter naming
7178 convention with the exception that the naming convention **MUST NOT** be the
7179 same as the 'OS::Nova::Server' property 'availability_zone' (i.e.,
7180 'availability_zone_{index}').
7182 Optional Property volume_type
7183 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7185 OpenStack supports multiple volume types. If the OS::Cinder::Volume optional
7186 property volume_type is not specified, the OpenStack default volume type is
7187 used. If a specific volume type is required, the property is used and
7188 the value **MUST** be enumerated in the environment file. There are no
7189 requirements on the parameter naming convention
7191 Cinder Volume Examples
7192 ~~~~~~~~~~~~~~~~~~~~~~~~~
7194 *Examples: Volume Template*
7196 A VNF has a Cinder volume module, named incremental\_volume.yaml, that
7197 creates an independent Cinder volume for a VM in the module
7198 incremental.yaml. The incremental\_volume.yaml defines a parameter in
7199 the output section, lb\_volume\_id\_0 which is the UUID of the cinder
7200 volume. lb\_volume\_id\_0 is defined as a parameter in incremental.yaml.
7201 ONAP captures the UUID value of lb\_volume\_id\_0 from the volume module
7202 output statement and provides the value to the incremental module.
7204 Note that the example below is not a complete Heat Orchestration
7205 Template. The {vm-type} has been defined as "lb" for load balancer
7207 incremental\_volume.yaml
7209 .. code-block:: yaml
7220 type: OS::Cinder::Volume
7224 template: VNF_NAME_volume_0
7226 VNF_NAME: { get_param: vnf_name }
7227 size: {get_param: dns_volume_size_0}
7232 value: {get_resource: dns_volume_0}
7238 .. code-block:: yaml
7249 type: OS::Nova::Server
7251 name: {get_param: dns_name_0}
7256 type: OS::Cinder::VolumeAttachment
7258 instance_uuid: { get_resource: lb_0 }
7259 volume_id: { get_param: lb_volume_id_0 }
7261 ONAP Support of Environment Files
7262 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7264 The use of an environment file in OpenStack is optional. In ONAP, it is
7265 mandatory. A Heat Orchestration Template uploaded to ONAP must have a
7266 corresponding environment file, even if no parameters are required to
7269 (Note that ONAP does not programmatically enforce the use of
7270 an environment file.)
7278 The VNF Heat Orchestration Template **MUST** have a corresponding
7279 environment file for a Base Module.
7286 The VNF Heat Orchestration Template **MUST** have a
7287 corresponding environment file for an Incremental module.
7294 The VNF Heat Orchestration Template **MUST** have a
7295 corresponding environment file for a Cinder Volume Module.
7297 A nested heat template must not have an environment file; OpenStack does
7300 The environment file must contain parameter values for the ONAP
7301 Orchestration Constants and VNF Orchestration Constants. These
7302 parameters are identical across all instances of a VNF type, and
7303 expected to change infrequently. The ONAP Orchestration Constants are
7304 associated with OS::Nova::Server image and flavor properties (See
7305 `Property: image`_ and `Property: flavor`_). Examples of VNF
7306 Orchestration Constants are the networking parameters associated
7307 with an internal network (e.g., private IP ranges) and Cinder
7310 The environment file must not contain parameter values for parameters
7311 that are instance specific (ONAP Orchestration Parameters, VNF
7312 Orchestration Parameters). These parameters are supplied to the Heat by
7313 ONAP at orchestration time.
7315 SDC Treatment of Environment Files
7316 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7318 Parameter values enumerated in the environment file are used by SDC as
7319 the default value. However, the SDC user may use the SDC GUI to
7320 overwrite the default values in the environment file.
7322 SDC generates a new environment file for distribution to SO based on
7323 the uploaded environment file and the user provided GUI updates. The
7324 user uploaded environment file is discarded when the new file is
7325 created. Note that if the user did not change any values via GUI
7326 updates, the SDC generated environment file will contain the same values
7327 as the uploaded file.
7329 Use of Environment Files when using OpenStack "heat stack-create" CLI
7330 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7332 When ONAP is instantiating the Heat Orchestration Template, certain
7333 parameter must not be enumerated in the environment file. This document
7334 provides the details of what parameters should not be enumerated.
7336 If the Heat Orchestration Template is to be instantiated from the
7337 OpenStack Command Line Interface (CLI) using the command "heat
7338 stack-create", all parameters must be enumerated in the environment
7341 Heat Template Constructs
7342 ^^^^^^^^^^^^^^^^^^^^^^^^^
7344 Nested Heat Templates
7345 ~~~~~~~~~~~~~~~~~~~~~
7347 ONAP supports nested Heat templates per the OpenStack specifications.
7348 Nested templates may be suitable for larger VNFs that contain many
7349 repeated instances of the same VM type(s). A common usage pattern is to
7350 create a nested template for each {vm-type} along with its supporting
7351 resources. The VNF module may then reference these component templates
7352 either statically by repeated definition or dynamically by using the
7353 resource OS::Heat::ResourceGroup.
7355 Nested Heat Template Requirements
7356 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7358 ONAP supports nested Heat Orchestration Templates. A Base Module,
7359 Incremental Module, and Cinder Volume Module may use nested heat.
7367 A VNF's Heat Orchestration Template **MAY**
7368 reference the nested heat statically by repeated definition.
7375 A VNF's Heat Orchestration Template **MAY**
7376 reference the nested heat dynamically using the resource
7377 'OS::Heat::ResourceGroup'.
7384 A VNF's Heat Orchestration Template **MUST** have no more than
7385 two levels of nesting.
7387 As stated in R-67231 a VNF's Heat Orchestration template's
7388 Environment File's **MUST NOT** contain the "resource_registry:" section.
7390 Two levels of nesting is defined as follows: A base module, incremental
7391 module, or cinder volume module references a nested heat file either
7392 statically or by using the resource 'OS::Heat::ResourceGroup'.
7393 This file is the first level of nesting.
7394 If first level file then references a nested file, that file is
7395 the second level of nesting.
7403 The VNF Heat Orchestration Template **MUST** have unique
7404 file names within the scope of the VNF for a nested heat yaml file.
7411 A VNF's Heat Orchestration Template's Nested YAML file
7412 **MUST** be in the same directory hierarchy as the VNF's Heat
7413 Orchestration Templates.
7420 A VNF's Nested YAML file **MAY** be invoked more than
7421 once by a VNF's Heat Orchestration Template.
7428 A VNF's Nested YAML file **MAY** be invoked by more than one of
7429 a VNF's Heat Orchestration Templates (when the VNF is composed of two
7430 or more Heat Orchestration Templates).
7437 All parameters defined in a VNFs Nested YAML file
7438 **MUST** be passed in as properties of the resource calling
7439 the nested yaml file.
7443 - As stated in requirement R-00011, a VNF's Heat Orchestration
7444 Template's Nested YAML file's parameter's **MUST NOT** have
7445 a parameter constraint defined.
7447 - As stated in Requirement R-44491, if a VNF's Heat Orchestration
7448 Template's OS::Nova::Server Resource metadata map value parameter
7449 'vnf\_id' is passed into a Nested YAML
7450 file, the parameter name 'vnf\_id' **MUST NOT** change.
7452 - As stated in Requirement R-86237, if a VNF's Heat Orchestration
7453 Template's OS::Nova::Server Resource metadata map value parameter
7454 'vf\_module\_id' is passed into a Nested YAML
7455 file, the parameter name 'vf\_module\_id' **MUST NOT** change.
7457 - As stated in Requirement R-16576, if a VNF's Heat Orchestration
7458 Template's OS::Nova::Server Resource metadata map value parameter
7459 'vnf\_name' is passed into a Nested YAML
7460 file, the parameter name 'vnf\_name' **MUST NOT** change.
7462 - As stated in Requirement R-49177, if a VNF's Heat Orchestration
7463 Template's OS::Nova::Server Resource metadata map value parameter
7464 'vf\_module\_name' is passed into a Nested YAML
7465 file, the parameter name 'vf\_module\_name' **MUST NOT** change.
7467 - As stated in Requirement R-70757, if a VNF's Heat Orchestration
7468 Template's OS::Nova::Server Resource metadata map value parameter
7469 'vm\_role' is passed into a Nested YAML
7470 file, the parameter name 'vm\_role' **MUST NOT** change.
7472 - As stated in Requirement R-22441, if a VNF's Heat Orchestration
7473 Template's OS::Nova::Server Resource metadata map value parameter
7474 'vf\_module\_index' is passed into a Nested YAML
7475 file, the parameter name 'vf\_module\_index' **MUST NOT** change.
7477 - As stated in Requirement R-75202, if a VNF's Heat Orchestration
7478 Template's OS::Nova::Server Resource metadata map value parameter
7479 'workload\_context' is passed into a Nested YAML
7480 file, the parameter name 'workload\_context' **MUST NOT** change.
7482 - As stated in Requirement R-62954, if a VNF's Heat Orchestration
7483 Template's OS::Nova::Server Resource metadata map value parameter
7484 'environment\_context' is passed into a Nested YAML
7485 file, the parameter name 'environment\_context' **MUST NOT** change.
7487 - With nested templates, outputs are required to expose any resource
7488 properties of the child templates to the parent template. Those would
7489 not explicitly be declared as parameters but simply referenced as
7490 get\_attribute targets against the "parent" resource.
7492 - A parameter declared in the outputs: section of a nested template can
7493 be accessed from the parent template as an attribute (i.e., via
7494 get\_attr) of the "pseudo resource" whose type is in the nested
7495 template. In the case of a OS::Heat::ResourceGroup, an output will be
7496 an attribute of the OS::Heat::ResourceGroup itself, and will be an
7497 array from the perspective of the parent template.
7504 A VNF's Heat Orchestration Template's first level Nested YAML file
7505 **MUST NOT** contain more than one ``OS::Nova::Server`` resource.
7506 A VNF's Heat Orchestration Template's second level Nested YAML file
7507 **MUST NOT** contain an ``OS::Nova::Server`` resource.
7509 Nested Heat Template Example: Static
7510 ++++++++++++++++++++++++++++++++++++++
7514 .. code-block:: yaml
7520 dns_image_name: { get_param: dns_image_name }
7521 dns_flavor_name: { get_param: dns_flavor_name }
7522 availability_zone: { get_param: availability_zone_0 }
7523 security_group: { get_param: DNS_shared_sec_grp_id }
7524 oam_net_id: { get_param: oam_protected_net_id }
7525 dns_oam_ip: { get_param: dns_oam_ip_0 }
7526 dns_name: { get_param: dns_name_0 }
7527 vnf_name: { get_param: vnf_name }
7528 vnf_id: { get_param: vnf_id }
7529 vf_module_id: {get_param: vf_module_id}
7534 dns_image_name: { get_param: dns_image_name }
7535 dns_flavor_name: { get_param: dns_flavor_name }
7536 availability_zone: { get_param: availability_zone_1 }
7537 security_group: { get_param: DNS_shared_sec_grp_id }
7538 oam_net_id: { get_param: oam_protected_net_id }
7539 dns_oam_ip: { get_param: dns_oam_ip_1 }
7540 dns_name: { get_param: dns_name_1 }
7541 vnf_name: { get_param: vnf_name }
7542 vnf_id: { get_param: vnf_id }
7543 vf_module_id: {get_param: vf_module_id}
7547 .. code-block:: yaml
7550 type: OS::Neutron::Port
7554 template: VNF_NAME_dns_oam_port
7556 VNF_NAME: {get_param: vnf_name}
7557 network: { get_param: oam_net_id }
7558 fixed_ips: [{ "ip_address": { get_param: dns_oam_ip }}]
7559 security_groups: [{ get_param: security_group }]
7562 type: OS::Nova::Server
7564 name: { get_param: dns_names }
7565 image: { get_param: dns_image_name }
7566 flavor: { get_param: dns_flavor_name }
7567 availability_zone: { get_param: availability_zone }
7569 - port: { get_resource: dns_oam_0_port }
7571 vnf_id: { get_param: vnf_id }
7572 vf_module_id: { get_param: vf_module_id }
7573 vnf_name {get_param: vnf_name }
7575 Use of Heat ResourceGroup
7576 +++++++++++++++++++++++++
7578 The OS::Heat::ResourceGroup is a useful Heat element for creating
7579 multiple instances of a given resource or collection of resources.
7580 Typically, it is used with a nested Heat template, to create, for
7581 example, a set of identical OS::Nova::Server resources plus their
7582 related OS::Neutron::Port resources via a single resource in a master
7585 OS::Heat::ResourceGroup may be used to simplify the structure of a Heat
7586 template that creates multiple instances of the same VM type.
7588 However, there are important caveats to be aware of:
7590 OS::Heat::ResourceGroup does not deal with structured parameters
7591 (comma-delimited-list and json) as one might typically expect. In
7592 particular, when using a list-based parameter, where each list element
7593 corresponds to one instance of the ResourceGroup, it is not possible to
7594 use the intrinsic "loop variable" %index% in the OS::Heat::ResourceGroup
7597 For instance, the following is **not** valid Heat for
7598 OS::Heat::ResourceGroup:
7600 .. code-block:: yaml
7602 type: OS::Heat::ResourceGroup
7604 type: my_nested_vm_template.yaml
7606 name: {get_param: [vm_name_list, "%index%"]}
7608 Although this appears to use the nth entry of the vm_name_list list for
7609 the nth element of the OS::Heat::ResourceGroup, it will in fact result
7610 in a Heat exception. When parameters are provided as a list (one for
7611 each element of a OS::Heat::ResourceGroup), you must pass the complete
7612 parameter to the nested template along with the current index as
7613 separate parameters.
7615 Below is an example of an **acceptable** Heat Syntax for a
7618 .. code-block:: yaml
7620 type: OS::Heat::ResourceGroup
7622 type: my_nested_vm_template.yaml
7624 names: {get_param: vm_name_list}
7627 You can then reference within the nested template as:
7629 { get\_param: [names, {get\_param: index} ] }
7631 OS::Heat::ResourceGroup Property count
7632 ________________________________________
7640 A VNF's Heat Orchestration Template's 'OS::Heat::ResourceGroup'
7641 property 'count' **MUST** be enumerated in the VNF's
7642 Heat Orchestration Template's Environment File and **MUST** be
7645 This is required for ONAP to build the TOSCA model for the VNF.
7647 .. code-block:: yaml
7649 type: OS::Heat::ResourceGroup
7651 count: { get_param: count }
7654 type: my_nested_vm_template.yaml
7656 names: {get_param: vm_name_list}
7659 Availability Zone and ResourceGroups
7660 ____________________________________
7662 The resource OS::Heat::ResourceGroup and the property availability\_zone
7663 has been an "issue" with a few VNFs since ONAP only supports
7664 availability\_zone as a string parameter and not a
7665 comma\_delimited\_list. This makes it difficult to use a
7666 OS::Heat::ResourceGroup to create Virtual Machines in more
7667 than one availability zone.
7669 There are numerous solutions to this issue. Below are two suggested
7672 **Option 1:** create a CDL in the OS::Heat::ResourceGroup. In the
7673 resource type: OS::Heat::ResourceGroup, create a comma\_delimited\_list
7674 availability\_zones by using the intrinsic function list\_join.
7676 .. code-block:: yaml
7679 type: OS::Heat::ResourceGroup
7681 count: { get_param: node_count }
7687 avaialability_zones: { list_join: [',', [ { get_param: availability_zone_0 }, { get_param: availability_zone_1 } ] ] }
7691 .. code-block:: yaml
7694 avaialability_zones:
7695 type: comma_delimited_list
7700 type: OS::Nova::Server
7702 name: { get_param: [ dns_names, get_param: index ] }
7703 image: { get_param: dns_image_name }
7704 flavor: { get_param: dns_flavor_name }
7705 availability_zone: { get_param: [ avaialability_zones, get_param: index ] }
7707 **Option 2:** Create a CDL by passing the availability zone parameter
7708 into a nested heat template. An example is provided below.
7712 .. code-block:: yaml
7714 availability_zone_list:
7715 type: az_list_generate.yaml
7717 availability_zone_0: { get_param: availability_zone_0 }
7718 availability_zone_1: { get_param: availability_zone_1 }
7720 create_virtual_machines:
7721 type: OS::Heat::ResourceGroup
7723 count: { get_param: count }
7726 type: nest_file.yaml
7729 availability_zone_0 : { get_attr: [availability_zone_list, general_zones ] }
7732 az_list_generate.yaml
7734 .. code-block:: yaml
7737 availability_zone_0:
7739 description: availability zone 0
7741 availability_zone_1:
7743 description: availability zone 1
7749 { get_param: availability_zone_0 },
7750 { get_param: availability_zone_1 },
7751 { get_param: availability_zone_0 },
7752 { get_param: availability_zone_1 },
7753 { get_param: availability_zone_0 },
7754 { get_param: availability_zone_1 },
7758 Nested Heat Template Example: OS::Heat::ResourceGroup
7759 _________________________________________________________
7761 In this example, ocgapp\_volume.yml creates volumes using a
7762 OS::Heat::ResourceGroup that uses nested heat by calling
7763 ocgapp_nested_volume.yml. ocgapp\_volume.yml has an outputs: parameter
7764 ocgapp\_volume\_ids which is declared a input parameter of type: json in
7768 This is an example of requirement R-07443, where
7769 a VNF's Heat Orchestration Templates' Cinder Volume Module Output
7770 Parameter's name and type **MUST** match the input parameter name and type
7771 in the corresponding Base Module or Incremental Module unless the Output
7772 Parameter is of the type 'comma\_delimited\_list', then the corresponding
7773 input parameter **MUST** be declared as type 'json'.
7777 .. code-block:: yaml
7779 heat_template_version: 2014-10-16
7781 description: Template for the volumes
7787 description: OCG VNF Name
7788 ocgapp_volume_size_0:
7790 label: Cinder volume 1 size
7791 description: the size of the Cinder volume
7793 - range: { min: 100, max: 400 }
7794 ocgapp_volume_type_0:
7796 label: app vm 1 volume type
7797 description: the name of the target volume backend for the first OCG APP
7801 description: number of volumes needed
7804 ocgapp_volume_resource_group:
7805 type: OS::Heat::ResourceGroup
7807 count: {get_param: volume_count}
7810 type: ocgapp_nested_volume.yml
7813 size: {get_param: ocgapp_volume_size_0}
7814 volume_type: {get_param: ocgapp_volume_type_0}
7815 vnf_name: {get_param: vnf_name}
7819 description: ocgapp volume ids
7820 value: {get_attr: [ocgapp_volume_resource_group, ocgapp_volume_id_0]}
7822 ocgapp_nested_volume.yml
7824 .. code-block:: yaml
7826 heat_template_version: 2014-10-16
7828 description: nested heat
7834 description: number of volumes to spin up
7838 description: size of the cinder volumes
7842 description: type of cinder volumes
7846 description: vnf name
7850 type: OS::Cinder::Volume
7852 size: {get_param: size}
7853 volume_type: {get_param: volume_type}
7856 template: VF_NAME_STACK_NAME_INDEX
7858 VF_NAME: { get_param: vnf_name }
7859 STACK_NAME: { get_param: 'OS::stack_name' }
7860 INDEX: {get_param: index}
7864 description: the ocgapp volume uuid
7865 value: {get_resource: ocgapp_volume_0}
7867 The heat template below is a partial heat template,
7871 .. code-block:: yaml
7873 heat_template_version: 2014-10-16
7876 description: OCG Apps template
7881 description: Unique IDs for volumes
7885 type: OS::Nova::Server
7889 type: OS::Nova::Server
7892 ocgapp_volume_attachment_0:
7893 type: OS::Cinder::VolumeAttachment
7895 volume_id: {get_param: [ocgapp_volume_ids, 0]}
7896 instance_uuid: {get_resource: ocgapp_server_0}
7897 ocgapp_volume_attachment_1:
7898 type: OS::Cinder::VolumeAttachment
7900 volume_id: {get_param: [ocgapp_volume_ids, 1]}
7901 instance_uuid: {get_resource: ocgapp_server_1}
7906 Heat templates *should not* reference any HTTP-based resource
7907 definitions, any HTTP-based nested configurations, or any HTTP-based
7910 - During orchestration, ONAP *should not* retrieve any such resources
7911 from external/untrusted/unknown sources.
7913 - VNF images should not contain such references in user-data or other
7914 configuration/operational scripts that are specified via Heat or
7915 encoded into the VNF image itself.
7917 *Note:* HTTP-based references are acceptable if the HTTP-based reference
7918 is accessing information with the VM private/internal network.
7920 Note that Namespaces in XML (defined at
7921 http://www.w3.org/TR/2009/REC-xml-names-20091208/) are allowed if the
7922 Heat Orchestration Template is describing and storing software
7923 configuration information. An XML namespace is identified by a URI
7924 reference. A Uniform Resource Identifier (URI) is a string of characters
7925 which identifies an Internet Resource. The most common URI is the
7926 Uniform Resource Locator (URL) which identifies an Internet domain
7927 address. Another, not so common type of URI is the Universal Resource
7928 Name (URN). The namespace URI is not used by XML the parser to look up
7929 information. The purpose of using an URI is to give the namespace a
7932 Heat Files Support (get\_file)
7933 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7935 Heat Templates may contain the inclusion of text files into Heat
7936 templates via the Heat get\_file directive. This may be used, for
7937 example, to define a common "user-data" script, or to inject files into
7938 a VM on startup via the "personality" property.
7940 Support for Heat Files is subject to the following limitations:
7948 If a VNF's Heat Orchestration Template uses the intrinsic function
7949 'get\_file', the 'get\_file' target **MUST** be referenced in
7950 the Heat Orchestration Template by file name.
7952 The 'get\_file' target files are on-boarded to SDC in the same package
7953 that contains the VNF's complete Heat Orchestration Template.
7961 A VNF's Heat Orchestration Template intrinsic function
7962 'get\_file' **MUST NOT** utilize URL-based file retrieval.
7969 When using the intrinsic function get_file, the included files
7970 **MUST** have unique file names within the scope of the VNF.
7977 A VNF's Heat Orchestration Template's 'get\_file' target files
7978 **MUST** be in the same directory hierarchy as the VNF's Heat
7979 Orchestration Templates.
7981 ONAP does not support a hierarchical structure. A VNF's YAML files
7982 must be in a single, flat directory.
7990 A VNF's Heat Orchestration Templates intrinsic function
7991 'get\_file' <content key> **MAY** be used:
7993 * more than once in a VNF's Heat Orchestration Template
7994 * in two or more of a VNF's Heat Orchestration Templates
7995 * in a VNF's Heat Orchestration Templates nested YAML file
8000 When Nova Servers are created via Heat templates, they may be passed a
8001 "keypair" which provides an ssh key to the 'root' login on the newly
8002 created VM. This is often done so that an initial root key/password does
8003 not need to be hard-coded into the image.
8005 Key pairs are unusual in OpenStack, because they are the one resource
8006 that is owned by an OpenStack User as opposed to being owned by an
8007 OpenStack Tenant. As a result, they are usable only by the User that
8008 created the keypair. This causes a problem when a Heat template attempts
8009 to reference a keypair by name, because it assumes that the keypair was
8010 previously created by a specific ONAP user ID.
8012 When a keypair is assigned to a server, the SSH public-key is
8013 provisioned on the VMs at instantiation time. They keypair itself is not
8014 referenced further by the VM (i.e. if the keypair is updated with a new
8015 public key, it would only apply to subsequent VMs created with that
8018 Due to this behavior, the recommended usage of keypairs is in a more
8019 generic manner which does not require the pre-requisite creation of a
8020 keypair. The Heat should be structured in such a way as to:
8022 - Pass a public key as a parameter value instead of a keypair name
8024 - Create a new keypair within The VNF Heat Orchestration Template (in the
8025 base module) based on an existing public key for use within that VNF
8027 By following this approach, the end result is the same as pre-creating
8028 the keypair using the public key – i.e., that public key will be
8029 provisioned in the new VM. However, this recommended approach also makes
8030 sure that a known public key is supplied (instead of having OpenStack
8031 generate a public/private pair to be saved and tracked outside of ONAP).
8032 It also removes any access/ownership issues over the created keypair.
8034 The public keys may be enumerated as a VNF Orchestration Constant in the
8035 environment file (since it is public, it is not a secret key), or passed
8036 at run-time as instance-specific parameters. ONAP will never
8037 automatically assign a public/private key pair.
8039 *Example (create keypair with an existing ssh public-key for {vm-type}
8040 of lb (for load balancer)):*
8042 .. code-block:: yaml
8052 type: OS::Nova::Keypair
8056 template: VNF_NAME_key_pair
8058 VNF_NAME: { get_param: vnf_name }
8059 public_key: {get_param: lb_ssh_public_key}
8060 save_private_key: false
8065 OpenStack allows a tenant to create Security groups and define rules
8066 within the security groups.
8068 Security groups, with their rules, may either be created in the Heat
8069 Orchestration Template or they can be pre-created in OpenStack and
8070 referenced within the Heat template via parameter(s). There can be a
8071 different approach for security groups assigned to ports on internal
8072 (intra-VNF) networks or external networks (inter-VNF). Furthermore,
8073 there can be a common security group across all VMs for a specific
8074 network or it can vary by VM (i.e., {vm-type}) and network type (i.e.,
8077 Anti-Affinity and Affinity Rules
8078 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8080 Anti-affinity or affinity rules are supported using normal OpenStack
8081 OS::Nova::ServerGroup resources. Separate ServerGroups are typically
8082 created for each VM type to prevent them from residing on the same host,
8083 but they can be applied to multiple VM types to extend the
8084 affinity/anti-affinity across related VM types as well.
8088 In this example, the {network-role} has been defined as oam to represent
8089 an oam network and the {vm-type} have been defined as lb for load
8090 balancer and db for database.
8092 .. code-block:: yaml
8096 type: OS::Nova::ServerGroup
8101 $vnf_name: {get_param: vnf_name}
8102 template: $vnf_name-server_group1
8107 type: OS::Nova::ServerGroup
8112 $vnf_name: {get_param: vnf_name}
8113 template: $vnf_name-server_group2
8118 type: OS::Nova::Server
8122 group: {get_resource: db_server_group}
8125 type: OS::Nova::Server
8129 group: {get_resource: db_server_group}
8132 type: OS::Nova::Server
8136 group: {get_resource: lb_server_group}
8138 Resource Data Synchronization
8139 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8141 For cases where synchronization is required in the orchestration of Heat
8142 resources, two approaches are recommended:
8144 - Standard Heat depends\_on property for resources
8146 - Assures that one resource completes before the dependent resource
8149 - Definition of completeness to OpenStack may not be sufficient
8150 (e.g., a VM is considered complete by OpenStack when it is ready
8151 to be booted, not when the application is up and running).
8153 - Use of Heat Notifications
8155 - Create OS::Heat::WaitCondition and OS::Heat::WaitConditionHandle
8158 - Pre-requisite resources issue *wc\_notify* commands in user\_data.
8160 - Dependent resource define depends\_on in the
8161 OS::Heat::WaitCondition resource.
8163 *Example: "depends\_on" case*
8165 In this example, the {network-role} has been defined as oam to represent
8166 an oam network and the {vm-type} has been defined as oam to represent an
8169 .. code-block:: yaml
8173 type: OS::Nova::Server
8175 name: {get_param: [oam_ names, 0]}
8176 image: {get_param: oam_image_name}
8177 flavor: {get_param: oam_flavor_name}
8178 availability_zone: {get_param: availability_zone_0}
8180 - port: {get_resource: oam01_port_0}
8181 - port: {get_resource: oam01_port_1}
8183 scheduler_hints: {group: {get_resource: oam_servergroup}}
8184 user_data_format: RAW
8187 type: OS::Neutron::Port
8189 network: {get_resource: oam_net_name}
8190 fixed_ips: [{"ip_address": {get_param: [oam_oam_net_ips, 1]}}]
8191 security_groups: [{get_resource: oam_security_group}]
8194 type: OS::Neutron::Port
8196 network: {get_param: oam_net_name}
8197 fixed_ips: [{"ip_address": {get_param: [oam_oam_net_ips, 2]}}]
8198 security_groups: [{get_resource: oam_security_group}]
8200 oam_01_vol_attachment:
8201 type: OS::Cinder::VolumeAttachment
8202 depends_on: oam_server_01
8204 volume_id: {get_param: oam_vol_1}
8205 mountpoint: /dev/vdb
8206 instance_uuid: {get_resource: oam_server_01}
8211 VNF/VM parameters may include availability zone IDs for VNFs that
8212 require high availability.
8214 The Heat must comply with the following requirements to specific
8215 availability zone IDs:
8217 - The Heat template should spread Nova resources across the
8218 availability zones as desired
8220 Post Orchestration & VNF Configuration
8221 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8223 Heat templates should contain a minimum amount of post-orchestration
8224 configuration data. For instance, *do not* embed complex user-data
8225 scripts in the template with large numbers of configuration parameters
8226 to the Heat template.
8228 - VNFs may provide configuration APIs for use after VNF creation. Such
8229 APIs will be invoked via application and/or SDN controllers.
8231 *Note:* It is important to follow this convention to the extent possible
8232 even in the short-term as of the long-term direction.