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