75dcadc471d1c252934eb7fde349fa3f1630ec99
[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         leaf internal-vld-ref {
351           description
352             "Reference to an internal VLD of the VNF. This field is
353             optional. It allows exposing an internal VLD through a
354             connection point. When building a NS, this VNF CP might be
355             connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
356             VLD of the NS) will become the same network and the IP profile will
357             be the one configured at NS level.";
358           type leafref {
359             path "../../internal-vld/id";
360           }
361         }
362       }
363
364       list vdu {
365         description "List of Virtual Deployment Units";
366         key "id";
367
368         leaf id {
369           description "Unique id for the VDU";
370           type string;
371         }
372
373         leaf name {
374           description "Unique name for the VDU";
375           type string;
376         }
377
378         leaf description {
379             description "Description of the VDU.";
380             type string;
381         }
382
383         leaf count {
384           description "Number of instances of VDU";
385           type uint64;
386         }
387
388         leaf mgmt-vpci {
389           description
390               "Specifies the virtual PCI address. Expressed in
391              the following format dddd:dd:dd.d. For example
392              0000:00:12.0. This information can be used to
393              pass as metadata during the VM creation.";
394           type string;
395         }
396
397         uses manotypes:vm-flavor;
398         uses manotypes:guest-epa;
399         uses manotypes:vswitch-epa;
400         uses manotypes:hypervisor-epa;
401         uses manotypes:host-epa;
402
403         list alarm {
404           key "alarm-id";
405
406           uses manotypes:alarm;
407         }
408
409         uses manotypes:image-properties;
410
411         list alternative-images {
412           key "vim-type";
413           description
414             "List of alternative images per VIM type.
415             Different images can be used for specific types of VIMs instead
416             of the default image. This allows deployments in sites where the
417             image identifier in the VIM is given by the VIM provider and
418             cannot be modified.
419             If an alternative image is specified for a VIM type, it will prevail
420             over the default image";
421
422           leaf vim-type {
423             description "VIM type: openvim, openstack, vmware, aws, etc.";
424             type string;
425           }
426
427           uses manotypes:image-properties;
428         }
429
430         container vdu-configuration {
431           uses manotypes:vca-configuration;
432         }
433
434         choice cloud-init-input {
435           description
436             "Indicates how the contents of cloud-init script are provided.
437              There are 2 choices - inline or in a file";
438
439           case inline {
440             leaf cloud-init {
441               description
442                 "Contents of cloud-init script, provided inline, in cloud-config format";
443               type string;
444             }
445           }
446
447           case filename {
448             leaf cloud-init-file {
449               description
450                 "Name of file with contents of cloud-init script in cloud-config format";
451                 type string;
452             }
453           }
454         }
455
456         uses manotypes:supplemental-boot-data;
457
458         list internal-connection-point {
459           key "id";
460           description
461             "List for internal connection points. Each VNFC
462             has zero or more internal connection points.
463             Internal connection points are used for connecting
464             the VNF with components internal to the VNF. If a VNF
465             has only one VNFC, it may not have any internal
466             connection points.";
467
468           uses common-connection-point;
469
470           leaf internal-vld-ref {
471             type leafref {
472               path "../../../internal-vld/id";
473             }
474           }
475         }
476
477         list interface {
478           description
479               "List of Interfaces (external and internal) for the VNF";
480           key name;
481
482           leaf name {
483             description
484                 "Name of the interface. Note that this
485                 name has only local significance to the VDU.";
486             type string;
487           }
488
489           leaf position {
490             description
491                 "Explicit Position of the interface within the list";
492             type uint32;
493           }
494
495           leaf type {
496             description
497                 "Type of the Interface";
498             type interface-type;
499
500             default "EXTERNAL";
501           }
502
503           leaf mac-address {
504             description
505                 "MAC address of the interface.
506                 Some VNFs require a specific MAC address to be configured
507                 in the interface. While this is not recommended at all in
508                 NFV environments, this parameter exists to allow those
509                 scenarios.
510                 This parameter will be likely deprecated in the future.";
511             type string;
512           }
513
514           choice connection-point-type {
515             case internal {
516               leaf internal-connection-point-ref {
517                 description
518                     "Leaf Ref to the particular internal connection point";
519                 type leafref {
520                    path "../../internal-connection-point/id";
521                  }
522               }
523             }
524             case external {
525               leaf external-connection-point-ref {
526                 description
527                     "Leaf Ref to the particular external connection point";
528                 type leafref {
529                    path "../../../connection-point/name";
530                  }
531               }
532             }
533           }
534
535           uses virtual-interface;
536         }
537
538
539         list volumes {
540           key "name";
541
542           leaf name {
543             description "Name of the disk-volumes, e.g. vda, vdb etc";
544             type string;
545           }
546
547           uses manotypes:volume-info;
548         }
549       }
550
551       list vdu-dependency {
552         description
553             "List of VDU dependencies.";
554
555         key vdu-source-ref;
556         leaf vdu-source-ref {
557           type leafref {
558             path "../../vdu/id";
559           }
560         }
561
562         leaf vdu-depends-on-ref {
563           description
564             "Reference to the VDU on which
565             the source VDU depends.";
566           type leafref {
567             path "../../vdu/id";
568           }
569         }
570       }
571
572       leaf service-function-chain {
573         description "Type of node in Service Function Chaining Architecture";
574
575         type enumeration {
576           enum UNAWARE;
577           enum CLASSIFIER;
578           enum SF;
579           enum SFF;
580         }
581         default "UNAWARE";
582       }
583
584       leaf service-function-type {
585         description
586           "Type of Service Function.
587            NOTE: This needs to map with Service Function Type in ODL to
588            support VNFFG. Service Function Type is mandatory param in ODL
589            SFC. This is temporarily set to string for ease of use";
590         type string;
591       }
592
593       uses manotypes:monitoring-param;
594
595       list placement-groups {
596         description "List of placement groups at VNF level";
597
598         key "name";
599         uses manotypes:placement-group-info;
600
601         list member-vdus {
602
603           description
604               "List of VDUs that are part of this placement group";
605           key "member-vdu-ref";
606
607           leaf member-vdu-ref {
608             type leafref {
609               path "../../../vdu/id";
610             }
611           }
612         }
613       }
614   }
615 }
616
617 // vim: sw=2