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