[VNFRQTS] Update R-55307 & R-35414
[vnfrqts/requirements.git] / docs / Chapter5 / Heat / ONAP Heat Resource ID and Parameter Naming Convention / Resource IDs.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 Resource IDs
6 ------------
7
8 Requirement R-75141 states a VNF’s Heat Orchestration Template’s resource
9 name (i.e., <resource ID>) MUST only contain alphanumeric characters and
10 underscores (‘_’).*
11
12 Requirement R-16447 states a VNF’s <resource ID> MUST be unique across
13 all Heat Orchestration Templates and all HEAT Orchestration Template Nested
14 YAML files that are used to create the VNF.
15
16 As stated previously, OpenStack requires the <resource ID> to be unique
17 to the Heat Orchestration Template and not unique across all Heat
18 Orchestration Templates the compose the VNF.
19
20 Heat Orchestration Template resources are described in :ref:`resources`.
21
22 .. req::
23     :id: R-54517
24     :target: VNF
25     :keyword: MUST
26     :validation_mode: none
27     :updated: casablanca
28
29     When a VNF's Heat Orchestration Template's resource is associated with
30     a single ``{vm-type}``, the Resource ID **MUST** contain the
31     ``{vm-type}``.
32
33 .. req::
34     :id: R-96482
35     :target: VNF
36     :keyword: MUST
37     :validation_mode: none
38     :updated: frankfurt
39
40     When a VNF's Heat Orchestration Template's resource is associated
41     with a single ONAP external network, the Resource ID **MUST** contain the
42     text ``{network-role}``.
43
44 .. req::
45     :id: R-98138
46     :target: VNF
47     :keyword: MUST
48     :validation_mode: none
49     :updated: frankfurt
50
51     When a VNF's Heat Orchestration Template's resource is associated with a
52     single ONAP internal network (per the ONAP definition, see
53     Requirements R-52425 and R-46461 and R-35666), the Resource ID **MUST**
54     contain the text
55     ``int_{network-role}``.
56
57 .. req::
58     :id: R-82115
59     :target: VNF
60     :keyword: MUST
61     :validation_mode: none
62     :updated: frankfurt
63
64     When a VNF's Heat Orchestration Template's resource is associated with a
65     single ``{vm-type}``
66     and a single ONAP
67     external network, the Resource ID text **MUST** contain both
68     the ``{vm-type}``
69     and the ``{network-role}``
70
71     - the ``{vm-type}`` **MUST** appear before the ``{network-role}`` and
72       **MUST** be separated by an underscore '_'
73
74
75       - e.g., ``{vm-type}_{network-role}``, ``{vm-type}_{index}_{network-role}``
76
77
78     - note that an ``{index}`` value **MAY** separate the ``{vm-type}`` and the
79       ``{network-role}`` and when this occurs underscores **MUST** separate the
80       three values.  (e.g., ``{vm-type}_{index}_{network-role}``).
81
82 .. req::
83     :id: R-82551
84     :target: VNF
85     :keyword: MUST
86     :validation_mode: none
87     :updated: frankfurt
88
89     When a VNF's Heat Orchestration Template's resource is associated with a
90     single ``{vm-type}`` and a single ONAP internal network (per the ONAP
91     definition, see Requirements R-52425 and R-46461 and R-35666),
92     the Resource ID **MUST**
93     contain both the ``{vm-type}`` and the ``int_{network-role}`` and
94
95     - the ``{vm-type}`` **MUST** appear before the ``int_{network-role}`` and
96       **MUST** be separated by an underscore '_'
97
98       - (e.g., ``{vm-type}_int_{network-role}``,
99         ``{vm-type}_{index}_int_{network-role}``)
100
101     - note that an ``{index}`` value **MAY** separate the
102       ``{vm-type}`` and the ``int_{network-role}`` and when this occurs
103       underscores **MUST** separate the three values.
104       (e.g., ``{vm-type}_{index}_int_{network-role}``).
105
106 .. req::
107     :id: R-67793
108     :target: VNF
109     :keyword: MUST NOT
110     :validation_mode: none
111     :updated: frankfurt
112
113     When a VNF's Heat Orchestration Template's resource is associated
114     with more than one ``{vm-type}`` and/or more than one ONAP internal network
115     (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666)
116     and/or
117     ONAP external network (per the ONAP definition, see Requirement R-57424
118     and R-16968), the Resource ID **MUST NOT** contain the
119     ``{vm-type}`` and/or ``{network-role}``/``int_{network-role}``.
120
121 .. req::
122     :id: R-27970
123     :target: VNF
124     :keyword: MAY
125     :updated: frankfurt
126
127     When a VNF's Heat Orchestration Template's resource is associated with
128     more than one ``{vm-type}`` and/or more than one ONAP internal network
129     (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666)
130     and/or ONAP external network (per the ONAP definition, see Requirement
131     R-57424 and R-16968), the Resource ID **MAY** contain the term
132     ``shared`` and/or **MAY**
133     contain text that identifies the VNF.
134
135 .. req::
136     :id: R-11690
137     :target: VNF
138     :keyword: MUST
139     :validation_mode: static
140     :updated: dublin
141
142     When a VNF's Heat Orchestration Template's Resource ID contains an
143     ``{index}``, the ``{index}`` is a numeric value that **MUST** start at
144     zero and **MUST** increment by one.
145
146     As stated in R-16447,
147     *a VNF's <resource ID> MUST be unique across all Heat
148     Orchestration Templates and all HEAT Orchestration Template
149     Nested YAML files that are used to create the VNF*.  While the ``{index}``
150     will start at zero in the VNF, the ``{index}`` may not start at zero
151     in a given Heat Orchestration Template or HEAT Orchestration Template
152     Nested YAML file.
153
154 OpenStack Heat Resources Resource ID Naming Convention
155 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
156
157 Some OpenStack Heat Resources Resource IDs
158 have mandatory or suggested naming conventions.  They are provided
159 in the following sections.
160
161 OS::Cinder::Volume
162 ~~~~~~~~~~~~~~~~~~~~~~
163
164 .. req::
165     :id: R-87004
166     :target: VNF
167     :keyword: SHOULD
168     :updated: dublin
169
170     A VNF's Heat Orchestration Template's Resource
171     ``OS::Cinder::Volume``
172     Resource ID
173     **SHOULD**
174     use the naming convention
175
176     * ``{vm-type}_volume_{index}``
177
178     where
179
180     * ``{vm-type}`` is the vm-type
181     * ``{index}`` starts at zero and increments by one (as described in R-11690)
182
183 OS::Cinder::VolumeAttachment
184 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185
186 .. req::
187     :id: R-86497
188     :target: VNF
189     :keyword: SHOULD
190     :updated: dublin
191
192     A VNF's Heat Orchestration Template's Resource
193     ``OS::Cinder::VolumeAttachment``
194     Resource ID
195     **SHOULD**
196     use the naming convention
197
198     * ``{vm-type}_volume_attachment_{index}``
199
200     where
201
202     * ``{vm-type}`` is the vm-type
203     * ``{index}`` starts at zero and increments by one (as described in R-11690)
204
205 OS::Heat::CloudConfig
206 ~~~~~~~~~~~~~~~~~~~~~~~
207
208 .. req::
209     :id: R-04747
210     :target: VNF
211     :keyword: MUST
212     :validation_mode: static
213     :updated: casablanca
214
215     A VNF's Heat Orchestration Template's Resource ``OS::Heat::CloudConfig``
216     Resource ID **MUST** contain the ``{vm-type}``.
217
218 .. req::
219     :id: R-20319
220     :target: VNF
221     :keyword: MAY
222     :updated: casablanca
223
224     A VNF's Heat Orchestration Template's Resource ``OS::Heat::CloudConfig``
225     Resource ID **MAY** use the naming convention
226
227     * ``{vm-type}_RCC``
228
229     where
230
231     * ``{vm-type}`` is the vm-type
232     * ``RCC`` signifies that it is the Resource Cloud Config
233
234 OS::Heat::MultipartMime
235 ~~~~~~~~~~~~~~~~~~~~~~~
236
237
238 .. req::
239     :id: R-30804
240     :target: VNF
241     :keyword: MUST
242     :validation_mode: static
243     :updated: casablanca
244
245     A VNF's Heat Orchestration Template's Resource
246     ``OS::Heat::MultipartMime``
247     Resource ID
248     **MUST**
249     contain the ``{vm-type}``.
250
251 .. req::
252     :id: R-18202
253     :target: VNF
254     :keyword: MAY
255     :updated: casablanca
256
257     A VNF's Heat Orchestration Template's Resource
258     ``OS::Heat::MultipartMime``
259     Resource ID
260     **MAY**
261     use the naming convention
262
263     * ``{vm-type}_RMM``
264
265     where
266
267     * ``{vm-type}`` is the vm-type
268     * ``RMM`` signifies that it is the Resource Multipart Mime
269
270 OS::Heat::ResourceGroup
271 ~~~~~~~~~~~~~~~~~~~~~~~~
272
273 There is no mandatory naming convention for
274 the resource 'OS::Heat::ResourceGroup'.
275
276
277 OS::Heat::SoftwareConfig
278 ~~~~~~~~~~~~~~~~~~~~~~~~
279
280 .. req::
281     :id: R-08975
282     :target: VNF
283     :keyword: MUST
284     :validation_mode: static
285     :updated: casablanca
286
287     A VNF's Heat Orchestration Template's Resource ``OS::Heat::SoftwareConfig``
288     Resource ID **MUST** contain the ``{vm-type}``.
289
290 .. req::
291     :id: R-03656
292     :target: VNF
293     :keyword: MAY
294     :updated: casablanca
295
296     A VNF's Heat Orchestration Template's Resource ``OS::Heat::SoftwareConfig``
297     Resource ID **MAY** use the naming convention
298
299     * ``{vm-type}_RSC``
300
301     where
302
303     * ``{vm-type}`` is the vm-type
304     * ``RSC`` signifies that it is the Resource Software Config
305
306 OS::Neutron::Net
307 ~~~~~~~~~~~~~~~~
308
309 .. req::
310     :id: R-25720
311     :target: VNF
312     :keyword: MUST
313     :validation_mode: static
314     :updated: frankfurt
315
316     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Net``
317     Resource ID **MUST** use the naming convention
318
319     * ``int_{network-role}_network``
320
321     VNF Heat Orchestration Templates can only create ONAP internal networks
322     (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666).
323     There is no ``{index}`` after ``{network-role}`` because ``{network-role}``
324     **MUST** be unique in the scope of the VNF's
325     Heat Orchestration Template.
326
327 OS::Neutron::Port
328 ~~~~~~~~~~~~~~~~~~
329
330
331 .. req::
332     :id: R-20453
333     :target: VNF
334     :keyword: MUST
335     :validation_mode: static
336     :updated: frankfurt
337
338     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
339     that is attaching to an ONAP external network (per the ONAP definition,
340     see Requirement R-57424 and R-16968), the ``OS::Neutron::Port``
341     Resource ID
342     **MUST** use the naming convention
343
344     * ``{vm-type}_{vm-type_index}_{network-role}_port_{port-index}``
345
346     where
347
348     * ``{vm-type}`` is the vm-type
349     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
350       the VNF.  The
351       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
352       in the VNF and
353       **MUST** increment by one each time a new instance of a ``{vm-type}``
354       is referenced.
355     * ``{network-role}`` is the network-role of the ONAP external network
356       that the port is attached to
357     * ``{port_index}`` references the instance of the port on the ``{vm-type}``
358       attached to ``{network-role}`` network.  The
359       ``{port_index}`` is a numeric value that **MUST** start at zero on an
360       instance of a ``{vm-type}`` and **MUST** increment by one each time a
361       new port is defined on the instance of the ``{vm-type}`` attached to
362       ``{network-role}`` network.
363
364 .. req::
365     :id: R-26351
366     :target: VNF
367     :keyword: MUST
368     :validation_mode: static
369     :updated: frankfurt
370
371     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
372     that is attaching to an ONAP internal network
373     (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666),
374     the ``OS::Neutron::Port`` Resource ID **MUST**
375     use the naming convention
376
377     * ``{vm-type}_{vm-type_index}_int_{network-role}_port_{port-index}``
378
379     where
380
381     * ``{vm-type}`` is the vm-type
382     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
383       the VNF.  The
384       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
385       in the VNF and
386       **MUST** increment by one each time a new instance of a ``{vm-type}``
387       is referenced.
388     * ``{network-role}`` is the network-role of the ONAP internal network
389       that the port is attached to
390     * ``{port_index}`` references the instance of the port on the ``{vm-type}``
391       attached to ``{network-role}`` network.  The
392       ``{port_index}`` is a numeric value that **MUST** start at zero on an
393       instance of a ``{vm-type}`` and **MUST** increment by one each time a
394       new port is defined on the instance of the ``{vm-type}`` attached to
395       ``{network-role}`` network.
396
397 .. req::
398     :id: R-27469
399     :target: VNF
400     :keyword: SHOULD
401     :validation_mode: none
402     :updated: frankfurt
403
404     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
405     that is creating a *Reserve Port* with an IPv4 address, the
406     ``OS::Neutron::Port`` Resource ID
407     **SHOULD** use the naming convention
408
409     * ``reserve_port_{vm-type}_{network-role}_floating_ip_{index}``
410
411     where
412
413     * ``{vm-type}`` is the vm-type
414     * ``{network-role}`` is the network-role of the ONAP external network
415       that the port is attached to
416     * ``{index}`` is the instance of the IPv4 *Reserve Port*
417       for the vm-type attached to the network of ``{network-role}``.
418       The ``{index}`` starts at zero and increments by one
419       (as described in R-11690).
420
421
422 .. req::
423     :id: R-68520
424     :target: VNF
425     :keyword: SHOULD
426     :validation_mode: none
427     :updated: frankfurt
428
429     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Port``
430     that is creating a *Reserve Port* with an IPv6 address, the
431     ``OS::Neutron::Port`` Resource ID
432     **SHOULD** use the naming convention
433
434     * ``reserve_port_{vm-type}_{network-role}_floating_v6_ip_{index}``
435
436     where
437
438     * ``{vm-type}`` is the vm-type
439     * ``{network-role}`` is the network-role of the ONAP external network
440       that the port is attached to
441     * ``{index}`` is the instance of the IPv6 *Reserve Port*
442       for the vm-type attached to the network of ``{network-role}``.
443       The ``{index}`` starts at zero and increments by one
444       (as described in R-11690).
445
446 OS::Neutron::SecurityGroup
447 ~~~~~~~~~~~~~~~~~~~~~~~~~~
448
449 .. req::
450     :id: R-08775
451     :target: VNF
452     :keyword: SHOULD
453     :updated: frankfurt
454
455     A VNF's Heat Orchestration Template's Resource
456     ``OS::Neutron::SecurityGroup``
457     that is applicable to one ``{vm-type}`` and more than one network
458     (ONAP internal network
459     and/or ONAP external network), the ``OS::Neutron::SecurityGroup``
460     Resource ID **SHOULD** use the naming convention
461
462     * ``{vm-type}_security_group``
463
464     where
465
466     * ``{vm-type}`` is the vm-type
467
468 .. req::
469     :id: R-03595
470     :target: VNF
471     :keyword: SHOULD
472     :updated: frankfurt
473
474     A VNF's Heat Orchestration Template's Resource
475     ``OS::Neutron::SecurityGroup`` that
476     is applicable to more than one ``{vm-type}`` and one ONAP external network
477     (per the ONAP definition, see Requirement R-57424 and R-16968),
478     the ``OS::Neutron::SecurityGroup`` Resource ID
479     **SHOULD** use the naming convention
480
481     * ``{network-role}_security_group``
482
483     where
484
485     * ``{network-role}`` is the network-role of the ONAP external network
486
487 .. req::
488     :id: R-73213
489     :target: VNF
490     :keyword: SHOULD
491     :updated: frankfurt
492
493     A VNF's Heat Orchestration Template's Resource
494     ``OS::Neutron::SecurityGroup`` that
495     is applicable to more than one ``{vm-type}`` and one ONAP internal network,
496     (per the ONAP definition, see Requirements R-52425 and R-46461 and
497     R-35666), the ``OS::Neutron::SecurityGroup`` Resource ID
498     **SHOULD** use the naming convention
499
500     * ``int_{network-role}_security_group``
501
502     where
503
504     * ``{network-role}`` is the network-role of the ONAP internal network
505
506 .. req::
507     :id: R-17334
508     :target: VNF
509     :keyword: SHOULD
510     :updated: frankfurt
511
512     A VNF's Heat Orchestration Template's Resource
513     ``OS::Neutron::SecurityGroup``
514     that is applicable to one ``{vm-type}`` and one ONAP external network
515     (per the ONAP definition, see Requirement R-57424 and R-16968),
516     the ``OS::Neutron::SecurityGroup`` Resource ID
517     **SHOULD** use the naming convention
518
519     * ``{vm-type}_{network-role}_security_group``
520
521     where
522
523     * ``{vm-type}`` is the vm-type
524     * ``{network-role}`` is the network-role of the ONAP external network
525
526 .. req::
527     :id: R-14198
528     :target: VNF
529     :keyword: SHOULD
530     :updated: frankfurt
531
532     A VNF's Heat Orchestration Template's Resource
533     ``OS::Neutron::SecurityGroup`` that
534     is applicable to one {vm-type} and one ONAP internal network
535     (per the ONAP definition, see Requirements R-52425 and R-46461 and
536     R-35666), the
537     ``OS::Neutron::SecurityGroup`` Resource ID **SHOULD**
538     use the naming convention
539
540     * ``{vm-type}_int_{network-role}_security_group``
541
542     where
543
544     * ``{vm-type}`` is the vm-type
545     * ``{network-role}`` is the network-role of the ONAP internal network
546
547 .. req::
548     :id: R-30005
549     :target: VNF
550     :keyword: MAY
551     :updated: frankfurt
552
553     A VNF's Heat Orchestration Template's Resource
554     ``OS::Neutron::SecurityGroup`` that
555     is applicable to more than one ``{vm-type}`` and more than one network
556     (internal and/or external), the ``OS::Neutron::SecurityGroup`` Resource ID
557     **MAY**
558     use the naming convention
559
560     * ``shared_security_group``
561
562     or
563
564     * ``{vnf-type}_security_group``
565
566     where
567
568     * ``{vnf-type}`` describes the VNF
569
570 OS::Neutron::Subnet
571 ~~~~~~~~~~~~~~~~~~~
572
573 .. req::
574     :id: R-59434
575     :target: VNF
576     :keyword: SHOULD
577     :updated: frankfurt
578
579     A VNF's Heat Orchestration Template's Resource ``OS::Neutron::Subnet``
580     Resource ID **SHOULD** use the naming convention
581
582     * ``int_{network-role}_subnet_{index}``
583
584     where
585
586     * ``{network-role}`` is the network-role of the ONAP internal network
587       (per the ONAP definition, see Requirements R-52425 and R-46461 and
588       R-35666).
589     * ``{index}`` is the ``{index}`` of the subnet of the ONAP internal network.
590       The ``{index}`` starts at zero and increments by one
591       (as described in R-11690).
592
593 OS::Nova::Keypair
594 ~~~~~~~~~~~~~~~~~
595
596 .. req::
597     :id: R-24997
598     :target: VNF
599     :keyword: SHOULD
600     :updated: frankfurt
601
602     A VNF's Heat Orchestration Template's Resource ``OS::Nova::Keypair``
603     that applies to one ``{vm-type}``, the ``OS::Nova::Keypair``
604     Resource ID **SHOULD** use the naming convention
605
606     * ``{vm-type}_keypair_{index}``
607
608     where
609
610     * ``{vm-type}`` is the vm-type of the ``OS::Nova::Server``
611     * ``{index}`` is the ``{index}`` of the keypair.
612       The ``{index}`` starts at zero and increments by one
613       (as described in R-11690).
614
615 .. req::
616     :id: R-65516
617     :target: VNF
618     :keyword: SHOULD
619     :updated: frankfurt
620
621     A VNF's Heat Orchestration Template's Resource ``OS::Nova::Keypair``
622     that applies to all Virtual Machines in the VNF, the
623     ``OS::Nova::Keypair`` Resource ID **SHOULD** use the naming
624     convention
625
626     * ``{vnf-type}_keypair``
627
628     where
629
630     * ``{vnf-type}`` describes the VNF
631
632 OS::Nova::Server
633 ~~~~~~~~~~~~~~~~
634
635 .. req::
636     :id: R-29751
637     :target: VNF
638     :keyword: MUST
639     :validation_mode: static
640     :updated: dublin
641
642     A VNF's Heat Orchestration Template's Resource ``OS::Nova::Server``
643     Resource ID
644     **MUST** use the naming convention
645
646     * ``{vm-type}_server_{index}``
647
648     where
649
650     * ``{vm-type}`` is the vm-type
651     * ``{index}`` is the index.
652       The ``{index}`` **MUST** starts at zero and increment by one
653       as described in R-11690.
654
655 OS::Nova::ServerGroup
656 ~~~~~~~~~~~~~~~~~~~~~
657
658 .. req::
659     :id: R-15189
660     :target: VNF
661     :keyword: MAY
662     :updated: casablanca
663
664     A VNF's Heat Orchestration Template's Resource ``OS::Nova::ServerGroup``
665     Resource ID **MAY** use the naming convention
666
667     * ``{vm-type}_RSG``
668
669     or
670
671     * ``{vm-type}_Server_Grp``
672
673     or
674
675     * ``{vm-type}_ServerGroup``
676
677     or
678
679     * ``{vm-type}_servergroup``
680
681 Contrail Heat Resources Resource ID Naming Convention
682 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
683
684 Some Contrail Heat Resources Resource IDs
685 have mandatory or suggested naming conventions. They are provided
686 in the following sections.
687
688
689 OS::ContrailV2::InstanceIp
690 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
691
692 .. req::
693     :id: R-53310
694     :target: VNF
695     :keyword: MUST
696     :validation_mode: static
697     :updated: frankfurt
698
699
700     A VNF's Heat Orchestration Template's Resource
701     ``OS::ContrailV2::InstanceIp`` Resource ID
702     that is configuring an IPv4 Address on a virtual machine interface
703     (i.e., OS::ContrailV2::VirtualMachineInterface)
704     attached to an ONAP external network (per the ONAP definition,
705     see Requirement R-57424 and R-16968)
706     **MUST** use the naming convention
707
708     *  ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_IP_{index}``
709
710     where
711
712     * ``{vm-type}`` is the vm-type
713     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
714       the VNF.  The
715       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
716       in the VNF and
717       **MUST** increment by one each time a new instance of a ``{vm-type}``
718       is referenced.
719     * ``{network-role}`` is the network-role of the ONAP external
720       network that the virtual machine interface is attached to
721     * ``{vmi_index}`` references the instance of the virtual machine interface
722       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
723       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
724       instance of a ``{vm-type}`` and **MUST** increment by one each time a
725       new virtual machine interface is defined on the instance of the
726       ``{vm-type}`` attached to ``{network-role}`` network.
727     * ``IP`` signifies that an IPv4 address is being configured
728     * ``{index}`` references the instance of the IPv4 address configured
729       on the virtual machine interface.  The ``{index}`` is a numeric value
730       that **MUST** start at zero on an
731       instance of a virtual machine interface and **MUST** increment by one
732       each time a new IPv4 address is configured on the
733       virtual machine interface.
734
735 .. req::
736     :id: R-46128
737     :target: VNF
738     :keyword: MUST
739     :validation_mode: static
740     :updated: frankfurt
741
742     A VNF's Heat Orchestration Template's Resource
743     ``OS::ContrailV2::InstanceIp`` Resource ID
744     that is configuring an IPv6 Address on a virtual machine interface
745     (i.e., OS::ContrailV2::VirtualMachineInterface)
746     attached to an ONAP external network (per the ONAP definition,
747     see Requirement R-57424 and R-16968)
748     **MUST** use the naming convention
749
750     *  ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}_v6_IP_{index}``
751
752     where
753
754     * ``{vm-type}`` is the vm-type
755     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
756       the VNF.  The
757       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
758       in the VNF and
759       **MUST** increment by one each time a new instance of a ``{vm-type}``
760       is referenced.
761     * ``{network-role}`` is the network-role of the ONAP external network
762       that the port is attached to
763     * ``{vmi_index}`` references the instance of the virtual machine interface
764       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
765       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
766       instance of a ``{vm-type}`` and **MUST** increment by one each time a
767       new virtual machine interface is defined on the instance of the
768       ``{vm-type}`` attached to ``{network-role}`` network.
769     * ``v6_IP`` signifies that an IPv6 address is being configured
770     * ``{index}`` references the instance of the IPv6 address configured
771       on the virtual machine interface.  The ``{index}`` is a numeric value
772       that **MUST** start at zero on an
773       instance of a virtual machine interface and **MUST** increment by one
774       each time a new IPv6 address is configured on the
775       virtual machine interface.
776
777 .. req::
778     :id: R-62187
779     :target: VNF
780     :keyword: MUST
781     :validation_mode: static
782     :updated: frankfurt
783
784     A VNF's Heat Orchestration Template's Resource
785     ``OS::ContrailV2::InstanceIp`` Resource ID
786     that is configuring an IPv4 Address on a virtual machine interface
787     (i.e., OS::ContrailV2::VirtualMachineInterface)
788     attached to an ONAP internal network (per the ONAP definition, see
789     Requirements R-52425 and R-46461 and R-35666)
790     **MUST** use the naming convention
791
792     *  ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_IP_{index}``
793
794     where
795
796     * ``{vm-type}`` is the vm-type
797     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
798       the VNF.  The
799       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
800       in the VNF and
801       **MUST** increment by one each time a new instance of a ``{vm-type}``
802       is referenced.
803     * ``{network-role}`` is the network-role of the ONAP internal network
804       that the port is attached to
805     * ``{vmi_index}`` references the instance of the virtual machine interface
806       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
807       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
808       instance of a ``{vm-type}`` and **MUST** increment by one each time a
809       new virtual machine interface is defined on the instance of the
810       ``{vm-type}`` attached to ``{network-role}`` network.
811     * ``IP`` signifies that an IPv4 address is being configured
812     * ``{index}`` references the instance of the IPv4 address configured
813       on the virtual machine interface.  The ``{index}`` is a numeric value
814       that **MUST** start at zero on an
815       instance of a virtual machine interface and **MUST** increment by one
816       each time a new IPv4 address is configured on the
817       virtual machine interface.
818
819 .. req::
820     :id: R-87563
821     :target: VNF
822     :keyword: MUST
823     :validation_mode: static
824     :updated: frankfurt
825
826     A VNF's Heat Orchestration Template's Resource
827     ``OS::ContrailV2::InstanceIp`` Resource ID
828     that is configuring an IPv6 Address on a virtual machine interface
829     (i.e., OS::ContrailV2::VirtualMachineInterface)
830     attached to an ONAP internal network (per the ONAP definition, see
831     Requirements R-52425 and R-46461 and R-35666)
832     **MUST** use the naming convention
833
834     *  ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}_v6_IP_{index}``
835
836     where
837
838     * ``{vm-type}`` is the vm-type
839     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
840       the VNF.  The
841       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
842       in the VNF and
843       **MUST** increment by one each time a new instance of a ``{vm-type}``
844       is referenced.
845     * ``{network-role}`` is the network-role of the ONAP internal network
846       that the port is attached to
847     * ``{vmi_index}`` references the instance of the virtual machine interface
848       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
849       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
850       instance of a ``{vm-type}`` and **MUST** increment by one each time a
851       new virtual machine interface is defined on the instance of the
852       ``{vm-type}`` attached to ``{network-role}`` network.
853     * ``v6_IP`` signifies that an IPv6 address is being configured
854     * ``{index}`` references the instance of the IPv6 address configured
855       on the virtual machine interface.  The ``{index}`` is a numeric value
856       that **MUST** start at zero on an
857       instance of a virtual machine interface and **MUST** increment by one
858       each time a new IPv6 address is configured on the
859       virtual machine interface.
860
861 OS::ContrailV2::InterfaceRouteTable
862 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
863
864 .. req::
865     :id: R-81214
866     :target: VNF
867     :keyword: MUST
868     :validation_mode: static
869     :updated: casablanca
870
871     A VNF's Heat Orchestration Template's Resource
872     ``OS::ContrailV2::InterfaceRouteTable``
873     Resource ID
874     **MUST**
875     contain the ``{network-role}``.
876
877 .. req::
878     :id: R-28189
879     :target: VNF
880     :keyword: MAY
881     :updated: casablanca
882
883     A VNF's Heat Orchestration Template's Resource
884     ``OS::ContrailV2::InterfaceRouteTable``
885     Resource ID **MAY** use the naming convention
886
887     * ``{network-role}_RIRT``
888
889     where
890
891     * ``{network-role}`` is the network-role
892     * ``RIRT`` signifies that it is the Resource Interface Route Table
893
894 OS::ContrailV2::NetworkIpam
895 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
896
897 .. req::
898     :id: R-30753
899     :target: VNF
900     :keyword: MUST
901     :validation_mode: static
902     :updated: frankfurt
903
904     A VNF's Heat Orchestration Template's Resource
905     ``OS::ContrailV2::NetworkIpam``
906     Resource ID
907     **MUST**
908     contain the ``{network-role}`` of the ONAP internal network (per the ONAP
909     definition, see Requirements R-52425 and R-46461 and R-35666) that the
910     resource is associated with.
911
912 .. req::
913     :id: R-81979
914     :target: VNF
915     :keyword: MAY
916     :updated: casablanca
917
918     A VNF's Heat Orchestration Template's Resource
919     ``OS::ContrailV2::NetworkIpam``
920     Resource ID **MAY** use the naming convention
921
922     * ``{network-role}_RNI``
923
924     where
925
926     * ``{network-role}`` is the network-role
927     * ``RNI`` signifies that it is the Resource Network IPAM
928
929 OS::ContrailV2::PortTuple
930 ~~~~~~~~~~~~~~~~~~~~~~~~~
931
932 .. req::
933     :id: R-20065
934     :target: VNF
935     :keyword: MUST
936     :validation_mode: static
937     :updated: casablanca
938
939     A VNF's Heat Orchestration Template's Resource
940     ``OS::ContrailV2::PortTuple``
941     Resource ID **MUST** contain the ``{vm-type}``.
942
943 .. req::
944     :id: R-84457
945     :target: VNF
946     :keyword: MAY
947     :updated: casablanca
948
949     A VNF's Heat Orchestration Template's Resource ``OS::ContrailV2::PortTuple``
950     Resource ID **MAY** use the naming convention
951
952     * ``{vm-type}_RPT``
953
954     where
955
956     * ``{vm-type}`` is the vm-type
957     * ``RPT`` signifies that it is the Resource Port Tuple
958
959 OS::ContrailV2::ServiceHealthCheck
960 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
961
962 .. req::
963     :id: R-76014
964     :target: VNF
965     :keyword: MUST
966     :validation_mode: static
967     :updated: casablanca
968
969     A VNF's Heat Orchestration Template's Resource
970     ``OS::ContrailV2::ServiceHealthCheck``
971     Resource ID
972     **MUST**
973     contain the ``{vm-type}``.
974
975 .. req::
976     :id: R-65618
977     :target: VNF
978     :keyword: MAY
979     :updated: casablanca
980
981     A VNF's Heat Orchestration Template's Resource
982     ``OS::ContrailV2::ServiceHealthCheck`` Resource ID **MAY** use the naming convention
983
984     * ``{vm-type}_RSHC_{LEFT|RIGHT}``
985
986     where
987
988     * ``{vm-type}`` is the vm-type
989     * ``RSHC`` signifies that it is the Resource Service Health Check
990     * ``LEFT`` is used if the Service Health Check is on the left interface
991     * ``RIGHT`` is used if the Service Health Check is on the right interface
992
993 OS::ContrailV2::ServiceTemplate
994 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
995
996 .. req::
997     :id: R-16437
998     :target: VNF
999     :keyword: MUST
1000     :validation_mode: static
1001     :updated: casablanca
1002
1003     A VNF's Heat Orchestration Template's Resource
1004     ``OS::ContrailV2::ServiceTemplate``
1005     Resource ID **MUST** contain the ``{vm-type}``.
1006
1007 .. req::
1008     :id: R-14447
1009     :target: VNF
1010     :keyword: MAY
1011     :updated: dublin
1012
1013     A VNF's Heat Orchestration Template's Resource
1014     ``OS::ContrailV2::ServiceTemplate``
1015     Resource ID **MAY** use the naming convention
1016
1017     * ``{vm-type}_RST_{index}``
1018
1019     where
1020
1021     * ``{vm-type}`` is the vm-type
1022     * ``RST`` signifies that it is the Resource Service Template
1023     * ``{index}`` is the index.
1024       The ``{index}`` starts at zero and increments by one
1025       (as described in R-11690).
1026
1027 OS::ContrailV2::VirtualMachineInterface
1028 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1029
1030 .. req::
1031     :id: R-96253
1032     :target: VNF
1033     :keyword: MUST
1034     :validation_mode: static
1035     :updated: frankfurt
1036
1037     A VNF's Heat Orchestration Template's Resource
1038     ``OS::ContrailV2::VirtualMachineInterface`` Resource ID
1039     that is attaching to an ONAP external network (per the ONAP definition,
1040     see Requirement R-57424 and R-16968)
1041     **MUST** use the naming convention
1042
1043     * ``{vm-type}_{vm-type_index}_{network-role}_vmi_{vmi_index}``
1044
1045     where
1046
1047     * ``{vm-type}`` is the vm-type
1048     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
1049       the VNF.  The
1050       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
1051       in the VNF and
1052       **MUST** increment by one each time a new instance of a ``{vm-type}``
1053       is referenced.
1054     * ``{network-role}`` is the network-role of the ONAP external network
1055       that the port (i.e. virtual machine interface) is attached to
1056     * ``{vmi_index}`` references the instance of the virtual machine interface
1057       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
1058       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
1059       instance of a ``{vm-type}`` and **MUST** increment by one each time a
1060       new virtual machine interface is defined on the instance of the
1061       ``{vm-type}`` attached to ``{network-role}`` network.
1062
1063
1064 .. req::
1065     :id: R-50468
1066     :target: VNF
1067     :keyword: MUST
1068     :validation_mode: static
1069     :updated: frankfurt
1070
1071     A VNF's Heat Orchestration Template's Resource
1072     ``OS::ContrailV2::VirtualMachineInterface`` Resource ID
1073     that is attaching to an ONAP internal network (per the ONAP definition, see
1074     Requirements R-52425 and R-46461 and R-35666)
1075     **MUST** use the naming convention
1076
1077     * ``{vm-type}_{vm-type_index}_int_{network-role}_vmi_{vmi_index}``
1078
1079     where
1080
1081     * ``{vm-type}`` is the vm-type
1082     * ``{vm-type_index}`` references the instance of the ``{vm-type}`` in
1083       the VNF.  The
1084       ``{vm-type_index}`` is a numeric value that **MUST** start at zero
1085       in the VNF and
1086       **MUST** increment by one each time a new instance of a ``{vm-type}``
1087       is referenced.
1088     * ``{network-role}`` is the network-role of the ONAP internal network
1089       that the port (i.e. virtual machine interface) is attached to
1090     * ``{vmi_index}`` references the instance of the virtual machine interface
1091       on the ``{vm-type}`` attached to ``{network-role}`` network.  The
1092       ``{vmi_index}`` is a numeric value that **MUST** start at zero on an
1093       instance of a ``{vm-type}`` and **MUST** increment by one each time a
1094       new virtual machine interface is defined on the instance of the
1095       ``{vm-type}`` attached to ``{network-role}`` network.
1096
1097
1098 OS::ContrailV2::VirtualNetwork
1099 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1100
1101 .. req::
1102     :id: R-99110
1103     :target: VNF
1104     :keyword: MUST
1105     :validation_mode: static
1106     :updated: frankfurt
1107
1108     A VNF's Heat Orchestration Template's Resource
1109     ``OS::ContrailV2::VirtualNetwork`` Resource ID **MUST** use the naming
1110     convention
1111
1112     * ``int_{network-role}_network``
1113
1114     VNF Heat Orchestration Templates can only create ONAP internal networks
1115     (per the ONAP definition, see Requirements R-52425 and R-46461 and R-35666).
1116     There is no ``{index}`` after ``{network-role}`` because ``{network-role}``
1117     **MUST** be unique in the scope of the VNF's
1118     Heat Orchestration Template.