a9929ce2c6e874597eccff23e8b3b4d31ccb8064
[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     :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
226 The Contrail resource ``OS::ContrailV2::InstanceIp`` has two properties
227 that parameters **MUST** follow an explicit naming convention.  The
228 properties are ``instance_ip_address`` and ``subnet_uuid``.
229
230 *Example OS::ContrailV2::InstanceIp Resource*
231
232 .. code-block:: yaml
233
234   <resource ID>:
235     type: OS::ContrailV2::InstanceIp
236     properties:
237       name: { get_param: name }
238       fq_name: { get_param: fq_name }
239       display_name: { get_param: display_name }
240       secondary_ip_tracking_ip:
241         {
242           secondary_ip_tracking_ip_ip_prefix: { get_param: secondary_ip_tracking_ip_ip_prefix },
243           secondary_ip_tracking_ip_ip_prefix_len: { get_param: secondary_ip_tracking_ip_ip_prefix_len },
244         }
245       instance_ip_address: { get_param: instance_ip_address }
246       instance_ip_mode: { get_param: instance_ip_mode }
247       subnet_uuid: { get_param: subnet_uuid }
248       instance_ip_family: { get_param: instance_ip_family }
249       annotations:
250         {
251           annotations_key_value_pair:
252             [{
253               annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
254               annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
255             }],
256         }
257       instance_ip_local_ip: { get_param: instance_ip_local_ip }
258       instance_ip_secondary: { get_param: instance_ip_secondary }
259       physical_router_refs: [{ get_param: physical_router_refs }]
260       virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
261       virtual_network_refs: [{ get_param: virtual_network_refs }]
262
263
264
265 A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp``
266 property ``instance_ip_address`` parameter
267 **MUST** follow the same requirements
268 that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map
269 property ``ip_address`` parameter.
270
271
272 .. req::
273     :id: R-100000
274     :keyword: MUST
275     :validation_mode: static
276     :target: VNF
277     :introduced: dublin
278
279     The VNF's Heat Orchestration Template's
280     resource ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
281     parameter
282     **MUST** be declared as either type ``string`` or type
283     ``comma_delimited_list``.
284
285
286 .. req::
287     :id: R-100010
288     :keyword: MUST
289     :introduced: dublin
290     :validation_mode: static
291     :target: VNF
292
293     When the VNF's Heat Orchestration Template's Resource
294     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
295     to an external network (per the ONAP definition, see Requirement R-57424),
296     and an IPv4 address is assigned
297     using the property ``instance_ip_address``
298     and the parameter type is defined as a string,
299     the parameter name **MUST** follow the
300     naming convention
301
302     * ``{vm-type}_{network-role}_ip_{index}``
303
304     where
305
306     * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
307     * ``{network-role}`` is the {network-role} of the external network
308     * ``{index}`` is a numeric value that **MUST** start at zero in a
309       VNF's Heat Orchestration Template and **MUST** increment by one
310
311
312 .. req::
313     :id: R-100020
314     :keyword: MUST NOT
315     :validation_mode: static
316     :target: VNF
317     :introduced: dublin
318
319     The VNF's Heat Orchestration Template's Resource
320     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
321     parameter
322     ``{vm-type}_{network-role}_ip_{index}``
323     **MUST NOT** be enumerated in the
324     VNF's Heat Orchestration Template's Environment File.
325
326 ONAP's SDN-Controller assigns the IP Address and ONAP provides
327 the value at orchestration to the Heat Orchestration Template.
328
329 *Example External Network IPv4 Address string Parameter Definition*
330
331 .. code-block:: yaml
332
333   parameters:
334
335     {vm-type}_{network-role}_ip_{index}:
336       type: string
337       description: Fixed IPv4 assignment for {vm-type} VM {index} on the {network-role} network
338
339
340
341 .. req::
342     :id: R-100030
343     :keyword: MUST
344     :validation_mode: static
345     :target: VNF
346     :introduced: dublin
347
348     When the VNF's Heat Orchestration Template's Resource
349     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
350     to an external network (per the
351     ONAP definition, see Requirement R-57424),
352     and an IPv4 address is assigned
353     using the property ``instance_ip_address``
354     and the parameter type is defined as a
355     ``comma_delimited_list``,
356     the parameter name **MUST** follow the
357     naming convention
358
359       * ``{vm-type}_{network-role}_ips``
360
361       where
362
363       * ``{vm-type}`` is the {vm-type} associated with the
364         ``OS::Nova::Server``
365       * ``{network-role}`` is the {network-role} of the external
366         network
367
368
369
370 .. req::
371     :id: R-100040
372     :keyword: MUST NOT
373     :validation_mode: static
374     :target: VNF
375     :introduced: dublin
376
377     The VNF's Heat Orchestration Template's Resource
378     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
379     parameter
380     ``{vm-type}_{network-role}_ips``
381     **MUST NOT** be enumerated in the
382     VNF's Heat Orchestration Template's Environment File.
383
384 ONAP's SDN-Controller assigns the IP Address and ONAP provides
385 the value at orchestration to the Heat Orchestration Template.
386
387 *Example External Network IPv4 Address comma_delimited_list
388 Parameter Definition*
389
390 .. code-block:: yaml
391
392   parameters:
393
394     {vm-type}_{network-role}_ips:
395       type: comma_delimited_list
396       description: Fixed IPv4 assignments for {vm-type} VMs on the {network-role} network
397
398
399
400 .. req::
401     :id: R-100050
402     :keyword: MUST
403     :introduced: dublin
404     :validation_mode: static
405     :target: VNF
406
407     When the VNF's Heat Orchestration Template's Resource
408     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
409     to an external network
410     (per the
411     ONAP definition, see Requirement R-57424),
412     and an IPv6 address is assigned
413     using the property ``instance_ip_address``
414     and the parameter type is defined as a string,
415     the parameter name **MUST** follow the
416     naming convention
417
418     * ``{vm-type}_{network-role}_v6_ip_{index}``
419
420     where
421
422     * ``{vm-type}`` is the {vm-type} associated with the
423       ``OS::Nova::Server``
424     * ``{network-role}`` is the {network-role} of the external network
425     * ``{index}`` is a numeric value that **MUST** start at zero in a
426       VNF's Heat Orchestration Template and **MUST** increment by one
427
428
429 .. req::
430     :id: R-100060
431     :keyword: MUST NOT
432     :validation_mode: static
433     :introduced: dublin
434     :target: VNF
435
436     The VNF's Heat Orchestration Template's Resource
437     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
438     parameter
439     ``{vm-type}_{network-role}_v6_ip_{index}``
440     **MUST NOT** be enumerated in the
441     VNF's Heat Orchestration Template's Environment File.
442
443 ONAP's SDN-Controller assigns the IP Address and ONAP provides
444 the value at orchestration to the Heat Orchestration Template.
445
446 *Example External Network IPv6 Address string Parameter Definition*
447
448 .. code-block:: yaml
449
450   parameters:
451
452     {vm-type}_{network-role}_v6_ip_{index}:
453       type: string
454       description: Fixed IPv6 assignment for {vm-type} VM {index} on the {network-role} network
455
456
457
458 .. req::
459     :id: R-100070
460     :keyword: MUST
461     :validation_mode: static
462     :introduced: dublin
463     :target: VNF
464
465     When the VNF's Heat Orchestration Template's Resource
466     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
467     to an external network (per the
468     ONAP definition, see Requirement R-57424),
469     and an IPv6 address is assigned
470     using the property ``instance_ip_address``
471     and the parameter type is defined as a
472     ``comma_delimited_list``,
473     the parameter name **MUST** follow the
474     naming convention
475
476       * ``{vm-type}_{network-role}_v6_ips``
477
478     where
479
480       * ``{vm-type}`` is the {vm-type} associated with the
481         OS::Nova::Server
482       * ``{network-role}`` is the {network-role} of the external
483         network
484
485
486
487 .. req::
488     :id: R-100080
489     :keyword: MUST NOT
490     :validation_mode: static
491     :introduced: dublin
492     :target: VNF
493
494     The VNF's Heat Orchestration Template's Resource
495     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
496     parameter
497     ``{vm-type}_{network-role}_v6_ips``
498     **MUST NOT** be enumerated in the
499     VNF's Heat Orchestration Template's Environment File.
500
501 ONAP's SDN-Controller assigns the IP Address and ONAP provides
502 the value at orchestration to the Heat Orchestration Template.
503
504 *Example External Network IPv6 Address comma_delimited_list Parameter
505 Definition*
506
507 .. code-block:: yaml
508
509   parameters:
510
511     {vm-type}_{network-role}_v6_ips:
512       type: comma_delimited_list
513       description: Fixed IPv6 assignments for {vm-type} VMs on the {network-role} network
514
515
516
517 .. req::
518     :id: R-100090
519     :keyword: MUST
520     :introduced: dublin
521     :validation_mode: static
522     :target: VNF
523
524     When the VNF's Heat Orchestration Template's Resource
525     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
526     to an internal network (per the
527     ONAP definition, see Requirements R-52425 and R-46461),
528     and an IPv4 address is assigned
529     using the property ``instance_ip_address``
530     and the parameter type is
531     defined as a ``string``,
532     the parameter name **MUST** follow the
533     naming convention
534
535     * ``{vm-type}_int_{network-role}_ip_{index}``
536
537     where
538
539     * ``{vm-type}`` is the {vm-type} associated with the
540       ``OS::Nova::Server``
541     * ``{network-role}`` is the {network-role} of the internal network
542     * ``{index}`` is a numeric value that **MUST** start at zero in a
543       VNF's Heat Orchestration Template and **MUST** increment by one
544
545
546
547 .. req::
548     :id: R-100100
549     :keyword: MUST
550     :validation_mode: static
551     :target: VNF
552     :introduced: dublin
553
554     The VNF's Heat Orchestration Template's Resource
555     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
556     parameter
557     ``{vm-type}_int_{network-role}_ip_{index}``
558     **MUST** be enumerated in the
559     VNF's Heat Orchestration Template's Environment File.
560
561 The IP address is local to the VNF's internal network and is (re)used
562 in every VNF spin up, thus the constant value is declared in the VNF's
563 Heat Orchestration Template's Environment File.
564
565 *Example Internal Network IPv4 Address string Parameter Definition*
566
567 .. code-block:: yaml
568
569   parameters:
570
571     {vm-type}_int_{network-role}_ip_{index}:
572       type: string
573       description: Fixed IPv4 assignment for {vm-type} VM {index} on the int_{network-role} network
574
575
576
577 .. req::
578     :id: R-100110
579     :keyword: MUST
580     :validation_mode: static
581     :target: VNF
582     :introduced: dublin
583
584     When the VNF's Heat Orchestration Template's Resource
585     ``OS::ContrailV2::InstanceIp`` is assigning an IP address
586     to an internal network (per the
587     ONAP definition, see Requirements R-52425 and R-46461),
588     and an IPv4 address is assigned
589     using the property ``instance_ip_address``
590     and the parameter type is defined as a
591     ``comma_delimited_list``,
592     the parameter name **MUST** follow the
593     naming convention
594
595       * ``{vm-type}_int_{network-role}_ips``
596
597     where
598
599       * ``{vm-type}`` is the {vm-type} associated with the
600         ``OS::Nova::Server``
601       * ``{network-role}`` is the {network-role} of the internal
602         network
603
604
605 .. req::
606     :id: R-100120
607     :keyword: MUST
608     :validation_mode: static
609     :target: VNF
610     :introduced: dublin
611
612     The VNF's Heat Orchestration Template's Resource
613     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
614     parameter
615     ``{vm-type}_int_{network-role}_int_ips``
616     **MUST** be enumerated in the
617     VNF's Heat Orchestration Template's Environment File.
618
619 The IP address is local to the VNF's internal network and is (re)used
620 in every VNF spin up, thus the constant value is declared in the VNF's
621 Heat Orchestration Template's Environment File.
622
623 *Example Internal Network IPv4 Address comma_delimited_list
624 Parameter Definition*
625
626 .. code-block:: yaml
627
628   parameters:
629
630     {vm-type}_int_{network-role}_ips:
631       type: comma_delimited_list
632       description: Fixed IPv4 assignments for {vm-type} VMs on the int_{network-role} network
633
634
635
636 .. req::
637     :id: R-100130
638     :keyword: MUST
639     :introduced: dublin
640     :validation_mode: static
641     :target: VNF
642
643     When the VNF's Heat Orchestration Template's Resource
644     ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an
645     internal network (per the
646     ONAP definition, see Requirements R-52425 and R-46461),
647     and an IPv6 address is assigned
648     using the property ``instance_ip_address``
649     and the parameter type is defined as a
650     ``string``,
651     the parameter name **MUST** follow the
652     naming convention
653
654     * ``{vm-type}_int_{network-role}_v6_ip_{index}``
655
656     where
657
658     * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
659     * ``{network-role}`` is the {network-role} of the internal network
660     * ``{index}`` is a numeric value that **MUST** start at zero in a
661       VNF's Heat Orchestration Template and **MUST** increment by one
662
663
664
665 .. req::
666     :id: R-100140
667     :keyword: MUST
668     :validation_mode: static
669     :target: VNF
670     :introduced: dublin
671
672     The VNF's Heat Orchestration Template's Resource
673     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
674     parameter
675     ``{vm-type}_int_{network-role}_v6_ip_{index}``
676     **MUST** be enumerated in the
677     VNF's Heat Orchestration Template's Environment File.
678
679 The IP address is local to the VNF's internal network and is (re)used
680 in every VNF spin up, thus the constant value is declared in the VNF's
681 Heat Orchestration Template's Environment File.
682
683 *Example Internal Network IPv6 Address string Parameter Definition*
684
685 .. code-block:: yaml
686
687   parameters:
688
689     {vm-type}_int_{network-role}_v6_ip_{index}:
690       type: string
691       description: Fixed IPv6 assignment for {vm-type} VM {index} on the int_{network-role} network
692
693
694
695 .. req::
696     :id: R-100150
697     :keyword: MUST
698     :validation_mode: static
699     :target: VNF
700     :introduced: dublin
701
702     When the VNF's Heat Orchestration Template's Resource
703     ``OS::ContrailV2::InstanceIp`` is assigning an IP address to an
704     internal network (per the
705     ONAP definition, see Requirements R-52425 and R-46461),
706     and an IPv6 address is assigned
707     using the property ``instance_ip_address``
708     and the parameter type is defined as a
709     ``comma_delimited_list``,
710     the parameter name **MUST** follow the
711     naming convention
712
713       * ``{vm-type}_int_{network-role}_v6_ips``
714
715     where
716
717       * ``{vm-type}`` is the {vm-type} associated with the
718         ``OS::Nova::Server``
719       * ``{network-role}`` is the {network-role} of the internal
720         network
721
722
723 .. req::
724     :id: R-100160
725     :keyword: MUST
726     :validation_mode: static
727     :target: VNF
728     :introduced: dublin
729
730     The VNF's Heat Orchestration Template's Resource
731     ``OS::ContrailV2::InstanceIp`` property ``instance_ip_address``
732     map property ``ip_address`` parameter
733     ``{vm-type}_int_{network-role}_v6_ips``
734     **MUST** be enumerated in the
735     VNF's Heat Orchestration Template's Environment File.
736
737 The IP address is local to the VNF's internal network and is (re)used
738 in every VNF spin up, thus the constant value is declared in the VNF's
739 Heat Orchestration Template's Environment File.
740
741 *Example Internal Network IPv6 Address comma_delimited_list Parameter
742 Definition*
743
744
745 .. code-block:: yaml
746
747   parameters:
748
749     {vm-type}_int_{network-role}_v6_ips:
750       type: comma_delimited_list
751       description: Fixed IPv6 assignments for {vm-type} VMs on the int_{network-role} network
752
753
754 .. req::
755     :id: R-100170
756     :keyword: MUST NOT
757     :validation_mode: static
758     :target: VNF
759     :introduced: dublin
760
761     The VNF's Heat Orchestration Template's Resource
762     ``OS::ContrailV2::InstanceIp``
763     property ``instance_ip_address``
764     parameter associated with an external network, i.e.,
765
766      * ``{vm-type}_{network-role}_ip_{index}``
767      * ``{vm-type}_{network-role}_v6_ip_{index}``
768      * ``{vm-type}_{network-role}_ips``
769      * ``{vm-type}_{network-role}_v6_ips``
770
771
772     **MUST NOT** be enumerated in the Heat Orchestration
773     Template's Environment File.  ONAP provides the IP address
774     assignments at orchestration time.
775
776
777
778 .. req::
779     :id: R-100180
780     :keyword: MUST
781     :validation_mode: static
782     :target: VNF
783     :introduced: dublin
784
785     The VNF's Heat Orchestration Template's Resource
786     ``OS::ContrailV2::InstanceIp``
787     property ``instance_ip_address``
788     parameter associated with an internal network, i.e.,
789
790      * ``{vm-type}_int_{network-role}_ip_{index}``
791      * ``{vm-type}_int_{network-role}_v6_ip_{index}``
792      * ``{vm-type}_int_{network-role}_ips``
793      * ``{vm-type}_int_{network-role}_v6_ips``
794
795
796     **MUST** be enumerated in the Heat Orchestration
797     Template's Environment File and IP addresses **MUST** be
798     assigned.
799
800
801 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
802 instance_ip_address*
803
804 The property instance_ip_address uses the same parameter naming
805 convention as the property fixed_ips and Map Property ip_address in
806 OS::Neutron::Port. The resource is assigning an ONAP SDN-C Assigned IP
807 Address. The {network-role} has been defined as oam_protected to
808 represent an oam protected network and the {vm-type} has been defined as
809 fw for firewall.
810
811 .. code-block:: yaml
812
813   fw_0_oam_protected_vmi_0_IP_0:
814     type: OS::ContrailV2::InstanceIp
815     depends_on:
816       - fw_0_oam_protected_vmi_0
817     properties:
818       virtual_machine_interface_refs:
819         - get_resource: fw_0_oam_protected_vmi_0
820       virtual_network_refs:
821         - get_param: oam_protected_net_fqdn
822       instance_ip_address: { get_param: [fw_oam_protected_ips, get_param: index ] }
823
824
825 Resource OS::ContrailV2::InstanceIp Property subnet_uuid
826 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
827
828 A VNF's Heat Orchestration Templates resource ``OS::ContrailV2::InstanceIp``
829 property ``subnet_uuid`` parameter
830 **MUST** follow the same requirements
831 that apply to the resource ``OS::Neutron`` property ``fixed_ips`` map
832 property ``subnet`` parameter.
833
834 The resource ``OS::ContrailV2::InstanceIp`` property
835 ``subnet_uuid`` parameter is used when a
836 port is requesting an IP assignment via
837 OpenStack's DHCP Service (i.e., cloud assigned).
838
839 The IP address assignment will be made from the specified subnet.
840
841 Specifying the subnet is not required; it is optional.
842
843 If the network (external or internal) that the port is attaching
844 to only contains one subnet, specifying the subnet is
845 superfluous.  The IP address will be assigned from the one existing
846 subnet.
847
848 If the network (external or internal) that the port is attaching
849 to contains two or more subnets, specifying the subnet in the
850 ``instance_ip_address`` property determines which
851 subnet the IP address will be assigned from.
852
853 If the network (external or internal) that the port is attaching
854 to contains two or more subnets, and the subnet is not is not
855 specified, OpenStack will randomly determine which subnet
856 the IP address will be assigned from.
857
858 The property ``instance_ip_address`` is used to assign IPs to a port.
859 The property ``subnet_uuid`` specifies the subnet the IP is assigned from.
860
861
862 .. req::
863     :id: R-100190
864     :keyword: MUST
865     :validation_mode: static
866     :target: VNF
867     :introduced: dublin
868
869     The VNF's Heat Orchestration Template's
870     resource ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
871     parameter
872     **MUST** be declared type ``string``.
873
874
875 .. req::
876     :id: R-100200
877     :keyword: MUST
878     :validation_mode: static
879     :target: VNF
880     :introduced: dublin
881
882     When the VNF's Heat Orchestration Template's
883     resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address
884     to an external network (per the ONAP definition, see
885     Requirement R-57424),
886     and an IPv4 address is being cloud assigned by OpenStack's DHCP Service
887     and the external network IPv4 subnet is to be specified
888     using the property ``subnet_uuid``, the parameter
889     **MUST** follow the naming convention
890
891       * ``{network-role}_subnet_id``
892
893     where
894
895       * ``{network-role}`` is the network role of the network.
896
897 Note that ONAP only supports cloud assigned IP addresses from one IPv4 subnet
898 of a given network.
899
900 .. req::
901     :id: R-100210
902     :keyword: MUST NOT
903     :validation_mode: static
904     :target: VNF
905     :introduced: dublin
906
907     The VNF's Heat Orchestration Template's Resource
908     ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
909     parameter
910     ``{network-role}_subnet_id``
911     **MUST NOT** be enumerated in the
912     VNF's Heat Orchestration Template's Environment File.
913
914 ONAP's SDN-Controller provides the network's subnet's UUID
915 value at orchestration to the Heat Orchestration Template.
916
917 *Example Parameter Definition*
918
919 .. code-block:: yaml
920
921   parameters:
922
923     {network-role}_subnet_id:
924       type: string
925       description: Neutron IPv4 subnet UUID for the {network-role} network
926
927
928 .. req::
929     :id: R-100220
930     :keyword: MUST
931     :validation_mode: static
932     :target: VNF
933     :introduced: dublin
934
935     When the VNF's Heat Orchestration Template's
936     resource ``OS::ContrailV2::InstanceIp`` is assigning an IP address
937     to an external network (per the ONAP definition, see
938     Requirement R-57424),
939     and an IPv6 address is being cloud assigned by OpenStack's DHCP Service
940     and the external network IPv6 subnet is to be specified
941     using the property ``subnet_uuid``, the parameter
942     **MUST** follow the naming convention
943
944       * ``{network-role}_v6_subnet_id``
945
946     where
947
948       * ``{network-role}`` is the network role of the network.
949
950
951 Note that ONAP only supports cloud assigned IP addresses from one IPv6 subnet
952 of a given network.
953
954 .. req::
955     :id: R-100230
956     :keyword: MUST NOT
957     :validation_mode: static
958     :target: VNF
959     :introduced: dublin
960
961     The VNF's Heat Orchestration Template's Resource
962     ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
963     parameter
964     ``{network-role}_v6_subnet_id``
965     **MUST NOT** be enumerated in the
966     VNF's Heat Orchestration Template's Environment File.
967
968 ONAP's SDN-Controller provides the network's subnet's UUID
969 value at orchestration to the Heat Orchestration Template.
970
971 *Example Parameter Definition*
972
973 .. code-block:: yaml
974
975   parameters:
976
977     {network-role}_v6_subnet_id:
978       type: string
979       description: Neutron IPv6 subnet UUID for the {network-role} network
980
981
982 .. req::
983     :id: R-100240
984     :keyword: MUST
985     :validation_mode: static
986     :target: VNF
987     :introduced: dublin
988
989     When
990
991       * the VNF's Heat Orchestration Template's
992         resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is
993         assigning an IP address
994         to an internal network (per the ONAP definition, see
995         Requirements R-52425 and R-46461)
996         that is created in the Base Module, AND
997       * an IPv4 address is being cloud assigned by OpenStack's DHCP Service AND
998       * the internal network IPv4 subnet is to be specified
999         using the property ``subnet_uuid``,
1000
1001     the parameter **MUST** follow the naming convention
1002
1003       * ``int_{network-role}_subnet_id``
1004
1005     where
1006
1007       * ``{network-role}`` is the network role of the internal network
1008
1009     Note that the parameter **MUST** be defined as an ``output`` parameter in
1010     the base module.
1011
1012
1013 .. req::
1014     :id: R-100250
1015     :keyword: MUST NOT
1016     :validation_mode: static
1017     :target: VNF
1018     :introduced: dublin
1019
1020     The VNF's Heat Orchestration Template's Resource
1021     ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
1022     parameter
1023     ``int_{network-role}_subnet_id``
1024     **MUST NOT** be enumerated in the
1025     VNF's Heat Orchestration Template's Environment File.
1026
1027
1028 The assumption is that internal networks are created in the base module.
1029 The subnet network ID will be passed as an output parameter
1030 (e.g., ONAP Base Module Output Parameter) to the incremental modules.
1031 In the incremental modules, the output parameter name will be defined as
1032 input parameter.
1033
1034 *Example Parameter Definition*
1035
1036 .. code-block:: yaml
1037
1038   parameters:
1039
1040     int_{network-role}_subnet_id:
1041       type: string
1042       description: Neutron IPv4 subnet UUID for the int_{network-role} network
1043
1044
1045
1046 .. req::
1047     :id: R-100260
1048     :keyword: MUST
1049     :validation_mode: static
1050     :target: VNF
1051     :introduced: dublin
1052
1053     When
1054
1055       * the VNF's Heat Orchestration Template's
1056         resource ``OS::ContrailV2::InstanceIp`` in an Incremental Module is
1057         attaching
1058         to an internal network (per the ONAP definition,
1059         see Requirements R-52425 and R-46461)
1060         that is created in the Base Module, AND
1061       * an IPv6 address is being cloud assigned by OpenStack's DHCP Service AND
1062       * the internal network IPv6 subnet is to be specified
1063         using the property ``subnet_uuid``,
1064
1065     the parameter **MUST** follow the naming convention
1066     ``int_{network-role}_v6_subnet_id``,
1067     where ``{network-role}`` is the network role of the internal network.
1068
1069     Note that the parameter **MUST** be defined as an ``output`` parameter in
1070     the base module.
1071
1072
1073 .. req::
1074     :id: R-100270
1075     :keyword: MUST NOT
1076     :validation_mode: static
1077     :target: VNF
1078     :introduced: dublin
1079
1080     The VNF's Heat Orchestration Template's Resource
1081     ``OS::ContrailV2::InstanceIp`` property ``subnet_uuid``
1082     parameter
1083     ``int_{network-role}_v6_subnet_id``
1084     **MUST NOT** be enumerated in the
1085     VNF's Heat Orchestration Template's Environment File.
1086
1087
1088 *Example Parameter Definition*
1089
1090 .. code-block:: yaml
1091
1092   parameters:
1093
1094     int_{network-role}_v6_subnet_id:
1095       type: string
1096       description: Neutron subnet UUID for the int_{network-role} network
1097
1098 *Example: Contrail Resource OS::ContrailV2::InstanceIp, Property
1099 subnet_uuid*
1100
1101 The property ``instance_ip_address`` uses the same parameter naming
1102 convention as the property ``fixed_ips`` and Map Property ``subnet`` in
1103 OS::Neutron::Port. The resource is assigning a cloud assigned IP
1104 Address. The ``{network-role}`` has been defined as "oam_protected" to
1105 represent an oam protected network and the ``{vm-type}`` has been defined as
1106 "fw" for firewall.
1107
1108 .. code-block:: yaml
1109
1110   fw_0_oam_protected_vmi_0_IP_0:
1111     type: OS::ContrailV2::InstanceIp
1112     depends_on:
1113     - fw_0_oam_protected_vmi_0
1114     properties:
1115       virtual_machine_interface_refs:
1116         - get_resource: fw_0_oam_protected_vmi_0
1117       virtual_network_refs:
1118         - get_param: oam_protected_net_fqdn
1119       subnet_uuid: { get_param: oam_protected_subnet_id }
1120
1121
1122 OS::ContrailV2::VirtualMachineInterface Property virtual_machine_interface_allowed_address_pairs
1123 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1124
1125
1126 A VNF's Heat Orchestration Templates resource
1127 ``OS::ContrailV2::VirtualMachineInterface`` map property,
1128 ``virtual_machine_interface_allowed_address_pairs,
1129 virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1130 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1131 virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1132 parameter **MUST** follow the same requirements that apply to the
1133 resource ``OS::Neutron::Port`` property
1134 ``allowed_address_pairs``, map property ``ip_address`` parameter.
1135
1136
1137 .. req::
1138     :id: R-100280
1139     :keyword: MUST NOT
1140     :validation_mode: static
1141     :target: VNF
1142     :introduced: dublin
1143
1144     If a VNF requires ONAP to assign a Virtual IP (VIP) Address to a
1145     ``OS::ContrailV2::VirtualMachineInterface``
1146     connected an external network, the port
1147     **MUST NOT** have more than one IPv4 VIP address.
1148
1149
1150 .. req::
1151     :id: R-100290
1152     :keyword: MUST NOT
1153     :validation_mode: static
1154     :target: VNF
1155     :introduced: dublin
1156
1157     If a VNF requires ONAP to assign a Virtual IP (VIP) Address to a
1158     ``OS::ContrailV2::VirtualMachineInterface``
1159     connected an external network, the port
1160     **MUST NOT** have more than one IPv6 VIP address.
1161
1162
1163 .. req::
1164     :id: R-100300
1165     :keyword: MUST
1166     :validation_mode: static
1167     :target: VNF
1168     :introduced: dublin
1169
1170     If a VNF has two or more ``OS::ContrailV2::VirtualMachineInterface`` that
1171     attach to an external network that require a Virtual IP Address (VIP),
1172     and the VNF requires ONAP automation to assign the IP address,
1173     all the Virtual Machines using the VIP address **MUST**
1174     be instantiated in the same Base Module Heat Orchestration Template
1175     or in the same Incremental Module Heat Orchestration Template.
1176
1177
1178 .. req::
1179     :id: R-100310
1180     :keyword: MUST
1181     :validation_mode: static
1182     :target: VNF
1183     :introduced: dublin
1184
1185     When the VNF's Heat Orchestration Template's Resource
1186     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
1187     network (per the
1188     ONAP definition, see Requirement R-57424),
1189     and an IPv4 Virtual IP (VIP)
1190     address is assigned via ONAP automation
1191     using the map property,
1192     ``virtual_machine_interface_allowed_address_pairs,
1193     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1194     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1195     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1196     , the parameter name **MUST** follow the
1197     naming convention
1198
1199       * ``{vm-type}_{network-role}_floating_ip``
1200
1201     where
1202
1203       * ``{vm-type}`` is the {vm-type} associated with the
1204         OS::Nova::Server
1205       * ``{network-role}`` is the {network-role} of the external
1206         network
1207
1208     And the parameter **MUST** be declared as type ``string``.
1209
1210
1211
1212 .. req::
1213     :id: R-100320
1214     :keyword: MUST NOT
1215     :validation_mode: static
1216     :target: VNF
1217     :introduced: dublin
1218
1219     The VNF's Heat Orchestration Template's Resource
1220     ``OS::ContrailV2::VirtualMachineInterface``
1221     map property,
1222     ``virtual_machine_interface_allowed_address_pairs,
1223     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1224     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1225     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1226     parameter
1227
1228     * ``{vm-type}_{network-role}_floating_ip``
1229
1230     **MUST NOT** be enumerated in the
1231     VNF's Heat Orchestration Template's Environment File.
1232
1233 *Example Parameter Definition*
1234
1235 .. code-block:: yaml
1236
1237   parameters:
1238
1239     {vm-type}_{network-role}_floating_ip:
1240       type: string
1241       description: IPv4 VIP for {vm-type} VMs on the {network-role} network
1242
1243
1244
1245 .. req::
1246     :id: R-100330
1247     :keyword: MUST
1248     :validation_mode: static
1249     :target: VNF
1250     :introduced: dublin
1251
1252     When the VNF's Heat Orchestration Template's Resource
1253     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
1254     network (per the
1255     ONAP definition, see Requirement R-57424),
1256     and an IPv6 Virtual IP (VIP)
1257     address is assigned via ONAP automation
1258     using the
1259     map property,
1260     ``virtual_machine_interface_allowed_address_pairs,
1261     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1262     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1263     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1264     , the parameter name **MUST** follow the
1265     naming convention
1266
1267       * ``{vm-type}_{network-role}_floating_v6_ip``
1268
1269     where
1270
1271       * ``{vm-type}`` is the {vm-type} associated with the
1272         OS::Nova::Server
1273       * ``{network-role}`` is the {network-role} of the external
1274         network
1275
1276     And the parameter **MUST** be declared as type ``string``.
1277
1278
1279 .. req::
1280     :id: R-100340
1281     :keyword: MUST NOT
1282     :validation_mode: static
1283     :target: VNF
1284     :introduced: dublin
1285
1286     The VNF's Heat Orchestration Template's Resource
1287     ``OS::ContrailV2::VirtualMachineInterface``
1288     map property,
1289     ``virtual_machine_interface_allowed_address_pairs,
1290     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1291     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1292     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1293     parameter
1294
1295     * ``{vm-type}_{network-role}_floating_v6_ip``
1296
1297     **MUST NOT** be enumerated in the
1298     VNF's Heat Orchestration Template's Environment File.
1299
1300 *Example Parameter Definition*
1301
1302 .. code-block:: yaml
1303
1304   parameters:
1305
1306     {vm-type}_{network-role}_floating_v6_ip:
1307       type: string
1308       description: VIP for {vm-type} VMs on the {network-role} network
1309
1310 .. req::
1311     :id: R-100350
1312     :keyword: MUST NOT
1313     :introduced: dublin
1314     :validation_mode: static
1315     :target: VNF
1316
1317     When the VNF's Heat Orchestration Template's Resource
1318     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
1319     network (per the
1320     ONAP definition, see Requirement R-57424),
1321     and an IPv4 and/or IPv6 Virtual IP (VIP)
1322     address is assigned via ONAP automation
1323     using the
1324     map property,
1325     ``virtual_machine_interface_allowed_address_pairs,
1326     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1327     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1328     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1329     parameter
1330     **MUST NOT** be declared as ``type: comma_deliited_list``.
1331
1332
1333 .. req::
1334     :id: R-100360
1335     :keyword: MUST
1336     :introduced: dublin
1337     :validation_mode: static
1338     :target: VNF
1339
1340     When the VNF's Heat Orchestration Template's Resource
1341     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
1342     internal network (per the
1343     ONAP definition, see Requirements R-52425 and R-46461),
1344     and an IPv4 Virtual IP (VIP)
1345     address is assigned using the map property,
1346     ``virtual_machine_interface_allowed_address_pairs,
1347     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1348     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1349     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1350     , the parameter name **MUST** follow the
1351     naming convention
1352
1353       * ``{vm-type}_int_{network-role}_floating_ip``
1354
1355     where
1356
1357       * ``{vm-type}`` is the {vm-type} associated with the
1358         OS::Nova::Server
1359       * ``{network-role}`` is the {network-role} of the external
1360         network
1361
1362     And the parameter **MUST** be declared as ``type: string``
1363     and **MUST** be enumerated in the environment file.
1364
1365     OR
1366
1367     the parameter name **MUST** follow the
1368     naming convention
1369
1370       * ``{vm-type}_int_{network-role}_floating_ips``
1371
1372     where
1373
1374       * ``{vm-type}`` is the {vm-type} associated with the
1375         OS::Nova::Server
1376       * ``{network-role}`` is the {network-role} of the external
1377         network
1378
1379     And the parameter **MUST** be declared as ``type: comma_delimited_list``
1380     and **MUST** be enumerated in the environment file.
1381
1382
1383 .. req::
1384     :id: R-100370
1385     :keyword: MUST
1386     :introduced: dublin
1387     :validation_mode: static
1388     :target: VNF
1389
1390     When the VNF's Heat Orchestration Template's Resource
1391     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
1392     internal network (per the
1393     ONAP definition, see Requirements R-52425 and R-46461),
1394     and an IPv6 Virtual IP (VIP)
1395     address is assigned
1396     using the map property,
1397     ``virtual_machine_interface_allowed_address_pairs,
1398     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1399     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1400     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1401     , the parameter name **MUST** follow the
1402     naming convention
1403
1404       * ``{vm-type}_int_{network-role}_floating_v6_ip``
1405
1406     where
1407
1408       * ``{vm-type}`` is the {vm-type} associated with the
1409         OS::Nova::Server
1410       * ``{network-role}`` is the {network-role} of the external
1411         network
1412
1413     And the parameter **MUST** be declared as ``type: string``
1414     and **MUST** be enumerated in the environment file
1415
1416     OR
1417
1418     the parameter name **MUST** follow the
1419     naming convention
1420
1421       * ``{vm-type}_int_{network-role}_floating_v6_ips``
1422
1423     where
1424
1425       * ``{vm-type}`` is the {vm-type} associated with the
1426         OS::Nova::Server
1427       * ``{network-role}`` is the {network-role} of the external
1428         network
1429
1430     And the parameter **MUST** be declared as ``type: comma_delimited_list``
1431     and **MUST** be enumerated in the environment file.
1432
1433
1434
1435 *Example OS::ContrailV2::VirtualMachineInterface*
1436
1437 .. code-block:: yaml
1438
1439   <resource ID>:
1440     type: OS::ContrailV2::VirtualMachineInterface
1441     properties:
1442       name: { get_param: name }
1443       fq_name: { get_param: fq_name }
1444       ecmp_hashing_include_fields:
1445         {
1446           ecmp_hashing_include_fields_hashing_configured: { get_param: ecmp_hashing_include_fields_hashing_configured },
1447           ecmp_hashing_include_fields_source_ip: { get_param: ecmp_hashing_include_fields_source_ip },
1448           ecmp_hashing_include_fields_destination_ip: { get_param: ecmp_hashing_include_fields_destination_ip },
1449           ecmp_hashing_include_fields_ip_protocol: { get_param: ecmp_hashing_include_fields_ip_protocol },
1450           ecmp_hashing_include_fields_source_port: { get_param: ecmp_hashing_include_fields_source_port },
1451           ecmp_hashing_include_fields_destination_port: { get_param: ecmp_hashing_include_fields_destination_port },
1452         }
1453       virtual_machine_interface_host_routes:
1454         {
1455           virtual_machine_interface_host_routes_route:
1456             [{
1457               virtual_machine_interface_host_routes_route_prefix: { get_param: virtual_machine_interface_host_routes_route_prefix },
1458               virtual_machine_interface_host_routes_route_next_hop: { get_param: virtual_machine_interface_host_routes_route_next_hop },
1459               virtual_machine_interface_host_routes_route_next_hop_type: { get_param: virtual_machine_interface_host_routes_route_next_hop_type },
1460               virtual_machine_interface_host_routes_route_community_attributes:
1461                 {
1462                   virtual_machine_interface_host_routes_route_community_attributes_community_attribute: [{ get_param: virtual_machine_interface_host_routes_route_community_attributes_community_attribute }],
1463                 },
1464             }],
1465         }
1466       virtual_machine_interface_mac_addresses:
1467         {
1468           virtual_machine_interface_mac_addresses_mac_address: [{ get_param: virtual_machine_interface_mac_addresses_mac_address }],
1469         }
1470       virtual_machine_interface_dhcp_option_list:
1471         {
1472           virtual_machine_interface_dhcp_option_list_dhcp_option:
1473             [{
1474               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name },
1475               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value },
1476               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 },
1477             }],
1478         }
1479       virtual_machine_interface_bindings:
1480         {
1481           virtual_machine_interface_bindings_key_value_pair:
1482             [{
1483               virtual_machine_interface_bindings_key_value_pair_key: { get_param: virtual_machine_interface_bindings_key_value_pair_key },
1484               virtual_machine_interface_bindings_key_value_pair_value: { get_param: virtual_machine_interface_bindings_key_value_pair_value },
1485             }],
1486         }
1487       virtual_machine_interface_disable_policy: { get_param: virtual_machine_interface_disable_policy }
1488       virtual_machine_interface_allowed_address_pairs:
1489         {
1490           virtual_machine_interface_allowed_address_pairs_allowed_address_pair:
1491             [{
1492               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip:
1493                 {
1494                   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 },
1495                   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 },
1496                 },
1497               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac },
1498               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode },
1499             }],
1500         }
1501       annotations:
1502         {
1503           annotations_key_value_pair:
1504             [{
1505               annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
1506               annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
1507             }],
1508         }
1509       virtual_machine_interface_fat_flow_protocols:
1510         {
1511           virtual_machine_interface_fat_flow_protocols_fat_flow_protocol:
1512             [{
1513               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol },
1514               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port },
1515             }],
1516         }
1517       virtual_machine_interface_device_owner: { get_param: virtual_machine_interface_device_owner }
1518       port_security_enabled: { get_param: port_security_enabled }
1519       virtual_machine_interface_properties:
1520         {
1521           virtual_machine_interface_properties_service_interface_type: { get_param: virtual_machine_interface_properties_service_interface_type },
1522           virtual_machine_interface_properties_interface_mirror:
1523             {
1524               virtual_machine_interface_properties_interface_mirror_traffic_direction: { get_param: virtual_machine_interface_properties_interface_mirror_traffic_direction },
1525               virtual_machine_interface_properties_interface_mirror_mirror_to:
1526                 {
1527                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name },
1528                   virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation },
1529                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address },
1530                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address },
1531                   virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance },
1532                   virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port },
1533                   virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header },
1534                   virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode },
1535                   virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header:
1536                     {
1537                       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 },
1538                       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 },
1539                       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 },
1540                     },
1541                 },
1542             },
1543           virtual_machine_interface_properties_local_preference: { get_param: virtual_machine_interface_properties_local_preference },
1544           virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: virtual_machine_interface_properties_sub_interface_vlan_tag },
1545         }
1546       display_name: { get_param: display_name }
1547       service_health_check_refs: [{ get_param: service_health_check_refs }]
1548       routing_instance_refs: [{ get_param: routing_instance_refs }]
1549       routing_instance_refs_data:
1550         [{
1551           routing_instance_refs_data_direction: { get_param: routing_instance_refs_data_direction },
1552           routing_instance_refs_data_vlan_tag: { get_param: routing_instance_refs_data_vlan_tag },
1553           routing_instance_refs_data_src_mac: { get_param: routing_instance_refs_data_src_mac },
1554           routing_instance_refs_data_dst_mac: { get_param: routing_instance_refs_data_dst_mac },
1555           routing_instance_refs_data_mpls_label: { get_param: routing_instance_refs_data_mpls_label },
1556           routing_instance_refs_data_service_chain_address: { get_param: routing_instance_refs_data_service_chain_address },
1557           routing_instance_refs_data_ipv6_service_chain_address: { get_param: routing_instance_refs_data_ipv6_service_chain_address },
1558           routing_instance_refs_data_protocol: { get_param: routing_instance_refs_data_protocol },
1559         }]
1560       security_group_refs: [{ get_param: security_group_refs }]
1561       physical_interface_refs: [{ get_param: physical_interface_refs }]
1562       port_tuple_refs: [{ get_param: port_tuple_refs }]
1563       interface_route_table_refs: [{ get_param: interface_route_table_refs }]
1564       virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
1565       virtual_network_refs: [{ get_param: virtual_network_refs }]
1566       virtual_machine_refs: [{ get_param: virtual_machine_refs }]
1567       qos_config_refs: [{ get_param: qos_config_refs }]
1568       virtual_machine: { get_param: virtual_machine }
1569       project: { get_param: project }
1570