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