8a31cadc24922697346d3cfdd366a5395d8311e9
[vnfrqts/requirements.git] / docs / Chapter5 / Heat / ONAP Heat Resource ID and Parameter Naming Convention / Contrail Resource Parameters.rst
1 .. Licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
4
5 Contrail Resource Parameters
6 ----------------------------------------------------------------------
7
8 ONAP requires the parameter names of certain Contrail Resources to
9 follow specific naming conventions. This section provides these
10 requirements.
11
12 Contrail Network Parameters
13 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14
15 Contrail based resources may require references to a Contrail network
16 using the network FQDN.
17
18 External Networks
19 ~~~~~~~~~~~~~~~~~~~~~~~~~
20
21 .. req::
22     :id: R-02164
23     :target: VNF
24     :keyword: MUST
25     :validation_mode: static
26     :updated: casablanca
27
28     When a VNF's Heat Orchestration Template's Contrail resource
29     has a property that
30     references an external network that requires the network's
31     Fully Qualified Domain Name (FQDN), the property parameter
32
33     * **MUST** follow the format ``{network-role}_net_fqdn``
34     * **MUST** be declared as type ``string``
35     * **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
36       Environment File
37
38 .. req::
39     :id: R-92193
40     :target: VNF
41     :keyword: MUST NOT
42     :validation_mode: static
43
44     A VNF's Heat Orchestration Template's parameter
45     ``{network-role}_net_fqdn``
46     **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
47     Environment File.
48
49 *Example: Parameter declaration*
50
51 .. code-block:: yaml
52
53   parameters:
54     {network-role}_net_fqdn:
55       type: string
56       description: Contrail FQDN for the {network-role} network
57
58 *Example: Contrail Resource OS::ContrailV2::VirtualMachineInterface
59 Reference to a Network FQDN.*
60
61 In this example, the {network-role} has been defined as oam to represent
62 an oam network and the {vm-type} has been defined as fw for firewall.
63 The Contrail resource OS::ContrailV2::VirtualMachineInterface property
64 virtual_network_refs references a contrail network FQDN.
65
66 .. code-block:: yaml
67
68   fw_0_oam_vmi_0:
69     type: OS::ContrailV2::VirtualMachineInterface
70     properties:
71       name:
72         str_replace:
73           template: VM_NAME_virtual_machine_interface_1
74           params:
75             VM_NAME: { get_param: fw_name_0 }
76       virtual_machine_interface_properties:
77         virtual_machine_interface_properties_service_interface_type: {
78         get_param: oam_protected_interface_type }
79       virtual_network_refs:
80         - get_param: oam_net_fqdn
81       security_group_refs:
82         - get_param: fw_sec_grp_id
83
84 Interface Route Table Prefixes for Contrail InterfaceRoute Table
85 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
86
87 .. req::
88     :id: R-28222
89     :target: VNF
90     :keyword: MUST
91     :validation_mode: static
92     :updated: casablanca
93
94     If a VNF's Heat Orchestration Template
95     ``OS::ContrailV2::InterfaceRouteTable`` resource
96     ``interface_route_table_routes`` property
97     ``interface_route_table_routes_route`` map property parameter name
98     **MUST** follow the format
99
100     * ``{vm-type}_{network-role}_route_prefixes``
101
102 .. req::
103     :id: R-19756
104     :target: VNF
105     :keyword: MUST
106     :validation_mode: static
107     :updated: casablanca
108
109     If a VNF's Heat Orchestration Template
110     ``OS::ContrailV2::InterfaceRouteTable`` resource
111     ``interface_route_table_routes`` property
112     ``interface_route_table_routes_route`` map property parameter
113     ``{vm-type}_{network-role}_route_prefixes``
114     **MUST** be defined as type ``json``.
115
116 .. req::
117     :id: R-76682
118     :target: VNF
119     :keyword: MUST NOT
120     :validation_mode: static
121     :updated: casablanca
122
123     If a VNF's Heat Orchestration Template
124     ``OS::ContrailV2::InterfaceRouteTable`` resource
125     ``interface_route_table_routes`` property
126     ``interface_route_table_routes_route`` map property parameter
127     ``{vm-type}_{network-role}_route_prefixes``
128     **MUST NOT** be enumerated in the VNF's Heat Orchestration Template's
129     Environment File.
130
131 The parameter ``{vm-type}_{network-role}_route_prefixes``
132 supports IP addresses in the format:
133
134 1. Host IP Address (e.g., 10.10.10.10)
135
136 2. CIDR Notation format (e.g., 10.0.0.0/28)
137
138
139 *Example Parameter Definition*
140
141 .. code-block:: yaml
142
143   parameters:
144     {vm-type}_{network-role}_route_prefixes:
145       type: json
146       description: JSON list of Contrail Interface Route Table route prefixes
147
148 *Example:*
149
150 .. code-block:: yaml
151
152   parameters:
153     vnf_name:
154       type: string
155       description: Unique name for this VF instance
156     fw_oam_route_prefixes:
157       type: json
158       description: prefix for the ServiceInstance InterfaceRouteTable
159     int_fw_dns_trusted_interface_type:
160       type: string
161       description: service_interface_type for ServiceInstance
162
163   resources:
164     <resource name>:
165       type: OS::ContrailV2::InterfaceRouteTable
166       depends_on: [resource name of OS::ContrailV2::ServiceInstance]
167       properties:
168         name:
169           str_replace:
170             template: VNF_NAME_interface_route_table
171             params:
172               VNF_NAME: { get_param: vnf_name }
173         interface_route_table_routes:
174           interface_route_table_routes_route: { get_param: fw_oam_route_prefixes }
175         service_instance_refs:
176           - get_resource: <resource name of OS::ContrailV2::ServiceInstance>
177         service_instance_refs_data:
178           - service_instance_refs_data_interface_type: { get_param: oam_interface_type }
179
180
181 Resource OS::ContrailV2::InstanceIp
182 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
183
184 The Contrail resource ``OS::ContrailV2::InstanceIp`` has two properties
185 that parameters **MUST** follow an explicit naming convention.  The
186 properties are ``instance_ip_address`` and ``subnet_uuid``.
187
188 *Example OS::ContrailV2::InstanceIp Resource*
189
190 .. code-block:: yaml
191
192   <resource ID>:
193     type: OS::ContrailV2::InstanceIp
194     properties:
195       name: { get_param: name }
196       fq_name: { get_param: fq_name }
197       display_name: { get_param: display_name }
198       secondary_ip_tracking_ip:
199         {
200           secondary_ip_tracking_ip_ip_prefix: { get_param: secondary_ip_tracking_ip_ip_prefix },
201           secondary_ip_tracking_ip_ip_prefix_len: { get_param: secondary_ip_tracking_ip_ip_prefix_len },
202         }
203       instance_ip_address: { get_param: instance_ip_address }
204       instance_ip_mode: { get_param: instance_ip_mode }
205       subnet_uuid: { get_param: subnet_uuid }
206       instance_ip_family: { get_param: instance_ip_family }
207       annotations:
208         {
209           annotations_key_value_pair:
210             [{
211               annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
212               annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
213             }],
214         }
215       instance_ip_local_ip: { get_param: instance_ip_local_ip }
216       instance_ip_secondary: { get_param: instance_ip_secondary }
217       physical_router_refs: [{ get_param: physical_router_refs }]
218       virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
219       virtual_network_refs: [{ get_param: virtual_network_refs }]
220
221
222 Resource OS::ContrailV2::InstanceIp Property instance_ip_address
223 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
224
225 A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp``
226 property ``instance_ip_address`` parameter
227 **MUST** follow the same requirements
228 that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map
229 property ``ip_address`` parameter.
230
231
232 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
233 instance_ip_address*
234
235 The property instance_ip_address uses the same parameter naming
236 convention as the property fixed_ips and Map Property ip_address in
237 OS::Neutron::Port. The resource is assigning an ONAP SDN-C Assigned IP
238 Address. The {network-role} has been defined as oam_protected to
239 represent an oam protected network and the {vm-type} has been defined as
240 fw for firewall.
241
242 .. code-block:: yaml
243
244   fw_0_oam_protected_vmi_0_IP_0:
245     type: OS::ContrailV2::InstanceIp
246     depends_on:
247       - fw_0_oam_protected_vmi_0
248     properties:
249       virtual_machine_interface_refs:
250         - get_resource: fw_0_oam_protected_vmi_0
251       virtual_network_refs:
252         - get_param: oam_protected_net_fqdn
253       instance_ip_address: { get_param: [fw_oam_protected_ips, get_param: index ] }
254
255 Resource OS::ContrailV2::InstanceIp Property subnet_uuid
256 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
257
258 A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp``
259 property ``subnet_uuid`` parameter
260 **MUST** follow the same requirements
261 that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map
262 property ``subnet``/``subnet_id`` parameter.
263
264 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
265 subnet_uuid*
266
267 The property instance_ip_address uses the same parameter naming
268 convention as the property fixed_ips and Map Property subnet_id in
269 OS::Neutron::Port. The resource is assigning a cloud assigned IP
270 Address. The {network-role} has been defined as "oam_protected" to
271 represent an oam protected network and the {vm-type} has been defined as
272 "fw" for firewall.
273
274 .. code-block:: yaml
275
276   fw_0_oam_protected_vmi_0_IP_0:
277     type: OS::ContrailV2::InstanceIp
278     depends_on:
279     - fw_0_oam_protected_vmi_0
280     properties:
281       virtual_machine_interface_refs:
282         - get_resource: fw_0_oam_protected_vmi_0
283       virtual_network_refs:
284         - get_param: oam_protected_net_fqdn
285       subnet_uuid: { get_param: oam_protected_subnet_id }
286
287 OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs
288 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
289
290 A VNF's Heat Orchestration Templates resource
291 ``OS::ContrailV2::VirtualMachineInterface`` map property,
292 ``virtual_machine_interface_allowed_address_pairs,
293 virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
294 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
295 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
296 parameter **MUST** follow the same requirements that apply to the
297 resource ``OS::Neutron::Port`` property
298 ``allowed_address_pairs``, map property ``ip_address`` parameter.
299
300 *Example OS::ContrailV2::VirtualMachineInterface*
301
302 .. code-block:: yaml
303
304   <resource ID>:
305     type: OS::ContrailV2::VirtualMachineInterface
306     properties:
307       name: { get_param: name }
308       fq_name: { get_param: fq_name }
309       ecmp_hashing_include_fields:
310         {
311           ecmp_hashing_include_fields_hashing_configured: { get_param: ecmp_hashing_include_fields_hashing_configured },
312           ecmp_hashing_include_fields_source_ip: { get_param: ecmp_hashing_include_fields_source_ip },
313           ecmp_hashing_include_fields_destination_ip: { get_param: ecmp_hashing_include_fields_destination_ip },
314           ecmp_hashing_include_fields_ip_protocol: { get_param: ecmp_hashing_include_fields_ip_protocol },
315           ecmp_hashing_include_fields_source_port: { get_param: ecmp_hashing_include_fields_source_port },
316           ecmp_hashing_include_fields_destination_port: { get_param: ecmp_hashing_include_fields_destination_port },
317         }
318       virtual_machine_interface_host_routes:
319         {
320           virtual_machine_interface_host_routes_route:
321             [{
322               virtual_machine_interface_host_routes_route_prefix: { get_param: virtual_machine_interface_host_routes_route_prefix },
323               virtual_machine_interface_host_routes_route_next_hop: { get_param: virtual_machine_interface_host_routes_route_next_hop },
324               virtual_machine_interface_host_routes_route_next_hop_type: { get_param: virtual_machine_interface_host_routes_route_next_hop_type },
325               virtual_machine_interface_host_routes_route_community_attributes:
326                 {
327                   virtual_machine_interface_host_routes_route_community_attributes_community_attribute: [{ get_param: virtual_machine_interface_host_routes_route_community_attributes_community_attribute }],
328                 },
329             }],
330         }
331       virtual_machine_interface_mac_addresses:
332         {
333           virtual_machine_interface_mac_addresses_mac_address: [{ get_param: virtual_machine_interface_mac_addresses_mac_address }],
334         }
335       virtual_machine_interface_dhcp_option_list:
336         {
337           virtual_machine_interface_dhcp_option_list_dhcp_option:
338             [{
339               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name },
340               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value },
341               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 },
342             }],
343         }
344       virtual_machine_interface_bindings:
345         {
346           virtual_machine_interface_bindings_key_value_pair:
347             [{
348               virtual_machine_interface_bindings_key_value_pair_key: { get_param: virtual_machine_interface_bindings_key_value_pair_key },
349               virtual_machine_interface_bindings_key_value_pair_value: { get_param: virtual_machine_interface_bindings_key_value_pair_value },
350             }],
351         }
352       virtual_machine_interface_disable_policy: { get_param: virtual_machine_interface_disable_policy }
353       virtual_machine_interface_allowed_address_pairs:
354         {
355           virtual_machine_interface_allowed_address_pairs_allowed_address_pair:
356             [{
357               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip:
358                 {
359                   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 },
360                   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 },
361                 },
362               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac },
363               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode },
364             }],
365         }
366       annotations:
367         {
368           annotations_key_value_pair:
369             [{
370               annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
371               annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
372             }],
373         }
374       virtual_machine_interface_fat_flow_protocols:
375         {
376           virtual_machine_interface_fat_flow_protocols_fat_flow_protocol:
377             [{
378               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol },
379               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port },
380             }],
381         }
382       virtual_machine_interface_device_owner: { get_param: virtual_machine_interface_device_owner }
383       port_security_enabled: { get_param: port_security_enabled }
384       virtual_machine_interface_properties:
385         {
386           virtual_machine_interface_properties_service_interface_type: { get_param: virtual_machine_interface_properties_service_interface_type },
387           virtual_machine_interface_properties_interface_mirror:
388             {
389               virtual_machine_interface_properties_interface_mirror_traffic_direction: { get_param: virtual_machine_interface_properties_interface_mirror_traffic_direction },
390               virtual_machine_interface_properties_interface_mirror_mirror_to:
391                 {
392                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name },
393                   virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation },
394                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address },
395                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address },
396                   virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance },
397                   virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port },
398                   virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header },
399                   virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode },
400                   virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header:
401                     {
402                       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 },
403                       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 },
404                       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 },
405                     },
406                 },
407             },
408           virtual_machine_interface_properties_local_preference: { get_param: virtual_machine_interface_properties_local_preference },
409           virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: virtual_machine_interface_properties_sub_interface_vlan_tag },
410         }
411       display_name: { get_param: display_name }
412       service_health_check_refs: [{ get_param: service_health_check_refs }]
413       routing_instance_refs: [{ get_param: routing_instance_refs }]
414       routing_instance_refs_data:
415         [{
416           routing_instance_refs_data_direction: { get_param: routing_instance_refs_data_direction },
417           routing_instance_refs_data_vlan_tag: { get_param: routing_instance_refs_data_vlan_tag },
418           routing_instance_refs_data_src_mac: { get_param: routing_instance_refs_data_src_mac },
419           routing_instance_refs_data_dst_mac: { get_param: routing_instance_refs_data_dst_mac },
420           routing_instance_refs_data_mpls_label: { get_param: routing_instance_refs_data_mpls_label },
421           routing_instance_refs_data_service_chain_address: { get_param: routing_instance_refs_data_service_chain_address },
422           routing_instance_refs_data_ipv6_service_chain_address: { get_param: routing_instance_refs_data_ipv6_service_chain_address },
423           routing_instance_refs_data_protocol: { get_param: routing_instance_refs_data_protocol },
424         }]
425       security_group_refs: [{ get_param: security_group_refs }]
426       physical_interface_refs: [{ get_param: physical_interface_refs }]
427       port_tuple_refs: [{ get_param: port_tuple_refs }]
428       interface_route_table_refs: [{ get_param: interface_route_table_refs }]
429       virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
430       virtual_network_refs: [{ get_param: virtual_network_refs }]
431       virtual_machine_refs: [{ get_param: virtual_machine_refs }]
432       qos_config_refs: [{ get_param: qos_config_refs }]
433       virtual_machine: { get_param: virtual_machine }
434       project: { get_param: project }