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