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