diff options
author | Bozawglanian, Hagop (hb755d) <hb755d@att.com> | 2018-09-04 21:44:28 +0000 |
---|---|---|
committer | Bozawglanian, Hagop (hb755d) <hb755d@att.com> | 2018-09-04 21:44:28 +0000 |
commit | c4e85b64d93f7bb4cdcf13cbc65f2256e5bb7a33 (patch) | |
tree | be3abe0eb6ea4407da81dcb3917dbf1d8f35e77a /docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst | |
parent | 7b7ff003d1133f68bdd17812112e5a5abc47a7f6 (diff) |
VNFRQTS - Breaking up Chapter 5 - Heat
Breaking up the Heat section to make it more granular.
Issue-ID: VNFRQTS-275
Change-Id: I020469d7aea199cd71c4d7c67664ad4dbc4071c9
Signed-off-by: Bozawglanian, Hagop (hb755d) <hb755d@att.com>
Diffstat (limited to 'docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst')
-rw-r--r-- | docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst | 1749 |
1 files changed, 1749 insertions, 0 deletions
diff --git a/docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst b/docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst new file mode 100644 index 0000000..049967e --- /dev/null +++ b/docs/Chapter5/Heat/ONAP Heat Resource ID and Parameter Naming Convention/Neutron Parameters.rst @@ -0,0 +1,1749 @@ +.. Licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright 2017 AT&T Intellectual Property. All rights reserved. + +Resource: OS::Neutron::Port - Parameters +------------------------------------------------- + +The resource OS::Neutron::Port is for managing Neutron ports. + +(See https://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Neutron::Port) + +Introduction +^^^^^^^^^^^^^ + +Four properties of the resource OS::Neutron::Port that must follow the +ONAP parameter naming convention. The four properties are: + +1. network +2. fixed_ips, ip_address +3. fixed_ips, subnet_id or fixed_ips, subnet + + * Note that in many examples in this document fixed_ips, subnet_id is used. + +4. allowed_address_pairs, ip_address + +Below is a generic example. Note that for some parameters +comma_delimited_list are supported in addition to String. + +.. code-block:: yaml + + resources: + + ... + + <resource ID>: + type: OS::Neutron::Port + properties: + allowed_address_pairs: [{"ip_address": String, "mac_address": String}, + {"ip_address": String, "mac_address": String}, ...] + fixed_ips: [{"ip_address": String, "subnet_id": String, "subnet": + String}, {"ip_address": String, "subnet_id": String, "subnet": String}, + ...] + network: String + +The values associated with these properties may reference an external +network or internal network. External networks and internal +networks are defined in :ref:`ONAP Heat Networking`. + +When the OS::Neutron::Port is attaching to an external network, all +property values are parameters that are retrieved via the intrinsic +function 'get_param'. + +When the OS::Neutron::Port is attaching to an internal network, a +property value maybe retrieved via the intrinsic +function 'get_param', 'get_resource', or 'get_attr'. + +This will be described in the forth coming sections. + +Items to Note +~~~~~~~~~~~~~~ + +.. req:: + :id: R-93272 + :target: VNF + :keyword: MAY + :test: no test found + :test_case: no test found + :test_file: no test found + + A VNF **MAY** have one or more ports connected to a unique + external network. All VNF ports connected to the unique external + network **MUST** have Cloud Assigned IP Addresses + or **MUST** have ONAP SDN-C assigned IP addresses. + +.. req:: + :id: R-13841 + :target: VNF + :keyword: MAY + :test: no test found + :test_case: no test found + :test_file: no test found + + A VNF **MAY** have one or more ports connected to a unique + internal network. All VNF ports connected to the unique internal + network **MUST** have Cloud Assigned IP Addresses + or **MUST** have statically assigned IP addresses. + +.. req:: + :id: R-07577 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + If the VNF's ports connected to a unique network (internal or external) + and the port's IP addresses are Cloud Assigned IP Addresses, + all the IPv4 Addresses **MUST** be from + the same subnet and all the IPv6 Addresses **MUST** be from the + same subnet. + +.. req:: + :id: R-45602 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF's Port is attached to a network (internal or external) + and the port's IP addresses are Cloud Assigned by OpenStack's DHCP + Service, the 'OS::Neutron::Port' Resource's + + * property 'fixed_ips' map property 'ip_address' **MUST NOT** be used + * property 'fixed_ips' map property 'subnet'/'subnet_id' **MAY** be used + +.. req:: + :id: R-63956 + :target: VNF + :keyword: MAY + :test: no test found + :test_case: no test found + :test_file: no test found + + If the VNF's ports connected to a unique external network + and the port's IP addresses are ONAP SDN-C assigned IP Addresses, + the IPv4 Addresses **MAY** be from different subnets and the IPv6 + Addresses **MAY** be from different subnets. + +.. req:: + :id: R-48880 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF's Port is attached to an external network and the port's + IP addresses are assigned by ONAP's SDN-Controller, + the 'OS::Neutron::Port' Resource's + + * property 'fixed_ips' map property 'ip_address' **MUST** be used + * property 'fixed_ips' map property 'subnet'/'subnet_id' **MUST NOT** be used + +.. req:: + :id: R-18001 + :target: VNF + :keyword: MAY + :test: no test found + :test_case: no test found + :test_file: no test found + + If the VNF's ports connected to a unique internal network + and the port's IP addresses are statically assigned IP Addresses, + the IPv4 Addresses **MAY** be from different subnets and the + IPv6 Addresses **MAY** be from different subnets. + +.. req:: + :id: R-70964 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF's Port is attached to an internal network and the port's + IP addresses are statically assigned by the VNF's Heat Orchestration\ + Template (i.e., enumerated in the Heat Orchestration Template's + environment file), the 'OS::Neutron::Port' Resource's + + * property 'fixed_ips' map property 'ip_address' **MUST** be used + * property 'fixed_ips' map property 'subnet'/'subnet_id' + **MUST NOT** be used + +Property: network +^^^^^^^^^^^^^^^^^^ + +The Resource 'OS::Neutron::Port' property 'network' determines what network +the port is attached to. + + +.. req:: + :id: R-18008 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + property 'network' parameter **MUST** be declared as type: 'string'. + +.. req:: + :id: R-62983 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + is attaching to an external network, the 'network' parameter name **MUST** + + - follow the naming convention '{network-role}_net_id' if the Neutron + network UUID value is used to reference the network + - follow the naming convention '{network-role}_net_name' if the OpenStack + network name is used to reference the network. + + where '{network-role}' is the network-role of the external network and + a 'get_param' **MUST** be used as the intrinsic function. + +.. req:: + :id: R-86182 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + is attaching to an internal network, and the internal network is created in a different + Heat Orchestration Template than the 'OS::Neutron::Port', the 'network' + parameter name **MUST** + + - follow the naming convention 'int\_{network-role}_net_id' if the Neutron + network UUID value is used to reference the network + - follow the naming convention 'int\_{network-role}_net_name' if the + OpenStack network name in is used to reference the network. + + where '{network-role}' is the network-role of the internal network and a 'get_param' **MUST** be used as the intrinsic function. + +In Requirement :need:`R-86182`, the internal network is created in the VNF's +Base Module (Heat Orchestration Template) and the parameter name is +declared in the Base Module's outputs' section. +The output parameter name will be declared as a parameter in the +'parameters' section of the incremental module. + + +.. req:: + :id: R-93177 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's + Resource 'OS::Neutron::Port' is attaching to an internal + network, and the internal network is created in the same Heat + Orchestration Template than the 'OS::Neutron::Port', the 'network' + parameter name **MUST** obtain the UUID of the internal network + by using the intrinsic function 'get_resource' or 'get_attr' + and referencing the Resource ID of the internal network. + +.. req:: + :id: R-29872 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource 'OS::Nova::Server' + property 'network' parameter **MUST NOT** be enumerated in the Heat + Orchestration Template's Environment File. + +The parameter values for external networks are provided by ONAP +to the VNF's Heat Orchestration Template at orchestration time. + +The parameter values for internal networks created in the VNF's Base Module +Heat Orchestration Template +are provided to the VNF's Incremental Module Heat Orchestration Template +at orchestration time. + +*Example Parameter Definition of External Networks* + +.. code-block:: yaml + + parameters: + + {network-role}_net_id: + type: string + description: Neutron UUID for the external {network-role} network + + {network-role}_net_name: + type: string + description: Neutron name for the external {network-role} network + + +*Example Parameter Definition of Internal Networks in an Incremental Module* + +.. code-block:: yaml + + parameters: + + int_{network-role}_net_id: + type: string + description: Neutron UUID for the internal int_{network-role} network + + int_{network-role}_net_name: + type: string + description: Neutron name for the internal int_{network-role} network + +Property: fixed_ips, Map Property: ip_address +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The resource 'OS::Neutron::Port' property 'fixed_ips' +map property 'ip_address' +is used to assign one IPv4 or IPv6 +addresses to port. + +One 'OS::Neutron::Port' resource may assign one or more +IPv4 and/or IPv6 addresses. + + +.. req:: + :id: R-34037 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's resource 'OS::Neutron::Port' + property 'fixed_ips' map property 'ip_address' parameter **MUST** + be declared as either type 'string' or type 'comma_delimited_list'. + +.. req:: + :id: R-40971 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an external network, and an IPv4 + address is assigned using the property 'fixed_ips' map property + 'ip_address' and the parameter type is defined + as a string, the parameter name **MUST** follow the naming + convention + - '{vm-type}_{network-role}\_ip\_{index}' + + where + + - '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + - '{network-role}' is the {network-role} of the external network + - the value for {index} must start at zero (0) and increment by one + +.. req:: + :id: R-39841 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + property 'fixed_ips' map property 'ip_address' parameter + '{vm-type}_{network-role}_ip_{index}' **MUST NOT** be enumerated in the + VNF's Heat Orchestration Template's Environment File. + +ONAP's SDN-Controller assigns the IP Address and ONAP provides +the value at orchestration to the Heat Orchestration Template. + +*Example External Network IPv4 Address string Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_ip_{index}: + type: string + description: Fixed IPv4 assignment for {vm-type} VM {index} on the{network-role} network + + +.. req:: + :id: R-04697 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + is attaching to an external network, and an IPv4 address is assigned using + the property 'fixed_ips' map property 'ip_address' and the parameter type + is defined as a comma_delimited_list, the parameter name **MUST** follow the + naming convention + + * '{vm-type}_{network-role}_ips', + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the external network + +.. req:: + :id: R-98905 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' + property 'fixed_ips' map property 'ip_address' parameter + '{vm-type}_{network-role}_ips' **MUST NOT** be enumerated in the VNF's + Heat Orchestration Template's Environment File. + +ONAP's SDN-Controller assigns the IP Address and ONAP provides +the value at orchestration to the Heat Orchestration Template. + +*Example External Network IPv4 Address comma_delimited_list +Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_ips: + type: comma_delimited_list + description: Fixed IPv4 assignments for {vm-type} VMs on the {network-role} network + + +.. req:: + :id: R-71577 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an external network, and an IPv6 address + is assigned using the property 'fixed_ips' map property 'ip_address' and + the parameter type is defined as a string, the parameter name **MUST** follow + the naming convention + + * '{vm-type}_{network-role}_v6_ip_{index}' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the external network + * the value for {index} must start at zero (0) and increment by one + +.. req:: + :id: R-87123 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}_{network-role}_v6_ip_{index}' + **MUST NOT** be enumerated in the VNF's Heat Orchestration + Template's Environment File. + +ONAP's SDN-Controller assigns the IP Address and ONAP provides +the value at orchestration to the Heat Orchestration Template. + +*Example External Network IPv6 Address string Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_v6_ip_{index}: + type: string + description: Fixed IPv6 assignment for {vm-type} VM {index} on the {network-role} network + + +.. req:: + :id: R-23503 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an external network, and an IPv6 + address is assigned using the property 'fixed_ips' map property 'ip_address' + and the parameter type is defined as a comma_delimited_list, the parameter + name **MUST** follow the naming convention + + * '{vm-type}_{network-role}_v6_ips' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the external network + +.. req:: + :id: R-93030 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}_{network-role}_v6_ips' **MUST NOT** be enumerated in the + VNF's Heat Orchestration Template's Environment File. + +ONAP's SDN-Controller assigns the IP Address and ONAP provides +the value at orchestration to the Heat Orchestration Template. + +*Example External Network IPv6 Address comma_delimited_list Parameter +Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_v6_ips: + type: comma_delimited_list + description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network + + +.. req:: + :id: R-78380 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an internal network, and an IPv4 address + is assigned using the property 'fixed_ips' map property 'ip_address' and + the parameter type is defined as a string, the parameter name **MUST** follow + the naming convention + + * '{vm-type}\_int\_{network-role}\_ip\_{index}' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the internal network + * the value for {index} must start at zero (0) and increment by one + +.. req:: + :id: R-28795 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}\_int\_{network-role}\_ip\_{index}' **MUST** be enumerated + in the VNF's Heat Orchestration Template's Environment File. + +The IP address is local to the VNF's internal network and is (re)used +in every VNF spin up, thus the constant value is declared in the VNF's +Heat Orchestration Template's Environment File. + +*Example Internal Network IPv4 Address string Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_int_{network-role}_ip_{index}: + type: string + description: Fixed IPv4 assignment for {vm-type} VM {index} on the int_{network-role} network + + +.. req:: + :id: R-85235 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an internal network, and an IPv4 + address is assigned using the property 'fixed_ips' map property 'ip_address' + and the parameter type is defined as a comma_delimited_list, the parameter + name **MUST** follow the naming convention + + * '{vm-type}\_int\_{network-role}_ips' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the internal network + +.. req:: + :id: R-90206 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}\_int\_{network-role}_int_ips' **MUST** be enumerated in + the VNF's Heat Orchestration Template's Environment File. + +The IP address is local to the VNF's internal network and is (re)used +in every VNF spin up, thus the constant value is declared in the VNF's +Heat Orchestration Template's Environment File. + +.. code-block:: yaml + + parameters: + + {vm-type}_int_{network-role}_ips: + type: comma_delimited_list + description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network + + +.. req:: + :id: R-27818 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an internal network, and an IPv6 address + is assigned using the property 'fixed_ips' map property 'ip_address' and + the parameter type is defined as a string, the parameter name **MUST** follow + the naming convention + + * '{vm-type}\_int\_{network-role}\_v6\_ip\_{index}' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the internal network + * the value for {index} must start at zero (0) and increment by one + +.. req:: + :id: R-97201 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}\_int\_{network-role}\_v6\_ip\_{index}' + **MUST** be enumerated in the VNF's Heat Orchestration + Template's Environment File. + +The IP address is local to the VNF's internal network and is (re)used +in every VNF spin up, thus the constant value is declared in the VNF's +Heat Orchestration Template's Environment File. + +*Example Internal Network IPv6 Address string Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_int_{network-role}_v6_ip_{index}: + type: string + description: Fixed IPv6 assignment for {vm-type} VM {index} on the int_{network-role} network + + +.. req:: + :id: R-29765 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an internal network, and an IPv6 + address is assigned using the property 'fixed_ips' map property 'ip_address' + and the parameter type is defined as a comma_delimited_list, the parameter + name **MUST** follow the naming convention + + * '{vm-type}\_int\_{network-role}_v6_ips' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the internal network + +*Example Internal Network IPv6 Address comma_delimited_list Parameter +Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_int_{network-role}_v6_ips: + type: comma_delimited_list + description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network + + +.. req:: + :id: R-98569 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter '{vm-type}\_int\_{network-role}_v6_ips' **MUST** be enumerated in + the VNF's Heat Orchestration Template's Environment File. + +The IP address is local to the VNF's internal network and is (re)used +in every VNF spin up, thus the constant value is declared in the VNF's +Heat Orchestration Template's Environment File. + + +.. req:: + :id: R-62590 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter associated with an external network, i.e., + + - {vm-type}_{network-role}\_ip\_{index} + - {vm-type}_{network-role}\_ip\_v6\_{index} + - {vm-type}_{network-role}_ips + - {vm-type}_{network-role}_v6_ips + + **MUST NOT** be enumerated in the Heat Orchestration Template's Environment File. + ONAP provides the IP address assignments at orchestration time. + +.. req:: + :id: R-93496 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property 'ip_address' + parameter associated with an internal network, i.e., + + - {vm-type}\_int\_{network-role}\_ip\_{index} + - {vm-type}\_int\_{network-role}\_ip\_v6\_{index} + - {vm-type}\_int\_{network-role}_ips + - {vm-type}\_int\_{network-role}_v6_ips + + **MUST** be enumerated in the Heat Orchestration Template's Environment + File and IP addresses **MUST** be assigned. + +Summary Table +~~~~~~~~~~~~~~~~~ + +.. csv-table:: **Table # OS::Neutron::Port Property fixed_ips map property ip_address Parameter Naming Convention** + :header: Resource,Property,Map Property,Network Type,IP Address,Parameter Type,Parameter Name, Environment File + :align: center + :widths: auto + + OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, string, {vm-type}\_{network-role}\_ip\_{index}, NO + OS::Neutron::Port, fixed_ips, ip_address, external, IPv4, comma\_delimited\_list, {vm-type}\_{network-role}\_ips, NO + OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, string, {vm-type}\_{network-role}\_v6\_ip\_{index}, NO + OS::Neutron::Port, fixed_ips, ip_address, external, IPv6, comma\_delimited\_list, {vm-type}\_{network-role}\_v6\_ips, NO + OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, string, {vm-type}\_int\_{network-role}\_ip\_{index}, YES + OS::Neutron::Port, fixed_ips, ip_address, internal, IPv4, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_ips, YES + OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, string, {vm-type}\_int\_{network-role}\_v6\_ip\_{index}, YES + OS::Neutron::Port, fixed_ips, ip_address, internal, IPv6, comma\_delimited\_list, {vm-type}\_int\_{network-role}\_v6\_ips, YES + + +Examples +~~~~~~~~~~~~~~ + +*Example: comma_delimited_list parameters for IPv4 and IPv6 Address +Assignments to an external network* + +In this example, the '{network-role}' has been defined as 'oam' to represent +an oam network and the '{vm-type}' has been defined as 'db' for database. + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for a oam network + db_oam_ips: + type: comma_delimited_list + description: Fixed IPv4 assignments for db VMs on the oam network + db_oam_v6_ips: + type: comma_delimited_list + description: Fixed IPv6 assignments for db VMs on the oam network + resources: + db_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [ db_oam_ips, 0 ]}}, { + "ip_address": {get_param: [ db_oam_v6_ips, 0 ]}}] + db_1_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: + - "ip_address": {get_param: [ db_oam_ips, 1 ]} + - "ip_address": {get_param: [ db_oam_v6_ips, 1 ]} + +*Example: string parameters for IPv4 and IPv6 Address Assignments to an +external network* + +In this example, the '{network-role}' has been defined as 'oam' to +represent an oam network and the '{vm-type}' has been defined as 'db' for +database. + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for an OAM network + db_oam_ip_0: + type: string + description: Fixed IPv4 assignment for db VM 0 on the OAM network + db_oam_ip_1: + type: string + description: Fixed IPv4 assignment for db VM 1 on the OAM network + db_oam_v6_ip_0: + type: string + description: Fixed IPv6 assignment for db VM 0 on the OAM network + db_oam_v6_ip_1: + type: string + description: Fixed IPv6 assignment for db VM 1 on the OAM network + resources: + db_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: db_oam_ip_0}}, { "ip_address": {get_param: db_oam_v6_ip_0 }}] + db_1_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: + - "ip_address": {get_param: db_oam_ip_1} + - "ip_address": {get_param: db_oam_v6_ip_1} + + +*Example: comma_delimited_list parameters for IPv4 and IPv6 Address +Assignments to an internal network* + +In this example, the '{network-role}' has been defined as 'ctrl' to +represent an ctrl network internal to the vnf. +The '{vm-type}' has been defined as 'db' for +database. + +.. code-block:: yaml + + parameters: + int_ctrl_net_id: + type: string + description: Neutron UUID for the ctrl internal network + db_int_ctrl_ips: + type: comma_delimited_list + description: Fixed IPv4 assignments for db VMs on the ctrl internal + network + db_int_ctrl_v6_ips: + type: comma_delimited_list + description: Fixed IPv6 assignments for db VMs on the ctrl internal + network + resources: + db_0_int_ctrl_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: int_ctrl_net_id } + fixed_ips: [ { "ip_address": {get_param: [ db_int_ctrl_ips, 0 ]}}, { + "ip_address": {get_param: [ db_int_ctrl_v6_ips, 0 ]}}] + db_1_int_ctrl_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: int_ctrl_net_id } + fixed_ips: + - "ip_address": {get_param: [ db_int_ctrl_ips, 1 ]} + - "ip_address": {get_param: [ db_int_ctrl_v6_ips, 1 ]} + + +*Example: string parameters for IPv4 and IPv6 Address Assignments to an +internal network* + +In this example, the int_{network-role} has been defined as +int_ctrl to represent a control network internal to the vnf. +The {vm-type} has been defined as db for database. + +.. code-block:: yaml + + parameters: + int_ctrl_net_id: + type: string + description: Neutron UUID for an OAM internal network + db_int_ctrl_ip_0: + type: string + description: Fixed IPv4 assignment for db VM on the oam_int network + db_int_ctrl_ip_1: + type: string + description: Fixed IPv4 assignment for db VM 1 on the oam_int network + db_int_ctrl_v6_ip_0: + type: string + description: Fixed IPv6 assignment for db VM 0 on the oam_int network + db_int_ctrl_v6_ip_1: + type: string + description: Fixed IPv6 assignment for db VM 1 on the oam_int network + resources: + db_0_int_ctrl_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: int_oam_int_net_id } + fixed_ips: [ { "ip_address": {get_param: db_oam_int_ip_0}}, { + "ip_address": {get_param: db_oam_int_v6_ip_0 }}] + db_1_int_ctrl_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: int_oam_int_net_id } + fixed_ips: + - "ip_address": {get_param: db_oam_int_ip_1} + - "ip_address": {get_param: db_oam_int_v6_ip_1} + + +Property: fixed_ips, Map Property: subnet_id +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The resource 'OS::Neutron::Port' property 'fixed_ips' map +property 'subnet'/'subnet_id' is used when a +port is requesting an IP assignment via +OpenStack's DHCP Service (i.e., Cloud Assigned). + +The IP address assignment will be made from the specified subnet. + +Specifying the subnet is not required; it is optional. + +If the network (external or internal) that the port is attaching +to only contains one subnet, specifying the subnet is +superfluous. The IP address will be assigned from the one existing +subnet. + +If the network (external or internal) that the port is attaching +to contains two or more subnets, specifying the subnet in the +'fixed_ips' map property 'subnet'/'subnet_id' determines which +subnet the IP address will be assigned from. + +If the network (external or internal) that the port is attaching +to contains two or more subnets, and the subnet is not is not +specified, OpenStack will randomly(?) determine which subnet +the IP address will be assigned from. + +The property fixed_ips is used to assign IPs to a port. The Map Property +subnet_id specifies the subnet the IP is assigned from. + + +.. req:: + :id: R-38236 + :target: VNF + :keyword: MUST + + The VNF's Heat Orchestration Template's resource + 'OS::Neutron::Port' property 'fixed_ips' map property + 'subnet'/'subnet_id' parameter **MUST** be declared type 'string'. + +.. req:: + :id: R-62802 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's resource + 'OS::Neutron::Port' is attaching to an external network, and an IPv4 + address is being Cloud Assigned by OpenStack's DHCP Service and the + external network IPv4 subnet is to be specified using the property + 'fixed_ips' map property 'subnet'/'subnet_id', the parameter **MUST** + follow the naming convention + + * '{network-role}_subnet_id' + + where + + * '{network-role}' is the network role of the network. + +.. req:: + :id: R-83677 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property + subnet'/'subnet_id' parameter '{network-role}_subnet_id' + **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's + Environment File. + +ONAP's SDN-Controller provides the network's subnet's UUID +value at orchestration to the Heat Orchestration Template. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + {network-role}_subnet_id: + type: string + description: Neutron IPv4 subnet UUID for the {network-role} network + + +.. req:: + :id: R-15287 + :target: VNF + :keyword: MUST + + When the VNF's Heat Orchestration Template's resource + 'OS::Neutron::Port' is attaching to an external network, and an IPv6 + address is being Cloud Assigned by OpenStack's DHCP Service and the + external network IPv6 subnet is to be specified using the property + 'fixed_ips' map property 'subnet'/'subnet_id', the parameter **MUST** + follow the naming convention + + * '{network-role}_subnet_v6_id' + + where + + * '{network-role}' is the network role of the network. + +.. req:: + :id: R-80829 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property + subnet'/'subnet_id' parameter '{network-role}_subnet_v6_id' + **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's + Environment File. + +ONAP's SDN-Controller provides the network's subnet's UUID +value at orchestration to the Heat Orchestration Template. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + {network-role}_v6_subnet_id: + type: string + description: Neutron IPv6 subnet UUID for the {network-role} network + + +*Example: One Cloud Assigned IPv4 Address (DHCP) assigned to a network +that has two or more IPv4 subnets* + +In this example, the '{network-role}' has been defined as 'oam' to represent +an oam network and the '{vm-type}' has been defined as 'lb' for load +balancer. The Cloud Assigned IP Address uses the OpenStack DHCP service +to assign IP addresses. + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for the oam network + oam_subnet_id: + type: string + description: Neutron IPv4 subnet UUID for the oam network + resources: + lb_0_oam_port_0: + type: OS::Neutron::Port + parameters: + network: { get_param: oam_net_id } + fixed_ips: + - subnet_id: { get_param: oam_subnet_id } + +*Example: One Cloud Assigned IPv4 address and one Cloud Assigned IPv6 +address assigned to a network that has at least one IPv4 subnet and one +IPv6 subnet* + +In this example, the '{network-role}' has been defined as 'oam' to represent +an oam network and the '{vm-type}' has been defined as 'lb' for load +balancer. + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for the oam network + oam_subnet_id: + type: string + description: Neutron IPv4 subnet UUID for the oam network + oam_v6_subnet_id: + type: string + description: Neutron IPv6 subnet UUID for the oam network + resources: + lb_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: + - subnet_id: { get_param: oam_subnet_id } + - subnet_id: { get_param: oam_v6_subnet_id } + + +.. req:: + :id: R-84123 + :target: VNF + :keyword: MUST + + When + + - the VNF's Heat Orchestration Template's resource 'OS::Neutron::Port' + in an Incremental Module is attaching to an internal network + that is created in the Base Module, AND + - an IPv4 address is being Cloud Assigned by OpenStack's DHCP Service AND + - the internal network IPv4 subnet is to be specified using the + property 'fixed_ips' map property 'subnet'/'subnet_id', + + the parameter **MUST** follow the naming convention + * 'int\_{network-role}_subnet_id' + where + * '{network-role}' is the network role of the internal network + + - Note that the parameter **MUST** be defined as an 'output' parameter in + the base module. + +.. req:: + :id: R-69634 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property + subnet'/'subnet_id' parameter 'int\_{network-role}_subnet_id' + **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's + Environment File. + +The assumption is that internal networks are created in the base module. +The Neutron subnet network ID will be passed as an output parameter +(e.g., ONAP Base Module Output Parameter) to the incremental modules. +In the incremental modules, the output parameter name will be defined as +input parameter. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + int_{network-role}_subnet_id: + type: string + description: Neutron IPv4 subnet UUID for the int_{network-role} network + + +.. req:: + :id: R-76160 + :target: VNF + :keyword: MUST + + When + + - the VNF's Heat Orchestration Template's resource + 'OS::Neutron::Port' in an Incremental Module is attaching to an + internal network that is created in the Base Module, AND + - an IPv6 address is being Cloud Assigned by OpenStack's DHCP Service AND + - the internal network IPv6 subnet is to be specified using the property + 'fixed_ips' map property 'subnet'/'subnet_id', + + the parameter **MUST** follow the naming convention + * 'int\_{network-role}_v6_subnet_id' + where + * '{network-role}' is the network role of the internal network + + - Note that the parameter **MUST** be defined as an 'output' parameter in + the base module. + +.. req:: + :id: R-22288 + :target: VNF + :keyword: MUST NOT + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'fixed_ips' map property + 'subnet'/'subnet_id' parameter 'int\_{network-role}_v6_subnet_id' + **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's + Environment File. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + int_{network-role}_v6_subnet_id: + type: string + description: Neutron subnet UUID for the int_{network-role} network + + +Property: allowed\_address\_pairs, Map Property: ip\_address +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The property 'allowed_address_pairs' in the resource 'OS::Neutron::Port' +allows the user to specify a mac_address and/or ip_address that will +pass through a port regardless of subnet. This enables the use of +protocols, such as VRRP, which allow for a Virtual IP (VIP) address +to be shared among two or more ports, with one designated as the master +and the others as backups. In case the master fails, +the Virtual IP address is mapped to a backup's IP address and +the backup becomes the master. + +Note that the management of the VIP IP addresses (i.e. transferring +ownership between active and standby VMs) is the responsibility of +the VNF application. + + +.. req:: + :id: R-62300 + :target: VNF + :keyword: MUST + + If a VNF has two or more ports that require a Virtual IP Address (VIP), + a VNF's Heat Orchestration Template's Resource 'OS::Neutron::Port' property + 'allowed_address_pairs' map property 'ip_address' parameter **MUST** be used. + +The 'allowed_address_pairs' is an optional property. It is not required. + +ONAP automation supports the assignment of VIP addresses +for external networks. ONAP support the assignment of one IPv4 VIP address +and/or one IPv6 VIP address to a set of ports associated with a +'{vm-type}' and '{network-role}'. + +If a VNF requires more than one IPv4 VIP address +and/or more than one IPv6 VIP address to a set of ports associated with a +'{vm-type}' and '{network-role}', there are "manual" work-around +procedures that can be utilized. + +VIP Assignment, External Networks, Supported by Automation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. req:: + :id: R-91810 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF requires ONAP to assign a Virtual IP (VIP) Address to + ports connected an external network, the port + **MUST NOT** have more than one IPv4 VIP address. + +.. req:: + :id: R-41956 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF requires ONAP to assign a Virtual IP (VIP) Address to + ports connected an external network, the port + **MUST NOT** have more than one IPv6 VIP address. + +.. req:: + :id: R-10754 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + If a VNF has two or more ports that + attach to an external network that require a Virtual IP Address (VIP), + and the VNF requires ONAP automation to assign the IP address, + all the Virtual Machines using the VIP address **MUST** + be instantiated in the same Base Module Heat Orchestration Template + or in the same Incremental Module Heat Orchestration Template. + +.. req:: + :id: R-98748 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'allowed_address_pairs' + map property 'ip_address' parameter + **MUST** be declared as type 'string'. + +.. req:: + :id: R-41492 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an external network, + and an IPv4 Virtual IP (VIP) address is assigned via ONAP automation + using the property 'allowed_address_pairs' map property 'ip_address' and + the parameter name **MUST** follow the naming convention + + * '{vm-type}_{network-role}_floating_ip' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the external network + + And the parameter **MUST** be declared as type 'string'. + +.. req:: + :id: R-83412 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'allowed_address_pairs' + map property 'ip_address' parameter + '{vm-type}_{network-role}_floating_ip' + **MUST NOT** be enumerated in the + VNF's Heat Orchestration Template's Environment File. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_floating_ip: + type: string + description: IPv4 VIP for {vm-type} VMs on the {network-role} network + +.. req:: + :id: R-35735 + :target: VNF + :keyword: MUST + :test: no test found + :test_case: no test found + :test_file: no test found + + When the VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' is attaching to an external network, + and an IPv6 Virtual IP (VIP) address is assigned via ONAP automation + using the property 'allowed_address_pairs' map property 'ip_address', + the parameter name **MUST** follow the naming convention + + * '{vm-type}_{network-role}_v6_floating_ip' + + where + + * '{vm-type}' is the {vm-type} associated with the OS::Nova::Server + * '{network-role}' is the {network-role} of the external network + + And the parameter **MUST** be declared as type 'string'. + +.. req:: + :id: R-83418 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + The VNF's Heat Orchestration Template's Resource + 'OS::Neutron::Port' property 'allowed_address_pairs' + map property 'ip_address' parameter + '{vm-type}_{network-role}_floating_v6_ip' + **MUST NOT** be enumerated in the + VNF's Heat Orchestration Template's Environment File. + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + + {vm-type}_{network-role}_floating_v6_ip: + type: string + description: VIP for {vm-type} VMs on the {network-role} network + +Note that these parameters are **not** intended to represent an OpenStack +"Floating IP", for which OpenStack manages a pool of public IP +addresses that are mapped to specific VM ports. In that case, the +individual VMs are not even aware of the public IPs, and all assignment +of public IPs to VMs is via OpenStack commands. ONAP does not support +Neutron-style Floating IPs. That is, ONAP does not support the +resources 'OS::Neutron::FloatingIP' +and 'OS::Neutron::FloatingIPAssociation'. + + +.. req:: + :id: R-05257 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + A VNF's Heat Orchestration Template's **MUST NOT** + contain the Resource 'OS::Neutron::FloatingIP'. + +.. req:: + :id: R-76449 + :target: VNF + :keyword: MUST NOT + :test: no test found + :test_case: no test found + :test_file: no test found + + A VNF's Heat Orchestration Template's **MUST NOT** + contain the Resource 'OS::Neutron::FloatingIPAssociation'. + +The Floating IP functions as a NAT. They are allocated within +Openstack, and always "terminate" within the Openstack infrastructure. +When Openstack receives packets on a Floating IP, the packets will +be forwarded to the +Port that has been mapped to the Floating IP, using the private address of the +port. The VM never sees or knows about the Openstack Floating IP. +The process to use is: + + - User allocates a floating IP from the Openstack pool. + - User 'attaches' that floating IP to one of the VM ports. + +If there is a high-availability VNF that wants to "float" the IP to a +different VM, it requires a Neutron command to request Openstack to 'attach' +the floating IP to a different VM port. +The pool of such addresses is managed by Openstack infrastructure. +Users cannot create new ones, they can only choose from those in the pool. +The pool is typically global (i.e. any user/tenant can grab them). + +Allowed address pairs are for more typical Linux-level "virtual IPs". +They are additional IP addresses that are advertised by some port on the VM, +in addition to the primary private IP address. Typically in a +high-availability VNF, an additional IP is assigned and will float between +VMs (e.g., via some health-check app that will plumb the IP on one or other +VM). In order for this to work, the actual packets must be addressed to that +IP address (and the allowed_ip_address list will let it pass through +to the VM). This generally requires provider network access +(i.e. direct access to a data center network for the VMs), such that these +IPs can pass through all of the virtual routers. +Contrail also provides the enhanced networking that allows routing of such +additional IPs. + +Floating IPs are not used in ONAP due to the NAT-ting nature of the IPs, +the inability to reserve such IPs for specific use, the need to manage them +via Openstack commands (i.e. a HA VNF would require direct access to +Openstack to 'float' such an IP from one VM to another). + +*Example:* + +In this example, the {network-role} has been defined as oam to represent +an oam network and the {vm-type} has been defined as db for database. + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for the oam network + db_oam_ips: + type: comma_delimited_list + description: Fixed IPs for db VMs on the oam network + db_oam_floating_ip: + type: string + description: VIP IP for db VMs on the oam network + resources: + db_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [db_oam_ips,0] }}] + allowed_address_pairs: [ { "ip_address": {get_param: + db_oam_floating_ip}}] + db_1_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [db_oam_ips,1] }}] + allowed_address_pairs: [ { "ip_address": {get_param: + db_oam_floating_ip}}] + + +VIP Assignment, External Networks, Additional Options +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The parameter {'vm-type}_{network-role}_floating_ip' allows for only one +allowed address pair IPv4 address per '{vm-type}' and '{network-role}' +combination. + +The parameter '{vm-type}_{network-role}_floating_v6_ip' allows for only one +allowed address pair IPv6 address per '{vm-type}' and '{network-role}' +combination. + +If there is a need for multiple allowed address pair IPs for a given +{vm-type} and {network-role} combination within a VNF, there are two +options. + +**Option One** + +If there is a need for multiple allowed address pair IPs for a given +'{vm-type}' and '{network-role}' combination within a VNF, then the +parameter names defined for the Property 'fixed_ips' Map Property +'ip_address' should be used or the Property 'allowed_address_pairs' +Map Property 'ip_address'. The +parameter names are provided in the table below. + +.. csv-table:: **Table 5 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention** + :header: IP Address,Parameter Type,Parameter Name + :align: center + :widths: auto + + IPv4, string, {vm-type}_{network-role}_ip_{index} + IPv4, comma_delimited_list, {vm-type}_{network-role}_ips + IPv6, string, {vm-type}_{network-role}_v6_ip_{index} + IPv6, comma_delimited_list, {vm-type}_{network-role}_v6_ips + +The examples below illustrate this concept. + +*Example: A VNF has four load balancers. Each pair has a unique VIP.* + +In this example, there are two administrative VM pairs. Each pair has +one VIP. The {network-role} has been defined as oam to represent an oam +network and the {vm-type} has been defined as admin for an +administrative VM. + +Pair 1: Resources admin_0_port_0 and admin_1_port_0 share a unique VIP, +[admin_oam_ips,2] + +Pair 2: Resources admin_2_port_0 and admin_3_port_0 share a unique VIP, +[admin_oam_ips,5] + +.. code-block:: yaml + + parameters: + oam_net_id: + type: string + description: Neutron UUID for the oam network + admin_oam_ips: + type: comma_delimited_list + description: Fixed IP assignments for admin VMs on the oam network + + resources: + admin_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,0] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,2] + }}] + admin_1_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,1] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,2] + }}] + admin_2_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,3] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,5] + }}] + admin_3_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [admin_oam_ips,4] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [admin_oam_ips,5] + }}] + +*Example: A VNF has two load balancers. The pair of load balancers share +two VIPs.* + +In this example, there is one load balancer pairs. The pair has two +VIPs. The {network-role} has been defined as oam to represent an oam +network and the {vm-type} has been defined as lb for a load balancer VM. + +.. code-block:: yaml + + resources: + lb_0_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [lb_oam_ips,0] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [lb_oam_ips,2] }, + {get_param: [lb_oam_ips,3] }}] + lb_1_oam_port_0: + type: OS::Neutron::Port + properties: + network: { get_param: oam_net_id } + fixed_ips: [ { "ip_address": {get_param: [lb_oam_ips,1] }}] + allowed_address_pairs: [{ "ip_address": {get_param: [lb_oam_ips,2] }, + {get_param: [lb_oam_ips,3] }}] + +As a general rule, provide the fixed IPs for the VMs indexed first in +the CDL and then the VIPs as shown in the examples above. + +**Option Two** + +If there is a need for multiple allowed address pair IPs for a given +'{vm-type}' and '{network-role}' combination within a VNF, then the +parameter names defined for the table below can be used. + +**Resource OS::Neutron::Port** + +Table 6: Multiple allowed_address_pairs Option 2A + +.. csv-table:: **Table 6 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention** + :header: IP Address,Parameter Type,Parameter Name + :align: center + :widths: auto + + IPv4, string, {vm-type}_{network-role}_vip_{index} + IPv4, comma_delimited_list, {vm-type}_{network-role}_vips + IPv6, string, {vm-type}_{network-role}_v6_vip_{index} + IPv6, comma_delimited_list, {vm-type}_{network-role}_v6_vips + + +If there is a need for multiple allowed address pair IPs for a given +'{vm-type}' and '{network-role}' combination within a VNF and the need to +differentiate the VIPs for different traffic types (e.g., 911 VIP, +fail-over VIP), then the parameter names defined for the table below can +be used. + +**Resource OS::Neutron::Port** + +Table 7: Multiple allowed_address_pairs Option 2B + +.. csv-table:: **Table 7 OS::Neutron::Port Property allowed_address_pairs map property ip_address Parameter Naming Convention** + :header: IP Address,Parameter Type,Parameter Name + :align: center + :widths: auto + + IPv4, string, {vm-type}_{network-role}_{vip_type}_vip + IPv4, comma_delimited_list, {vm-type}_{network-role}_{vip_type}_vips + IPv6, string, {vm-type}_{network-role}_{vip_type}_v6_vip + IPv6, comma_delimited_list, {vm-type}_{network-role}_{vip_type}_v6_vips + +Internal Networks +~~~~~~~~~~~~~~~~~~~~~~~ + +ONAP defines an internal network in relation to +the VNF and not with regard to the Network Cloud site. Internal +networks may also be referred to as "intra-VNF" networks or "private" +networks. An internal network only connects VMs in a single VNF. It +must not connect to other VNFs or an external (to the cloud) gateway or an +external (to the cloud) router. + +ONAP internal networks should be created in the base module. + +As previously mentioned, +ports that connect to an internal network are assigned IP addresses +via one of two methods + + * Method 1: Cloud assigned by OpenStack's DHCP Service + * Method 2: Statically assigned. That is, predetermined by the VNF designer + and are specified in the VNF's Heat Orchestration Template's + Environment File + +If Cloud assigned IP addressing is being used, output statements +are created in the base module. + +If static assigned IP addressing is being used, the IP addresses +are defined in the environment file. + + + * {vm-type}_int_{network-role}_floating_ip + * {vm-type}_int_{network-role}_floating_v6_ip + + * {vm-type}_int_{network-role}_vip_{index} + * {vm-type}_int_{network-role}_vips + * {vm-type}_int_{network-role}_v6_vip_{index} + * {vm-type}_int_{network-role}_v6_vips + + * {vm-type}_int_{network-role}_{vip_type}_vip + * {vm-type}_int_{network-role}_{vip_type}_vips + * {vm-type}_int_{network-role}_{vip_type}_v6_vip + * {vm-type}_int_{network-role}_{vip_type}_v6_vips + +*Example Parameter Definition* + +.. code-block:: yaml + + parameters: + {vm-type}_int_{network-role}_floating_ip: + type: string + description: VIP for {vm-type} VMs on the int_{network-role} network + + {vm-type}_int_{network-role}_floating_v6_ip: + type: string + description: VIP for {vm-type} VMs on the int_{network-role} network + +allowed_address_pair IP Addresses Required in more than one module +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the IP address {vm-type}_{network-role}_floating_ip and/or +{vm-type}_{network-role}_floating_v6_ip must be used in more than module in the +VNF, the parameter values must be defined as output values in the base +module with output names: {vm-type}_{network-role}_shared_vip or +{vm-type}_{network-role}_v6_shared_vip + +.. code-block:: yaml + + outputs: + {vm-type}_{network-role}_shared_vip: + description: + value: { get_param: {vm-type}_{network-role}_floating_ip } + + {vm-type}_{network-role}_v6_shared_vip: + description: + value: { get_param: {vm-type}_{network-role}_v6_floating_ip } + +The output parameters must be defined as input parameter in the +incremental modules that require the IP addresses. When defining the +allowed_address_pairs: in the OS::Neutron::Port, it should be as +follows: + +.. code-block:: yaml + + allowed_address_pairs: [ { "ip_address": {get_param: + {vm-type}_{network-role}_shared_vip }}, { "ip_address": {get_param: + {vm-type}_{network-role}_v6_shared_vip }}] + +Reserve Port Concept +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A "Reserve Port" is an OS::Neutron::Port that fixed_ips, ip_address +property is assigned one or more IP addresses that are used as Virtual +IP (VIP) Addresses (i.e., allowed_address_pairs) on other ports. + +A "Reserve Port" is never attached to a Virtual Machine +(OS::Nova::Server). The reserve port ensures that the intended +allowed_address_pair IP address is not inadvertently assigned as a +fixed_ips to a OS::Neutron::Port that is attached OS::Nova::Server and +thus causing routing issues. + +A VNF may have one or more "Reserve Ports". A reserve port maybe created +in the base module or an incremental module. If created in the base +module, parameters may be defined in the outputs: section of the base +template so the IP Address assigned to the reserve port maybe assigned +to the allowed_address_pair property of an OS::Neutron::Port in one or +more incremental modules. + +The parameter name of the IP address used in the "Reserve Port" depends +on the allowed_address_pair "option" utilized by the VNF. + +When creating a Reserve Port, if only one allowed_address_pair is configured +on a port, then the parameter name depends upon the IP addresses type +(IPv4 or IPv6) and network type (internal or external). +The valid parameter names are: + + * {vm-type}_{network-role}_floating_ip + * {vm-type}_{network-role}_floating_v6_ip + * {vm-type}_int_{network-role}_floating_ip + * {vm-type}_int_{network-role}_floating_v6_ip + +When creating a Reserve Port, if more than one (e.g., multiple) +allowed_address_pair is configured on a port, then the parameter name depends +upon the IP addresses type (IPv4 or IPv6) and network type +(internal or external) and the option being used. The valid parameter +names are: + + * {vm-type}_{network-role}_ip_{index} + * {vm-type}_{network-role}_ips + * {vm-type}_{network-role}_v6_ip_{index} + * {vm-type}_{network-role}_v6_ips + * {vm-type}_{network-role}_vip_{index} + * {vm-type}_{network-role}_vips + * {vm-type}_{network-role}_v6_vip_{index} + * {vm-type}_{network-role}_v6_vips + * {vm-type}_{network-role}_{vip-type}_vip + * {vm-type}_{network-role}_v6_{vip-type}_vip + * {vm-type}_{network-role}_{vip-type}_vips + * {vm-type}_{network-role}_v6_{vip-type}_vips + +*Example IPv4 Reserve Port Definition: one allowed_address_pair +configured on a port* + +.. code-block:: yaml + + Reserve_Port_{vm-type}_{network-role}_floating_ip_{index}: + type: OS::Neutron::Port + properties: + network: { get_param: {network-role}_net_id } + fixed_ips: + - ip_address : { get_param: {vm-type}_{network-role}_floating_ip } + +*Example IPv6 Reserve Port Definition: one allowed_address_pair +configured on a port* + +.. code-block:: yaml + + Reserve_Port_{vm-type}_{network-role}_floating_v6_ip_{index}: + type: OS::Neutron::Port + properties: + network: { get_param: {network-role}_net_id } + fixed_ips: + - ip_address : { get_param: {vm-type}_{network-role}_floating_v6_ip } + |