36c46288a08afe1311edba81596572e93f499ec5
[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 A VNF's Heat Orchestration Templates resource
1126 ``OS::ContrailV2::VirtualMachineInterface`` map property,
1127
1128 ``virtual_machine_interface_allowed_address_pairs``,
1129
1130 ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1131
1132 ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1133
1134 ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1135
1136 parameter **MUST** follow the same requirements that apply to the
1137 resource ``OS::Neutron::Port`` property
1138 ``allowed_address_pairs``, map property ``ip_address`` parameter.
1139
1140 External Networks
1141 ~~~~~~~~~~~~~~~~~
1142
1143 .. req::
1144     :id: R-100280
1145     :keyword: MUST NOT
1146     :validation_mode: static
1147     :target: VNF
1148     :introduced: dublin
1149
1150     If a VNF's Heat Orchestration Template's resource
1151     ``OS::ContrailV2::VirtualMachineInterface``
1152     is attaching to an external network (per the
1153     ONAP definition, see Requirement R-57424), the
1154     map property
1155
1156     ``virtual_machine_interface_allowed_address_pairs``,
1157
1158     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1159
1160     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1161
1162     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1163     
1164     parameter
1165     **MUST NOT** be enumerated in the
1166     VNF's Heat Orchestration Template's Environment File.
1167
1168
1169 .. req::
1170     :id: R-100310
1171     :keyword: MUST
1172     :validation_mode: static
1173     :target: VNF
1174     :introduced: dublin
1175
1176     When the VNF's Heat Orchestration Template's resource
1177     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
1178     network (per the
1179     ONAP definition, see Requirement R-57424),
1180     and an IPv4 Virtual IP (VIP)
1181     is required to be supported by the ONAP data model,
1182     the map property
1183
1184     ``virtual_machine_interface_allowed_address_pairs``,
1185
1186     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1187
1188     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1189
1190     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1191     
1192     parameter name **MUST** follow the naming convention
1193
1194     * ``{vm-type}_{network-role}_floating_ip``
1195
1196     where
1197
1198     * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
1199     * ``{network-role}`` is the {network-role} of the external network
1200
1201     And the parameter **MUST** be declared as type ``string``.
1202
1203     The ONAP data model can only support one IPv4 VIP address.
1204
1205
1206 *Example Parameter Definition*
1207
1208 .. code-block:: yaml
1209
1210   parameters:
1211
1212     {vm-type}_{network-role}_floating_ip:
1213       type: string
1214       description: IPv4 VIP for {vm-type} VMs on the {network-role} network
1215
1216
1217 .. req::
1218     :id: R-100330
1219     :keyword: MUST
1220     :validation_mode: static
1221     :target: VNF
1222     :introduced: dublin
1223
1224     When the VNF's Heat Orchestration Template's resource
1225     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an external
1226     network (per the
1227     ONAP definition, see Requirement R-57424),
1228     and an IPv6 Virtual IP (VIP)
1229     is required to be supported by the ONAP data model,
1230     the map property
1231
1232     ``virtual_machine_interface_allowed_address_pairs``,
1233
1234     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1235
1236     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1237
1238     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1239    
1240     parameter name **MUST** follow the naming convention
1241
1242     * ``{vm-type}_{network-role}_floating_v6_ip``
1243
1244     where
1245
1246     * ``{vm-type}`` is the {vm-type} associated with the ``OS::Nova::Server``
1247     * ``{network-role}`` is the {network-role} of the external network
1248
1249     And the parameter **MUST** be declared as type ``string``.
1250
1251     The ONAP data model can only support one IPv6 VIP address.
1252
1253
1254 *Example Parameter Definition*
1255
1256 .. code-block:: yaml
1257
1258   parameters:
1259
1260     {vm-type}_{network-role}_floating_v6_ip:
1261       type: string
1262       description: IPv6 VIP for {vm-type} VMs on the {network-role} network
1263
1264 .. req::
1265     :id: R-100350
1266     :keyword: MUST NOT
1267     :introduced: dublin
1268     :validation_mode: static
1269     :target: VNF
1270
1271     When the VNF's Heat Orchestration Template's resource
1272     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
1273     external network
1274     (per the ONAP definition, see Requirement R-57424),
1275     and the IPv4 VIP address and/or IPv6 VIP address
1276     is **not** supported by the ONAP data model,
1277     the map property
1278
1279     ``virtual_machine_interface_allowed_address_pairs``,
1280
1281     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1282
1283     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1284
1285     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1286
1287     * Parameter name **MAY** use any naming convention.  That is, there is no
1288       ONAP mandatory parameter naming convention.
1289     * Parameter **MAY** be declared as type ``string`` or type
1290     ``comma_delimited_list``.
1291
1292     And the ``OS::ContrailV2::VirtualMachineInterface`` resource
1293     **MUST** contain resource-level ``metadata`` (not property-level).
1294
1295     And the ``metadata`` format **MUST**  must contain the
1296     key value ``aap_exempt`` with a list of all map property
1297
1298     ``virtual_machine_interface_allowed_address_pairs``,
1299
1300     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair``,
1301
1302     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip``,
1303
1304     ``virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1305
1306     parameters **not** supported by the ONAP data model.
1307
1308
1309 Internal Networks
1310 ~~~~~~~~~~~~~~~~~
1311
1312 .. req::
1313     :id: R-100360
1314     :keyword: MUST
1315     :introduced: dublin
1316     :validation_mode: static
1317     :target: VNF
1318
1319     When the VNF's Heat Orchestration Template's Resource
1320     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
1321     internal network (per the
1322     ONAP definition, see Requirements R-52425 and R-46461),
1323     and an IPv4 Virtual IP (VIP)
1324     address is assigned using the 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     , the parameter name **MUST** follow the
1330     naming convention
1331
1332       * ``{vm-type}_int_{network-role}_floating_ip``
1333
1334     where
1335
1336       * ``{vm-type}`` is the {vm-type} associated with the
1337         OS::Nova::Server
1338       * ``{network-role}`` is the {network-role} of the external
1339         network
1340
1341     And the parameter **MUST** be declared as ``type: string``
1342     and **MUST** be enumerated in the environment file.
1343
1344     OR
1345
1346     the parameter name **MUST** follow the
1347     naming convention
1348
1349       * ``{vm-type}_int_{network-role}_floating_ips``
1350
1351     where
1352
1353       * ``{vm-type}`` is the {vm-type} associated with the
1354         OS::Nova::Server
1355       * ``{network-role}`` is the {network-role} of the external
1356         network
1357
1358     And the parameter **MUST** be declared as ``type: comma_delimited_list``
1359     and **MUST** be enumerated in the environment file.
1360
1361
1362 .. req::
1363     :id: R-100370
1364     :keyword: MUST
1365     :introduced: dublin
1366     :validation_mode: static
1367     :target: VNF
1368
1369     When the VNF's Heat Orchestration Template's Resource
1370     ``OS::ContrailV2::VirtualMachineInterface`` is attaching to an
1371     internal network (per the
1372     ONAP definition, see Requirements R-52425 and R-46461),
1373     and an IPv6 Virtual IP (VIP)
1374     address is assigned
1375     using the map property,
1376     ``virtual_machine_interface_allowed_address_pairs,
1377     virtual_machine_interface_allowed_address_pairs_allowed_address_pair,
1378     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip,
1379     virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix``
1380     , the parameter name **MUST** follow the
1381     naming convention
1382
1383       * ``{vm-type}_int_{network-role}_floating_v6_ip``
1384
1385     where
1386
1387       * ``{vm-type}`` is the {vm-type} associated with the
1388         OS::Nova::Server
1389       * ``{network-role}`` is the {network-role} of the external
1390         network
1391
1392     And the parameter **MUST** be declared as ``type: string``
1393     and **MUST** be enumerated in the environment file
1394
1395     OR
1396
1397     the parameter name **MUST** follow the
1398     naming convention
1399
1400       * ``{vm-type}_int_{network-role}_floating_v6_ips``
1401
1402     where
1403
1404       * ``{vm-type}`` is the {vm-type} associated with the
1405         OS::Nova::Server
1406       * ``{network-role}`` is the {network-role} of the external
1407         network
1408
1409     And the parameter **MUST** be declared as ``type: comma_delimited_list``
1410     and **MUST** be enumerated in the environment file.
1411
1412
1413 Example
1414 ~~~~~~~
1415
1416
1417 *Example OS::ContrailV2::VirtualMachineInterface*
1418
1419 .. code-block:: yaml
1420
1421   <resource ID>:
1422     type: OS::ContrailV2::VirtualMachineInterface
1423     properties:
1424       name: { get_param: name }
1425       fq_name: { get_param: fq_name }
1426       ecmp_hashing_include_fields:
1427         {
1428           ecmp_hashing_include_fields_hashing_configured: { get_param: ecmp_hashing_include_fields_hashing_configured },
1429           ecmp_hashing_include_fields_source_ip: { get_param: ecmp_hashing_include_fields_source_ip },
1430           ecmp_hashing_include_fields_destination_ip: { get_param: ecmp_hashing_include_fields_destination_ip },
1431           ecmp_hashing_include_fields_ip_protocol: { get_param: ecmp_hashing_include_fields_ip_protocol },
1432           ecmp_hashing_include_fields_source_port: { get_param: ecmp_hashing_include_fields_source_port },
1433           ecmp_hashing_include_fields_destination_port: { get_param: ecmp_hashing_include_fields_destination_port },
1434         }
1435       virtual_machine_interface_host_routes:
1436         {
1437           virtual_machine_interface_host_routes_route:
1438             [{
1439               virtual_machine_interface_host_routes_route_prefix: { get_param: virtual_machine_interface_host_routes_route_prefix },
1440               virtual_machine_interface_host_routes_route_next_hop: { get_param: virtual_machine_interface_host_routes_route_next_hop },
1441               virtual_machine_interface_host_routes_route_next_hop_type: { get_param: virtual_machine_interface_host_routes_route_next_hop_type },
1442               virtual_machine_interface_host_routes_route_community_attributes:
1443                 {
1444                   virtual_machine_interface_host_routes_route_community_attributes_community_attribute: [{ get_param: virtual_machine_interface_host_routes_route_community_attributes_community_attribute }],
1445                 },
1446             }],
1447         }
1448       virtual_machine_interface_mac_addresses:
1449         {
1450           virtual_machine_interface_mac_addresses_mac_address: [{ get_param: virtual_machine_interface_mac_addresses_mac_address }],
1451         }
1452       virtual_machine_interface_dhcp_option_list:
1453         {
1454           virtual_machine_interface_dhcp_option_list_dhcp_option:
1455             [{
1456               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_name },
1457               virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value: { get_param: virtual_machine_interface_dhcp_option_list_dhcp_option_dhcp_option_value },
1458               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 },
1459             }],
1460         }
1461       virtual_machine_interface_bindings:
1462         {
1463           virtual_machine_interface_bindings_key_value_pair:
1464             [{
1465               virtual_machine_interface_bindings_key_value_pair_key: { get_param: virtual_machine_interface_bindings_key_value_pair_key },
1466               virtual_machine_interface_bindings_key_value_pair_value: { get_param: virtual_machine_interface_bindings_key_value_pair_value },
1467             }],
1468         }
1469       virtual_machine_interface_disable_policy: { get_param: virtual_machine_interface_disable_policy }
1470       virtual_machine_interface_allowed_address_pairs:
1471         {
1472           virtual_machine_interface_allowed_address_pairs_allowed_address_pair:
1473             [{
1474               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip:
1475                 {
1476                   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 },
1477                   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 },
1478                 },
1479               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac },
1480               virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: { get_param: virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode },
1481             }],
1482         }
1483       annotations:
1484         {
1485           annotations_key_value_pair:
1486             [{
1487               annotations_key_value_pair_key: { get_param: annotations_key_value_pair_key },
1488               annotations_key_value_pair_value: { get_param: annotations_key_value_pair_value },
1489             }],
1490         }
1491       virtual_machine_interface_fat_flow_protocols:
1492         {
1493           virtual_machine_interface_fat_flow_protocols_fat_flow_protocol:
1494             [{
1495               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_protocol },
1496               virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port: { get_param: virtual_machine_interface_fat_flow_protocols_fat_flow_protocol_port },
1497             }],
1498         }
1499       virtual_machine_interface_device_owner: { get_param: virtual_machine_interface_device_owner }
1500       port_security_enabled: { get_param: port_security_enabled }
1501       virtual_machine_interface_properties:
1502         {
1503           virtual_machine_interface_properties_service_interface_type: { get_param: virtual_machine_interface_properties_service_interface_type },
1504           virtual_machine_interface_properties_interface_mirror:
1505             {
1506               virtual_machine_interface_properties_interface_mirror_traffic_direction: { get_param: virtual_machine_interface_properties_interface_mirror_traffic_direction },
1507               virtual_machine_interface_properties_interface_mirror_mirror_to:
1508                 {
1509                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_name },
1510                   virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_encapsulation },
1511                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_ip_address },
1512                   virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_analyzer_mac_address },
1513                   virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_routing_instance },
1514                   virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_udp_port },
1515                   virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_juniper_header },
1516                   virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode: { get_param: virtual_machine_interface_properties_interface_mirror_mirror_to_nh_mode },
1517                   virtual_machine_interface_properties_interface_mirror_mirror_to_static_nh_header:
1518                     {
1519                       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 },
1520                       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 },
1521                       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 },
1522                     },
1523                 },
1524             },
1525           virtual_machine_interface_properties_local_preference: { get_param: virtual_machine_interface_properties_local_preference },
1526           virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: virtual_machine_interface_properties_sub_interface_vlan_tag },
1527         }
1528       display_name: { get_param: display_name }
1529       service_health_check_refs: [{ get_param: service_health_check_refs }]
1530       routing_instance_refs: [{ get_param: routing_instance_refs }]
1531       routing_instance_refs_data:
1532         [{
1533           routing_instance_refs_data_direction: { get_param: routing_instance_refs_data_direction },
1534           routing_instance_refs_data_vlan_tag: { get_param: routing_instance_refs_data_vlan_tag },
1535           routing_instance_refs_data_src_mac: { get_param: routing_instance_refs_data_src_mac },
1536           routing_instance_refs_data_dst_mac: { get_param: routing_instance_refs_data_dst_mac },
1537           routing_instance_refs_data_mpls_label: { get_param: routing_instance_refs_data_mpls_label },
1538           routing_instance_refs_data_service_chain_address: { get_param: routing_instance_refs_data_service_chain_address },
1539           routing_instance_refs_data_ipv6_service_chain_address: { get_param: routing_instance_refs_data_ipv6_service_chain_address },
1540           routing_instance_refs_data_protocol: { get_param: routing_instance_refs_data_protocol },
1541         }]
1542       security_group_refs: [{ get_param: security_group_refs }]
1543       physical_interface_refs: [{ get_param: physical_interface_refs }]
1544       port_tuple_refs: [{ get_param: port_tuple_refs }]
1545       interface_route_table_refs: [{ get_param: interface_route_table_refs }]
1546       virtual_machine_interface_refs: [{ get_param: virtual_machine_interface_refs }]
1547       virtual_network_refs: [{ get_param: virtual_network_refs }]
1548       virtual_machine_refs: [{ get_param: virtual_machine_refs }]
1549       qos_config_refs: [{ get_param: qos_config_refs }]
1550       virtual_machine: { get_param: virtual_machine }
1551       project: { get_param: project }
1552