Merge "Path for nesting: external CP in VNFD and NSD can refer to internal VLDs and...
[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       default true;
68     }
69   }
70
71   typedef interface-type {
72     type enumeration {
73       enum INTERNAL;
74       enum EXTERNAL;
75     }
76   }
77
78   typedef vnf-operational-status {
79     type enumeration {
80       enum init;
81       enum running;
82       enum upgrading;
83       enum terminate;
84       enum terminated;
85       enum failed;
86     }
87   }
88
89   grouping virtual-interface {
90     container virtual-interface {
91       description
92           "Container for the virtual interface properties";
93
94       leaf type {
95         description
96             "Specifies the type of virtual interface
97              between VM and host.
98              VIRTIO          : Use the traditional VIRTIO interface.
99              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
100              SR-IOV          : Use SR-IOV interface.
101              E1000           : Emulate E1000 interface.
102              RTL8139         : Emulate RTL8139 interface.
103              PCNET           : Emulate PCNET interface.
104              OM-MGMT         : Deprecated! Use VIRTIO instead and set the VNF management interface at vnfd:mgmt-interface:cp";
105
106         type enumeration {
107           enum OM-MGMT;
108           enum PCI-PASSTHROUGH;
109           enum SR-IOV;
110           enum VIRTIO;
111           enum E1000;
112           enum RTL8139;
113           enum PCNET;
114         }
115         default "VIRTIO";
116       }
117
118       leaf vpci {
119         description
120             "Specifies the virtual PCI address. Expressed in
121              the following format dddd:dd:dd.d. For example
122              0000:00:12.0. This information can be used to
123              pass as metadata during the VM creation.";
124         type string;
125       }
126
127       leaf bandwidth {
128         description
129             "Aggregate bandwidth of the NIC.";
130         type uint64;
131       }
132     }
133   }
134
135   grouping vnfd-descriptor {
136       leaf id {
137         description "Identifier for the VNFD.";
138         type string {
139           length "1..63";
140         }
141       }
142
143       leaf name {
144         description "VNFD name.";
145         mandatory true;
146         type string;
147       }
148
149       leaf short-name {
150         description "Short name to appear as label in the UI";
151         type string;
152       }
153
154       leaf vendor {
155         description "Vendor of the VNFD.";
156         type string;
157       }
158
159       leaf logo {
160         description
161             "Vendor logo for the Virtual Network Function";
162         type string;
163       }
164
165       leaf description {
166         description "Description of the VNFD.";
167         type string;
168       }
169
170       leaf version {
171         description "Version of the VNFD";
172         type string;
173       }
174
175       container vnf-configuration {
176         uses manotypes:vca-configuration;
177       }
178
179       leaf operational-status {
180          description
181            "The operational status of the VNF
182              init                : The VNF has just started.
183              running             : The VNF is active in VM
184              upgrading           : The VNF is being upgraded (EXPERIMENTAL)
185              terminate           : The VNF is being terminated
186              terminated          : The VNF is in the terminated state.
187              failed              : The VNF  instantiation failed.
188            ";
189          type vnf-operational-status;
190       }
191
192       container mgmt-interface {
193         description
194             "Interface over which the VNF is managed.";
195
196         choice endpoint-type {
197           description
198               "Indicates the type of management endpoint.";
199
200           case ip {
201             description
202                 "Specifies the static IP address for managing the VNF.";
203             leaf ip-address {
204               type inet:ip-address;
205             }
206           }
207
208           case vdu-id {
209             description
210                 "Use the default management interface on this VDU.";
211             leaf vdu-id {
212               type leafref {
213                 path "../../vdu/id";
214               }
215             }
216           }
217
218           case cp {
219             description
220                 "Use the ip address associated with this connection point. This cp is then considered as management.";
221             leaf cp {
222               type leafref {
223                 path "../../connection-point/name";
224               }
225             }
226           }
227         }
228
229         leaf port {
230           description
231               "Port for the management interface.";
232           type inet:port-number;
233         }
234
235         container dashboard-params {
236           description "Parameters for the VNF dashboard";
237
238           leaf path {
239             description "The HTTP path for the dashboard";
240             type string;
241           }
242
243           leaf https {
244             description "Pick HTTPS instead of HTTP , Default is false";
245             type boolean;
246           }
247
248           leaf port {
249             description "The HTTP port for the dashboard";
250             type inet:port-number;
251           }
252         }
253       }
254
255       list internal-vld {
256         key "id";
257         description
258           "List of Internal Virtual Link Descriptors (VLD).
259           The internal VLD describes the basic topology of
260           the connectivity such as E-LAN, E-Line, E-Tree.
261           between internal VNF components of the system.";
262
263         leaf id {
264           description "Identifier for the VLD";
265           type string;
266         }
267
268         leaf name {
269           description "Name of the internal VLD";
270           type string;
271         }
272
273         leaf short-name {
274           description "Short name to appear as label in the UI";
275           type string;
276         }
277
278         leaf description {
279           type string;
280         }
281
282         leaf type {
283           type manotypes:virtual-link-type;
284         }
285
286         leaf root-bandwidth {
287           description
288               "For ELAN this is the aggregate bandwidth.";
289           type uint64;
290         }
291
292         leaf leaf-bandwidth {
293           description
294               "For ELAN this is the bandwidth of branches.";
295           type uint64;
296         }
297
298         list internal-connection-point {
299           key "id-ref";
300           description "List of internal connection points in this VLD";
301           leaf id-ref {
302             description "reference to the internal connection point id";
303             type leafref {
304               path "../../../vdu/internal-connection-point/id";
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 count {
385           description "Number of instances of VDU";
386           type uint64;
387         }
388
389         leaf mgmt-vpci {
390           description
391               "Specifies the virtual PCI address. Expressed in
392              the following format dddd:dd:dd.d. For example
393              0000:00:12.0. This information can be used to
394              pass as metadata during the VM creation.";
395           type string;
396         }
397
398         uses manotypes:vm-flavor;
399         uses manotypes:guest-epa;
400         uses manotypes:vswitch-epa;
401         uses manotypes:hypervisor-epa;
402         uses manotypes:host-epa;
403
404         list alarm {
405           key "alarm-id";
406
407           uses manotypes:alarm;
408         }
409
410         uses manotypes:image-properties;
411
412         list alternative-images {
413           key "vim-type";
414           description
415             "List of alternative images per VIM type.
416             Different images can be used for specific types of VIMs instead
417             of the default image. This allows deployments in sites where the
418             image identifier in the VIM is given by the VIM provider and
419             cannot be modified.
420             If an alternative image is specified for a VIM type, it will prevail
421             over the default image";
422
423           leaf vim-type {
424             description "VIM type: openvim, openstack, vmware, aws, etc.";
425             type string;
426           }
427
428           uses manotypes:image-properties;
429         }
430
431         container vdu-configuration {
432           uses manotypes:vca-configuration;
433         }
434
435         choice cloud-init-input {
436           description
437             "Indicates how the contents of cloud-init script are provided.
438              There are 2 choices - inline or in a file";
439
440           case inline {
441             leaf cloud-init {
442               description
443                 "Contents of cloud-init script, provided inline, in cloud-config format";
444               type string;
445             }
446           }
447
448           case filename {
449             leaf cloud-init-file {
450               description
451                 "Name of file with contents of cloud-init script in cloud-config format";
452                 type string;
453             }
454           }
455         }
456
457         uses manotypes:supplemental-boot-data;
458
459         list internal-connection-point {
460           key "id";
461           description
462             "List for internal connection points. Each VNFC
463             has zero or more internal connection points.
464             Internal connection points are used for connecting
465             the VNF with components internal to the VNF. If a VNF
466             has only one VNFC, it may not have any internal
467             connection points.";
468
469           uses common-connection-point;
470
471           leaf internal-vld-ref {
472             type leafref {
473               path "../../../internal-vld/id";
474             }
475           }
476         }
477
478         list interface {
479           description
480               "List of Interfaces (external and internal) for the VNF";
481           key name;
482
483           leaf name {
484             description
485                 "Name of the interface. Note that this
486                 name has only local significance to the VDU.";
487             type string;
488           }
489
490           leaf position {
491             description
492                 "Explicit Position of the interface within the list";
493             type uint32;
494           }
495
496           leaf type {
497             description
498                 "Type of the Interface";
499             type interface-type;
500
501             default "EXTERNAL";
502           }
503
504           leaf mac-address {
505             description
506                 "MAC address of the interface.
507                 Some VNFs require a specific MAC address to be configured
508                 in the interface. While this is not recommended at all in
509                 NFV environments, this parameter exists to allow those
510                 scenarios.
511                 This parameter will be likely deprecated in the future.";
512             type string;
513           }
514
515           choice connection-point-type {
516             case internal {
517               leaf internal-connection-point-ref {
518                 description
519                     "Leaf Ref to the particular internal connection point";
520                 type leafref {
521                    path "../../internal-connection-point/id";
522                  }
523               }
524             }
525             case external {
526               leaf external-connection-point-ref {
527                 description
528                     "Leaf Ref to the particular external connection point";
529                 type leafref {
530                    path "../../../connection-point/name";
531                  }
532               }
533             }
534           }
535
536           uses virtual-interface;
537         }
538
539
540         list volumes {
541           key "name";
542
543           leaf name {
544             description "Name of the disk-volumes, e.g. vda, vdb etc";
545             type string;
546           }
547
548           uses manotypes:volume-info;
549         }
550       }
551
552       list vdu-dependency {
553         description
554             "List of VDU dependencies.";
555
556         key vdu-source-ref;
557         leaf vdu-source-ref {
558           type leafref {
559             path "../../vdu/id";
560           }
561         }
562
563         leaf vdu-depends-on-ref {
564           description
565             "Reference to the VDU on which
566             the source VDU depends.";
567           type leafref {
568             path "../../vdu/id";
569           }
570         }
571       }
572
573       leaf service-function-chain {
574         description "Type of node in Service Function Chaining Architecture";
575
576         type enumeration {
577           enum UNAWARE;
578           enum CLASSIFIER;
579           enum SF;
580           enum SFF;
581         }
582         default "UNAWARE";
583       }
584
585       leaf service-function-type {
586         description
587           "Type of Service Function.
588            NOTE: This needs to map with Service Function Type in ODL to
589            support VNFFG. Service Function Type is mandatory param in ODL
590            SFC. This is temporarily set to string for ease of use";
591         type string;
592       }
593
594       uses manotypes:monitoring-param;
595
596       list placement-groups {
597         description "List of placement groups at VNF level";
598
599         key "name";
600         uses manotypes:placement-group-info;
601
602         list member-vdus {
603
604           description
605               "List of VDUs that are part of this placement group";
606           key "member-vdu-ref";
607
608           leaf member-vdu-ref {
609             type leafref {
610               path "../../../vdu/id";
611             }
612           }
613         }
614       }
615   }
616 }
617
618 // vim: sw=2