Merge branch 'v1.0'
[osm/SO.git] / models / plugins / yang / vnfr.yang
1
2 /*
3  * 
4  *   Copyright 2016 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 vnfr
22 {
23   namespace "urn:ietf:params:xml:ns:yang:nfvo:vnfr";
24   prefix "vnfr";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import rw-pb-ext {
31     prefix "rwpb";
32   }
33
34   import vnfd {
35     prefix "vnfd";
36   }
37
38   import nsd {
39     prefix "nsd";
40   }
41
42   import vlr {
43     prefix "vlr";
44   }
45
46   import ietf-yang-types {
47     prefix "yang";
48   }
49
50   import ietf-inet-types {
51     prefix "inet";
52   }
53
54   revision 2015-09-10 {
55     description
56       "Initial revision. This YANG file defines
57        the Virtual Network Function Record (VNFR)";
58     reference
59       "Derived from earlier versions of base YANG files";
60   }
61
62   grouping placement-group-info {
63     list placement-groups-info {
64       description
65           "
66           Placement groups to which this VDU belongs and its
67           cloud construct
68           ";
69       key "name";
70       uses manotypes:placement-group-info;
71       uses manotypes:placement-group-input;
72     }  
73   }
74   
75   
76   grouping virtual-interface {
77     container virtual-interface {
78       description
79           "Container for the virtual interface properties";
80
81       leaf type {
82         description
83             "Specifies the type of virtual interface
84              between VM and host.
85              VIRTIO          : Use the traditional VIRTIO interface.
86              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
87              SR-IOV          : Use SR-IOV interface.";
88         type enumeration {
89           enum VIRTIO;
90           enum PCI-PASSTHROUGH;
91           enum SR-IOV;
92         }
93       }
94
95       leaf bandwidth {
96         description
97             "Aggregate bandwidth of the NIC.";
98         type uint64;
99       }
100
101       leaf ovs-offload {
102         description
103             "Defines if the NIC supports OVS offload.
104              MANDATORY : OVS offload support in the NIC is mandatory.
105              PREFERRED : OVS offload support in the NIC is preferred.";
106         type enumeration {
107           enum MANDATORY;
108           enum PREFERRED;
109         }
110       }
111
112       leaf vendor-id {
113         description
114             "Specifies the vendor specific id for
115              the device. This is used when a NIC from
116              specific HW vendor is required.";
117         type string;
118       }
119
120       leaf datapath-library {
121         description
122             "Specifies the name and version of the datapath
123              library the NIC is expected to support.";
124         type string;
125       }
126
127       leaf provider-network-name {
128         description
129             "Name of the provider network to which this
130              NIC is attached.";
131         type string;
132       }
133     }
134   }
135
136   container vnfr-catalog {
137     config false;
138     list vnfr {
139       description
140           "Virtual Network Function Record (VNFR).";
141       key "id";
142       unique "name";
143
144       leaf id {
145         description "Identifier for the VNFR.";
146         type yang:uuid;
147       }
148
149       leaf nsr-id-ref {
150         description
151             "NS instance identifier.
152              This is a leafref /nsr:ns-instance-config/nsr:nsr/nsr:id";
153         type yang:uuid;
154       }
155
156       leaf member-vnf-index-ref {
157         description "Reference to member VNF index in Network service.";
158         type leafref {
159           path "/nsd:nsd-catalog/nsd:nsd/nsd:constituent-vnfd/nsd:member-vnf-index";
160         }
161       }
162
163       leaf dashboard-url {
164         description "Dashboard URL";
165         type inet:uri;
166       }
167
168       leaf name {
169         description "VNFR name.";
170         type string;
171       }
172
173       leaf short-name {
174         description "VNFR short name.";
175         type string;
176       }
177
178       leaf vendor {
179         description "Vendor of the VNFR.";
180         type string;
181       }
182
183       leaf description {
184         description "Description of the VNFR.";
185         type string;
186       }
187
188       leaf version {
189         description "Version of the VNFR";
190         type string;
191       }
192
193       leaf create-time {
194         description
195           "Creation timestamp of this Virtual Network 
196           Function.  The timestamp is expressed as 
197           seconds since unix epoch - 1970-01-01T00:00:00Z";
198
199         type uint32;
200       }
201
202       leaf uptime {
203         description
204           "Active period of this Virtual Network Function.
205           Uptime is expressed in seconds";
206
207         type uint32;
208       }
209
210       container vnfd {
211         description "VNF descriptor used to instantiate this VNF";
212         uses vnfd:vnfd-descriptor;
213       }
214
215       // Use parameters provided here to configure this VNF
216       uses manotypes:vnf-configuration;
217
218       // Mainly used by Mon-params & dashboard url
219       container mgmt-interface {
220         leaf ip-address {
221           type inet:ip-address;
222         }
223         leaf port {
224           type inet:port-number;
225         }
226       }
227
228       list internal-vlr {
229         key "vlr-ref";
230
231         leaf vlr-ref {
232           description "Reference to a VLR record in the VLR catalog";
233           type leafref {
234             path "/vlr:vlr-catalog/vlr:vlr/vlr:id";
235           }
236         }
237
238         leaf-list internal-connection-point-ref {
239           type leafref {
240             path "../../vdur/internal-connection-point/id";
241           }
242         }
243       }
244
245       list connection-point {
246         key "name";
247         description
248             "List for external connection points. Each VNF has one
249              or more external connection points. As the name
250              implies that external connection points are used for
251              connecting the VNF to other VNFs or to external networks.
252              Each VNF exposes these connection points to the
253              orchestrator. The orchestrator can construct network
254              services by connecting the connection points between
255              different VNFs. The NFVO will use VLDs and VNFFGs at
256              the network service level to construct network services.";
257
258         uses vnfd:common-connection-point;
259
260         leaf vlr-ref {
261           description
262               "Reference to the VLR associated with this connection point";
263           type  leafref {
264             path "/vlr:vlr-catalog/vlr:vlr/vlr:id";
265           }
266         }
267
268         leaf ip-address {
269           description
270               "IP address assigned to the external connection point";
271           type inet:ip-address;
272         }
273         leaf mac-address {
274           description
275               "MAC address assigned to the external connection point";
276           // type inet:mac-address;
277           type string;
278         }
279         leaf connection-point-id {
280           rwpb:field-inline "true";
281           rwpb:field-string-max 64;
282           type string;
283         }
284       }
285
286       list vdur {
287         description "List of Virtual Deployment Units";
288         key "id";
289         unique "name";
290
291         leaf id {
292           description "Unique id for the VDU";
293           type yang:uuid;
294         }
295
296         leaf name {
297           description "name of the instantiated VDUR";
298           type string;
299         }
300
301         leaf vdu-id-ref {
302           type leafref {
303             path "../../vnfd/vdu/id";
304           }
305         }
306
307         leaf vim-id {
308           description "Allocated VM resource id";
309           type string;
310         }
311
312         leaf flavor-id {
313           description "VIM assigned flavor id";
314           type string;
315         }
316
317         leaf image-id {
318           description "VIM assigned image id";
319           type string;
320         }
321
322         leaf management-ip {
323           description "Management IP address";
324           type inet:ip-address;
325         }
326
327         leaf vm-management-ip {
328           description "VM Private Management IP address";
329           type inet:ip-address;
330         }
331
332         leaf console-url {
333           description "Console URL for this VDU, if available";
334           type inet:uri;
335         }
336
337         uses manotypes:vm-flavor;
338         uses manotypes:guest-epa;
339         uses manotypes:vswitch-epa;
340         uses manotypes:hypervisor-epa;
341         uses manotypes:host-epa;
342
343         list volumes {
344           key "name";
345
346           leaf name {
347             description "Name of the disk-volumes, e.g. vda, vdb etc";
348             type string;
349           }
350
351           leaf volume-id {
352             description "VIM assigned volume id";
353             type string;
354           }
355
356           uses manotypes:volume-info;
357         }
358
359         list alarms {
360           description
361               "A list of the alarms that have been created for this VDU";
362
363           key "alarm-id";
364           uses manotypes:alarm;
365         }
366
367         list internal-connection-point {
368           key "id";
369           description
370               "List for internal connection points. Each VNFC
371                has zero or more internal connection points.
372                Internal connection points are used for connecting
373                the VNF components internal to the VNF. If a VNF
374                has only one VNFC, it may not have any internal
375                connection points.";
376
377           uses vnfd:common-connection-point;
378
379           leaf ip-address {
380             description
381                 "IP address assigned to the internal connection point";
382             type inet:ip-address;
383           }
384           leaf mac-address {
385             description
386                 "MAC address assigned to the internal connection point";
387             // type inet:mac-address;
388             type string;
389           }
390         }
391
392         list internal-interface {
393           description
394               "List of internal interfaces for the VNF";
395           key name;
396
397           leaf name {
398             description
399                 "Name of internal interface. Note that this
400                  name has only local significance to the VDU.";
401             type string;
402           }
403
404           leaf vdur-internal-connection-point-ref {
405             type leafref {
406               path "../../internal-connection-point/id";
407             }
408           }
409           uses virtual-interface;
410         }
411
412         list external-interface {
413           description
414               "List of external interfaces for the VNF.
415                The external interfaces enable sending
416                traffic to and from VNF.";
417           key name;
418
419           leaf name {
420             description
421                 "Name of the external interface. Note that
422                  this name has only local significance.";
423             type string;
424           }
425
426           leaf vnfd-connection-point-ref {
427             description
428               "Name of the external connection point.";
429             type leafref {
430               path "../../../connection-point/name";
431             }
432           }
433           uses virtual-interface;
434         }
435         leaf operational-status {
436           description
437             "The operational status of the VDU 
438               init                : The VDU has just started.
439               vm-init-phase       : The VDUs in the VNF is being created in VIM.
440               vm-alloc-pending    : The  VM alloc is pending in VIM
441               running             : The VDU is active in VM
442               terminate           : The VDU is being terminated
443               vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
444               terminated          : The VDU is in the terminated state.
445               failed              : The VDU  instantiation failed.
446             ";
447
448           type enumeration {
449             rwpb:enum-type "VduOperationalStatus";
450             enum init;
451             enum vm-init-phase;
452             enum vm-alloc-pending;
453             enum running;
454             enum terminate;
455             enum vl-terminate-phase;
456             enum terminated;
457             enum failed;
458           }
459         }
460         uses placement-group-info;
461       }
462
463       uses manotypes:monitoring-param;
464
465       leaf operational-status {
466         description
467           "The operational status of the VNFR instance
468             init                : The VNF has just started.
469             vl-init-phase       : The internal VLs in the VNF are being instantiated.
470             vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
471             running             : The VNF is in running state.
472             terminate           : The VNF is being terminated.
473             vm-terminate-phase  : The VMs in the VNF are being terminated.
474             vl-terminate-phase  : The internal VLs in the VNF are being terminated.
475             terminated          : The VNF is in the terminated state.
476             failed              : The VNF instantiation failed
477           ";
478
479         type enumeration {
480           rwpb:enum-type "VnfrOperationalStatus";
481           enum init;
482           enum vl-init-phase;
483           enum vm-init-phase;
484           enum running;
485           enum terminate;
486           enum vm-terminate-phase;
487           enum vl-terminate-phase;
488           enum terminated;
489           enum failed;
490         }
491       }
492       leaf config-status {
493         description
494           "The configuration status of the NS instance
495             configuring: At least one of the VNFs in this instance is in configuring state
496             configured:  All the VNFs in this NS instance are configured or config-not-needed state
497           ";
498
499         type enumeration {
500           enum configuring {
501             value 1;
502           }
503           enum configured {
504             value 2;
505           }
506           enum failed {
507             value 3;
508           }
509           enum config-not-needed {
510             value 4;
511           }
512         }
513       }
514       uses placement-group-info;
515     }
516   }
517
518   rpc create-alarm {
519     description "Create an alert for a running VDU";
520     input {
521       leaf cloud-account {
522         mandatory true;
523         type string;
524       }
525
526       leaf vdur-id {
527         mandatory true;
528         type string;
529       }
530
531       container alarm {
532         uses manotypes:alarm;
533       }
534     }
535
536     output {
537       leaf alarm-id {
538         type string;
539       }
540     }
541   }
542
543   rpc destroy-alarm {
544     description "Destroy an alert that is associated with a running VDU";
545     input {
546       leaf cloud-account {
547         mandatory true;
548         type string;
549       }
550
551       leaf alarm-id {
552         mandatory true;
553         type string;
554       }
555     }
556   }
557 }
558