Generalize member-vnf-index as string in constituent-vnfd in NSD to allow symbolic...
[osm/IM.git] / models / yang / vnfd-base.yang
1
2 /*
3  *
4  *   Copyright 2017 RIFT.IO Inc
5  *
6  *   Licensed under the Apache License, Version 2.0 (the "License");
7  *   you may not use this file except in compliance with the License.
8  *   You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *   Unless required by applicable law or agreed to in writing, software
13  *   distributed under the License is distributed on an "AS IS" BASIS,
14  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *   See the License for the specific language governing permissions and
16  *   limitations under the License.
17  *
18  *
19  */
20
21 module vnfd-base
22 {
23   namespace "http://riftio.com/ns/riftware-1.0/vnfd-base";
24   prefix "vnfd-base";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import ietf-inet-types {
31     prefix "inet";
32   }
33
34   revision 2017-02-28 {
35     description
36       "Initial revision. This YANG file defines
37        the common types for Virtual Network Function
38        (VNF) descriptor";
39     reference
40       "Derived from earlier versions of base YANG files";
41   }
42
43   grouping common-connection-point {
44     leaf name {
45       description "Name of the connection point";
46       type string;
47     }
48
49     leaf id {
50       description "Identifier for the internal connection points";
51       type string;
52     }
53
54     leaf short-name {
55       description "Short name to appear as label in the UI";
56       type string;
57     }
58
59     leaf type {
60       description "Type of the connection point.";
61       type manotypes:connection-point-type;
62     }
63
64     leaf port-security-enabled {
65       description "Enables the port security for the port";
66       type boolean;
67     }
68   }
69
70   typedef interface-type {
71     type enumeration {
72       enum INTERNAL;
73       enum EXTERNAL;
74     }
75   }
76
77   typedef vnf-operational-status {
78     type enumeration {
79       enum init;
80       enum running;
81       enum upgrading;
82       enum terminate;
83       enum terminated;
84       enum failed;
85     }
86   }
87
88   grouping virtual-interface {
89     container virtual-interface {
90       description
91           "Container for the virtual interface properties";
92
93       leaf type {
94         description
95             "Specifies the type of virtual interface
96              between VM and host.
97              VIRTIO          : Use the traditional VIRTIO interface.
98              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
99              SR-IOV          : Use SR-IOV interface.
100              E1000           : Emulate E1000 interface.
101              RTL8139         : Emulate RTL8139 interface.
102              PCNET           : Emulate PCNET interface.
103              OM-MGMT         : Deprecated! Use VIRTIO instead and set the VNF management interface at vnfd:mgmt-interface:cp";
104
105         type enumeration {
106           enum OM-MGMT;
107           enum PCI-PASSTHROUGH;
108           enum SR-IOV;
109           enum VIRTIO;
110           enum E1000;
111           enum RTL8139;
112           enum PCNET;
113         }
114         default "VIRTIO";
115       }
116
117       leaf vpci {
118         description
119             "Specifies the virtual PCI address. Expressed in
120              the following format dddd:dd:dd.d. For example
121              0000:00:12.0. This information can be used to
122              pass as metadata during the VM creation.";
123         type string;
124       }
125
126       leaf bandwidth {
127         description
128             "Aggregate bandwidth of the NIC.";
129         type uint64;
130       }
131     }
132   }
133
134   grouping vnfd-descriptor {
135       leaf id {
136         description "Identifier for the VNFD.";
137         type string {
138           length "1..63";
139         }
140       }
141
142       leaf name {
143         description "VNFD name.";
144         mandatory true;
145         type string;
146       }
147
148       leaf short-name {
149         description "Short name to appear as label in the UI";
150         type string;
151       }
152
153       leaf vendor {
154         description "Vendor of the VNFD.";
155         type string;
156       }
157
158       leaf logo {
159         description
160             "Vendor logo for the Virtual Network Function";
161         type string;
162       }
163
164       leaf description {
165         description "Description of the VNFD.";
166         type string;
167       }
168
169       leaf version {
170         description "Version of the VNFD";
171         type string;
172       }
173
174       container vnf-configuration {
175         uses manotypes:vca-configuration;
176       }
177
178       leaf operational-status {
179          description
180            "The operational status of the VNF
181              init                : The VNF has just started.
182              running             : The VNF is active in VM
183              upgrading           : The VNF is being upgraded (EXPERIMENTAL)
184              terminate           : The VNF is being terminated
185              terminated          : The VNF is in the terminated state.
186              failed              : The VNF  instantiation failed.
187            ";
188          type vnf-operational-status;
189       }
190
191       container mgmt-interface {
192         description
193             "Interface over which the VNF is managed.";
194
195         choice endpoint-type {
196           description
197               "Indicates the type of management endpoint.";
198
199           case ip {
200             description
201                 "Specifies the static IP address for managing the VNF.";
202             leaf ip-address {
203               type inet:ip-address;
204             }
205           }
206
207           case vdu-id {
208             description
209                 "Use the default management interface on this VDU.";
210             leaf vdu-id {
211               type leafref {
212                 path "../../vdu/id";
213               }
214             }
215           }
216
217           case cp {
218             description
219                 "Use the ip address associated with this connection point. This cp is then considered as management.";
220             leaf cp {
221               type leafref {
222                 path "../../connection-point/name";
223               }
224             }
225           }
226         }
227
228         leaf port {
229           description
230               "Port for the management interface.";
231           type inet:port-number;
232         }
233
234         container dashboard-params {
235           description "Parameters for the VNF dashboard";
236
237           leaf path {
238             description "The HTTP path for the dashboard";
239             type string;
240           }
241
242           leaf https {
243             description "Pick HTTPS instead of HTTP , Default is false";
244             type boolean;
245           }
246
247           leaf port {
248             description "The HTTP port for the dashboard";
249             type inet:port-number;
250           }
251         }
252       }
253
254       list internal-vld {
255         key "id";
256         description
257           "List of Internal Virtual Link Descriptors (VLD).
258           The internal VLD describes the basic topology of
259           the connectivity such as E-LAN, E-Line, E-Tree.
260           between internal VNF components of the system.";
261
262         leaf id {
263           description "Identifier for the VLD";
264           type string;
265         }
266
267         leaf name {
268           description "Name of the internal VLD";
269           type string;
270         }
271
272         leaf short-name {
273           description "Short name to appear as label in the UI";
274           type string;
275         }
276
277         leaf description {
278           type string;
279         }
280
281         leaf type {
282           type manotypes:virtual-link-type;
283         }
284
285         leaf root-bandwidth {
286           description
287               "For ELAN this is the aggregate bandwidth.";
288           type uint64;
289         }
290
291         leaf leaf-bandwidth {
292           description
293               "For ELAN this is the bandwidth of branches.";
294           type uint64;
295         }
296
297         list internal-connection-point {
298           key "id-ref";
299           description "List of internal connection points in this VLD";
300           leaf id-ref {
301             description "reference to the internal connection point id";
302             type leafref {
303               path "../../../vdu/internal-connection-point/id";
304             }
305           }
306           leaf ip-address {
307             description "IP address of the internal connection point";
308             type inet:ip-address;
309           }
310         }
311
312         uses manotypes:provider-network;
313         choice init-params {
314           description "Extra parameters for VLD instantiation";
315
316           case vim-network-ref {
317             leaf vim-network-name {
318               description
319                   "Name of network in VIM account. This is used to indicate
320                     pre-provisioned network name in cloud account.";
321               type string;
322             }
323           }
324
325           case vim-network-profile {
326             leaf ip-profile-ref {
327               description "Named reference to IP-profile object";
328               type string;
329             }
330           }
331
332         }
333       }
334
335       uses manotypes:ip-profile-list;
336
337       list connection-point {
338         key "name";
339         description
340           "List for external connection points. Each VNF has one
341           or more external connection points that connect the VNF
342           to other VNFs or to external networks. Each VNF exposes
343           connection points to the orchestrator, which can construct
344           network services by connecting the connection points
345           between different VNFs. The NFVO will use VLDs and VNFFGs
346           at the network service level to construct network services.";
347
348         uses common-connection-point;
349       }
350
351       list vdu {
352         description "List of Virtual Deployment Units";
353         key "id";
354
355         leaf id {
356           description "Unique id for the VDU";
357           type string;
358         }
359
360         leaf name {
361           description "Unique name for the VDU";
362           type string;
363         }
364
365         leaf description {
366             description "Description of the VDU.";
367             type string;
368         }
369
370         leaf count {
371           description "Number of instances of VDU";
372           type uint64;
373         }
374
375         leaf mgmt-vpci {
376           description
377               "Specifies the virtual PCI address. Expressed in
378              the following format dddd:dd:dd.d. For example
379              0000:00:12.0. This information can be used to
380              pass as metadata during the VM creation.";
381           type string;
382         }
383
384         uses manotypes:vm-flavor;
385         uses manotypes:guest-epa;
386         uses manotypes:vswitch-epa;
387         uses manotypes:hypervisor-epa;
388         uses manotypes:host-epa;
389
390         list alarm {
391           key "alarm-id";
392
393           uses manotypes:alarm;
394         }
395
396         uses manotypes:image-properties;
397
398         list alternative-images {
399           key "vim-type";
400           description
401             "List of alternative images per VIM type.
402             Different images can be used for specific types of VIMs instead
403             of the default image. This allows deployments in sites where the
404             image identifier in the VIM is given by the VIM provider and
405             cannot be modified.
406             If an alternative image is specified for a VIM type, it will prevail
407             over the default image";
408
409           leaf vim-type {
410             description "VIM type: openvim, openstack, vmware, aws, etc.";
411             type string;
412           }
413
414           uses manotypes:image-properties;
415         }
416
417         container vdu-configuration {
418           uses manotypes:vca-configuration;
419         }
420
421         choice cloud-init-input {
422           description
423             "Indicates how the contents of cloud-init script are provided.
424              There are 2 choices - inline or in a file";
425
426           case inline {
427             leaf cloud-init {
428               description
429                 "Contents of cloud-init script, provided inline, in cloud-config format";
430               type string;
431             }
432           }
433
434           case filename {
435             leaf cloud-init-file {
436               description
437                 "Name of file with contents of cloud-init script in cloud-config format";
438                 type string;
439             }
440           }
441         }
442
443         uses manotypes:supplemental-boot-data;
444
445         list internal-connection-point {
446           key "id";
447           description
448             "List for internal connection points. Each VNFC
449             has zero or more internal connection points.
450             Internal connection points are used for connecting
451             the VNF with components internal to the VNF. If a VNF
452             has only one VNFC, it may not have any internal
453             connection points.";
454
455           uses common-connection-point;
456
457           leaf internal-vld-ref {
458             type leafref {
459               path "../../../internal-vld/id";
460             }
461           }
462         }
463
464         list interface {
465           description
466               "List of Interfaces (external and internal) for the VNF";
467           key name;
468
469           leaf name {
470             description
471                 "Name of the interface. Note that this
472                 name has only local significance to the VDU.";
473             type string;
474           }
475
476           leaf position {
477             description
478                 "Explicit Position of the interface within the list";
479             type uint32;
480           }
481
482           leaf type {
483             description
484                 "Type of the Interface";
485             type interface-type;
486
487             default "EXTERNAL";
488           }
489
490           leaf mac-address {
491             description
492                 "MAC address of the interface.
493                 Some VNFs require a specific MAC address to be configured
494                 in the interface. While this is not recommended at all in
495                 NFV environments, this parameter exists to allow those
496                 scenarios.
497                 This parameter will be likely deprecated in the future.";
498             type string;
499           }
500
501           choice connection-point-type {
502             case internal {
503               leaf internal-connection-point-ref {
504                 description
505                     "Leaf Ref to the particular internal connection point";
506                 type leafref {
507                    path "../../internal-connection-point/id";
508                  }
509               }
510             }
511             case external {
512               leaf external-connection-point-ref {
513                 description
514                     "Leaf Ref to the particular external connection point";
515                 type leafref {
516                    path "../../../connection-point/name";
517                  }
518               }
519             }
520           }
521
522           uses virtual-interface;
523         }
524
525
526         list volumes {
527           key "name";
528
529           leaf name {
530             description "Name of the disk-volumes, e.g. vda, vdb etc";
531             type string;
532           }
533
534           uses manotypes:volume-info;
535         }
536       }
537
538       list vdu-dependency {
539         description
540             "List of VDU dependencies.";
541
542         key vdu-source-ref;
543         leaf vdu-source-ref {
544           type leafref {
545             path "../../vdu/id";
546           }
547         }
548
549         leaf vdu-depends-on-ref {
550           description
551             "Reference to the VDU on which
552             the source VDU depends.";
553           type leafref {
554             path "../../vdu/id";
555           }
556         }
557       }
558
559       leaf service-function-chain {
560         description "Type of node in Service Function Chaining Architecture";
561
562         type enumeration {
563           enum UNAWARE;
564           enum CLASSIFIER;
565           enum SF;
566           enum SFF;
567         }
568         default "UNAWARE";
569       }
570
571       leaf service-function-type {
572         description
573           "Type of Service Function.
574            NOTE: This needs to map with Service Function Type in ODL to
575            support VNFFG. Service Function Type is mandatory param in ODL
576            SFC. This is temporarily set to string for ease of use";
577         type string;
578       }
579
580       uses manotypes:monitoring-param;
581
582       list placement-groups {
583         description "List of placement groups at VNF level";
584
585         key "name";
586         uses manotypes:placement-group-info;
587
588         list member-vdus {
589
590           description
591               "List of VDUs that are part of this placement group";
592           key "member-vdu-ref";
593
594           leaf member-vdu-ref {
595             type leafref {
596               path "../../../vdu/id";
597             }
598           }
599         }
600       }
601   }
602 }
603
604 // vim: sw=2