389bc69e7a9d3f24ade7756cae4858a792c8b565
[osm/SO.git] / models / plugins / 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   grouping virtual-interface {
78     container virtual-interface {
79       description
80           "Container for the virtual interface properties";
81
82       leaf type {
83         description
84             "Specifies the type of virtual interface
85              between VM and host.
86              VIRTIO          : Use the traditional VIRTIO interface.
87              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
88              SR-IOV          : Use SR-IOV interface.
89              E1000           : Emulate E1000 interface.
90              RTL8139         : Emulate RTL8139 interface.
91              PCNET           : Emulate PCNET interface.
92              OM-MGMT         : Used to specify openmano mgmt external-connection type";
93
94         type enumeration {
95           enum OM-MGMT;
96           enum PCI-PASSTHROUGH;
97           enum SR-IOV;
98           enum VIRTIO;
99           enum E1000;
100           enum RTL8139;
101           enum PCNET;
102         }
103         default "VIRTIO";
104       }
105
106       leaf vpci {
107         description
108             "Specifies the virtual PCI address. Expressed in
109              the following format dddd:dd:dd.d. For example
110              0000:00:12.0. This information can be used to
111              pass as metadata during the VM creation.";
112         type string;
113       }
114
115       leaf bandwidth {
116         description
117             "Aggregate bandwidth of the NIC.";
118         type uint64;
119       }
120     }
121   }
122
123   grouping vnfd-descriptor {
124       leaf id {
125         description "Identifier for the VNFD.";
126         type string {
127           length "1..63";
128         }
129       }
130
131       leaf name {
132         description "VNFD name.";
133         mandatory true;
134         type string;
135       }
136
137       leaf short-name {
138         description "Short name to appear as label in the UI";
139         type string;
140       }
141
142       leaf vendor {
143         description "Vendor of the VNFD.";
144         type string;
145       }
146
147       leaf logo {
148         description
149             "Vendor logo for the Virtual Network Function";
150         type string;
151       }
152
153       leaf description {
154         description "Description of the VNFD.";
155         type string;
156       }
157
158       leaf version {
159         description "Version of the VNFD";
160         type string;
161       }
162
163       uses manotypes:vnf-configuration;
164
165       container mgmt-interface {
166         description
167             "Interface over which the VNF is managed.";
168
169         choice endpoint-type {
170           description
171               "Indicates the type of management endpoint.";
172
173           case ip {
174             description
175                 "Specifies the static IP address for managing the VNF.";
176             leaf ip-address {
177               type inet:ip-address;
178             }
179           }
180
181           case vdu-id {
182             description
183                 "Use the default management interface on this VDU.";
184             leaf vdu-id {
185               type leafref {
186                 path "../../vdu/id";
187               }
188             }
189           }
190
191           case cp {
192             description
193                 "Use the ip address associated with this connection point.";
194             leaf cp {
195               type leafref {
196                 path "../../connection-point/name";
197               }
198             }
199           }
200         }
201
202         leaf port {
203           description
204               "Port for the management interface.";
205           type inet:port-number;
206         }
207
208         container dashboard-params {
209           description "Parameters for the VNF dashboard";
210
211           leaf path {
212             description "The HTTP path for the dashboard";
213             type string;
214           }
215
216           leaf https {
217             description "Pick HTTPS instead of HTTP , Default is false";
218             type boolean;
219           }
220
221           leaf port {
222             description "The HTTP port for the dashboard";
223             type inet:port-number;
224           }
225         }
226       }
227
228       list internal-vld {
229         key "id";
230         description
231           "List of Internal Virtual Link Descriptors (VLD).
232           The internal VLD describes the basic topology of
233           the connectivity such as E-LAN, E-Line, E-Tree.
234           between internal VNF components of the system.";
235
236         leaf id {
237           description "Identifier for the VLD";
238           type string;
239         }
240
241         leaf name {
242           description "Name of the internal VLD";
243           type string;
244         }
245
246         leaf short-name {
247           description "Short name to appear as label in the UI";
248           type string;
249         }
250
251         leaf description {
252           type string;
253         }
254
255         leaf type {
256           type manotypes:virtual-link-type;
257         }
258
259         leaf root-bandwidth {
260           description
261               "For ELAN this is the aggregate bandwidth.";
262           type uint64;
263         }
264
265         leaf leaf-bandwidth {
266           description
267               "For ELAN this is the bandwidth of branches.";
268           type uint64;
269         }
270
271         list internal-connection-point {
272           key "id-ref";
273           description "List of internal connection points in this VLD";
274           leaf id-ref {
275             description "reference to the internal connection point id";
276             type leafref {
277               path "../../../vdu/internal-connection-point/id";
278             }
279           }
280         }
281
282         uses manotypes:provider-network;
283         choice init-params {
284           description "Extra parameters for VLD instantiation";
285
286           case vim-network-ref {
287             leaf vim-network-name {
288               description
289                   "Name of network in VIM account. This is used to indicate
290                     pre-provisioned network name in cloud account.";
291               type string;
292             }
293           }
294
295           case vim-network-profile {
296             leaf ip-profile-ref {
297               description "Named reference to IP-profile object";
298               type string;
299             }
300           }
301
302         }
303       }
304
305       uses manotypes:ip-profile-list;
306
307       list connection-point {
308         key "name";
309         description
310           "List for external connection points. Each VNF has one
311           or more external connection points that connect the VNF
312           to other VNFs or to external networks. Each VNF exposes
313           connection points to the orchestrator, which can construct
314           network services by connecting the connection points
315           between different VNFs. The NFVO will use VLDs and VNFFGs
316           at the network service level to construct network services.";
317
318         uses common-connection-point;
319       }
320
321       list vdu {
322         description "List of Virtual Deployment Units";
323         key "id";
324
325         leaf id {
326           description "Unique id for the VDU";
327           type string;
328         }
329
330         leaf name {
331           description "Unique name for the VDU";
332           type string;
333         }
334
335         leaf description {
336             description "Description of the VDU.";
337             type string;
338         }
339
340         leaf count {
341           description "Number of instances of VDU";
342           type uint64;
343         }
344
345         leaf mgmt-vpci {
346           description
347               "Specifies the virtual PCI address. Expressed in
348              the following format dddd:dd:dd.d. For example
349              0000:00:12.0. This information can be used to
350              pass as metadata during the VM creation.";
351           type string;
352         }
353
354         uses manotypes:vm-flavor;
355         uses manotypes:guest-epa;
356         uses manotypes:vswitch-epa;
357         uses manotypes:hypervisor-epa;
358         uses manotypes:host-epa;
359         uses manotypes:image-properties;
360
361         choice cloud-init-input {
362           description
363             "Indicates how the contents of cloud-init script are provided.
364              There are 2 choices - inline or in a file";
365
366           case inline {
367             leaf cloud-init {
368               description
369                 "Contents of cloud-init script, provided inline, in cloud-config format";
370               type string;
371             }
372           }
373
374           case filename {
375             leaf cloud-init-file {
376               description
377                 "Name of file with contents of cloud-init script in cloud-config format";
378                 type string;
379             }
380           }
381         }
382
383         uses manotypes:supplemental-boot-data;
384
385         list internal-connection-point {
386           key "id";
387           description
388             "List for internal connection points. Each VNFC
389             has zero or more internal connection points.
390             Internal connection points are used for connecting
391             the VNF with components internal to the VNF. If a VNF
392             has only one VNFC, it may not have any internal
393             connection points.";
394
395           uses common-connection-point;
396
397           leaf internal-vld-ref {
398             type leafref {
399               path "../../../internal-vld/id";
400             }
401           }
402         }
403
404         list interface {
405           description
406               "List of Interfaces (external and internal) for the VNF";
407           key name;
408
409           leaf name {
410             description
411                 "Name of the interface. Note that this
412                 name has only local significance to the VDU.";
413             type string;
414           }
415
416           leaf position {
417             description
418                 "Explicit Position of the interface within the list";
419             type uint32;
420           }
421
422           leaf type {
423             description
424                 "Type of the Interface";
425             type interface-type;
426
427             default "EXTERNAL";
428           }
429
430           choice connection-point-type {
431             case internal {
432               leaf internal-connection-point-ref {
433                 description
434                     "Leaf Ref to the particular internal connection point";
435                 type leafref {
436                    path "../../internal-connection-point/id";
437                  }
438               }
439             }
440             case external {
441               leaf external-connection-point-ref {
442                 description
443                     "Leaf Ref to the particular external connection point";
444                 type leafref {
445                    path "../../../connection-point/name";
446                  }
447               }
448             }
449           }
450
451           uses virtual-interface;
452         }
453
454
455         list volumes {
456           key "name";
457
458           leaf name {
459             description "Name of the disk-volumes, e.g. vda, vdb etc";
460             type string;
461           }
462
463           uses manotypes:volume-info;
464         }
465       }
466
467       list vdu-dependency {
468         description
469             "List of VDU dependencies.";
470
471         key vdu-source-ref;
472         leaf vdu-source-ref {
473           type leafref {
474             path "../../vdu/id";
475           }
476         }
477
478         leaf vdu-depends-on-ref {
479           description
480             "Reference to the VDU on which
481             the source VDU depends.";
482           type leafref {
483             path "../../vdu/id";
484           }
485         }
486       }
487
488       leaf service-function-chain {
489         description "Type of node in Service Function Chaining Architecture";
490
491         type enumeration {
492           enum UNAWARE;
493           enum CLASSIFIER;
494           enum SF;
495           enum SFF;
496         }
497         default "UNAWARE";
498       }
499
500       leaf service-function-type {
501         description
502           "Type of Service Function.
503            NOTE: This needs to map with Service Function Type in ODL to
504            support VNFFG. Service Function Type is mandatory param in ODL
505            SFC. This is temporarily set to string for ease of use";
506         type string;
507       }
508
509       uses manotypes:monitoring-param;
510
511       list placement-groups {
512         description "List of placement groups at VNF level";
513
514         key "name";
515         uses manotypes:placement-group-info;
516
517         list member-vdus {
518
519           description
520               "List of VDUs that are part of this placement group";
521           key "member-vdu-ref";
522
523           leaf member-vdu-ref {
524             type leafref {
525               path "../../../vdu/id";
526             }
527           }
528         }
529       }
530   }
531 }
532
533 // vim: sw=2