RIFT-14481 uptime for vlr, vnfr, nsr
[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       leaf vnfd-ref {
211         description "Reference to VNFD";
212         type leafref {
213           path "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:id";
214         }
215       }
216
217       // Use parameters provided here to configure this VNF
218       uses manotypes:vnf-configuration;
219
220       // Mainly used by Mon-params & dashboard url
221       container mgmt-interface {
222         leaf ip-address {
223           type inet:ip-address;
224         }
225         leaf port {
226           type inet:port-number;
227         }
228       }
229
230       list internal-vlr {
231         key "vlr-ref";
232
233         leaf vlr-ref {
234           description "Reference to a VLR record in the VLR catalog";
235           type leafref {
236             path "/vlr:vlr-catalog/vlr:vlr/vlr:id";
237           }
238         }
239
240         leaf-list internal-connection-point-ref {
241           type leafref {
242             path "../../vdur/internal-connection-point/id";
243           }
244         }
245       }
246
247       list connection-point {
248         key "name";
249         description
250             "List for external connection points. Each VNF has one
251              or more external connection points. As the name
252              implies that external connection points are used for
253              connecting the VNF to other VNFs or to external networks.
254              Each VNF exposes these connection points to the
255              orchestrator. The orchestrator can construct network
256              services by connecting the connection points between
257              different VNFs. The NFVO will use VLDs and VNFFGs at
258              the network service level to construct network services.";
259
260         uses vnfd:common-connection-point;
261
262         leaf vlr-ref {
263           description
264               "Reference to the VLR associated with this connection point";
265           type  leafref {
266             path "/vlr:vlr-catalog/vlr:vlr/vlr:id";
267           }
268         }
269
270         leaf ip-address {
271           description
272               "IP address assigned to the external connection point";
273           type inet:ip-address;
274         }
275         leaf mac-address {
276           description
277               "MAC address assigned to the external connection point";
278           // type inet:mac-address;
279           type string;
280         }
281         leaf connection-point-id {
282           rwpb:field-inline "true";
283           rwpb:field-string-max 64;
284           type string;
285         }
286       }
287
288       list vdur {
289         description "List of Virtual Deployment Units";
290         key "id";
291         unique "name";
292
293         leaf id {
294           description "Unique id for the VDU";
295           type yang:uuid;
296         }
297
298         leaf name {
299           description "name of the instantiated VDUR";
300           type string;
301         }
302
303         leaf vdu-id-ref {
304           type leafref {
305             path "/vnfd:vnfd-catalog/vnfd:vnfd" 
306                + "[vnfd:id = current()/../../vnfr:vnfd-ref]"
307                + "/vnfd:vdu/vnfd:id";
308           }
309         }
310
311         leaf vim-id {
312           description "Allocated VM resource id";
313           type string;
314         }
315
316         leaf flavor-id {
317           description "VIM assigned flavor id";
318           type string;
319         }
320
321         leaf image-id {
322           description "VIM assigned image id";
323           type string;
324         }
325
326         leaf management-ip {
327           description "Management IP address";
328           type inet:ip-address;
329         }
330
331         leaf vm-management-ip {
332           description "VM Private Management IP address";
333           type inet:ip-address;
334         }
335
336         leaf console-url {
337           description "Console URL for this VDU, if available";
338           type inet:uri;
339         }
340
341         uses manotypes:vm-flavor;
342         uses manotypes:guest-epa;
343         uses manotypes:vswitch-epa;
344         uses manotypes:hypervisor-epa;
345         uses manotypes:host-epa;
346
347         list alarms {
348           description
349               "A list of the alarms that have been created for this VDU";
350
351           key "alarm-id";
352           uses manotypes:alarm;
353         }
354
355         list internal-connection-point {
356           key "id";
357           description
358               "List for internal connection points. Each VNFC
359                has zero or more internal connection points.
360                Internal connection points are used for connecting
361                the VNF components internal to the VNF. If a VNF
362                has only one VNFC, it may not have any internal
363                connection points.";
364
365           uses vnfd:common-connection-point;
366
367           leaf ip-address {
368             description
369                 "IP address assigned to the internal connection point";
370             type inet:ip-address;
371           }
372           leaf mac-address {
373             description
374                 "MAC address assigned to the internal connection point";
375             // type inet:mac-address;
376             type string;
377           }
378         }
379
380         list internal-interface {
381           description
382               "List of internal interfaces for the VNF";
383           key name;
384
385           leaf name {
386             description
387                 "Name of internal interface. Note that this
388                  name has only local significance to the VDU.";
389             type string;
390           }
391
392           leaf vdur-internal-connection-point-ref {
393             type leafref {
394               path "../../internal-connection-point/id";
395             }
396           }
397           uses virtual-interface;
398         }
399
400         list external-interface {
401           description
402               "List of external interfaces for the VNF.
403                The external interfaces enable sending
404                traffic to and from VNF.";
405           key name;
406
407           leaf name {
408             description
409                 "Name of the external interface. Note that
410                  this name has only local significance.";
411             type string;
412           }
413
414           leaf vnfd-connection-point-ref {
415             description
416               "Name of the external connection point.";
417             type leafref {
418               path "../../../connection-point/name";
419             }
420           }
421           uses virtual-interface;
422         }
423         leaf operational-status {
424           description
425             "The operational status of the VDU 
426               init                : The VDU has just started.
427               vm-init-phase       : The VDUs in the VNF is being created in VIM.
428               vm-alloc-pending    : The  VM alloc is pending in VIM
429               running             : The VDU is active in VM
430               terminate           : The VDU is being terminated
431               vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
432               terminated          : The VDU is in the terminated state.
433               failed              : The VDU  instantiation failed.
434             ";
435
436           type enumeration {
437             rwpb:enum-type "VduOperationalStatus";
438             enum init;
439             enum vm-init-phase;
440             enum vm-alloc-pending;
441             enum running;
442             enum terminate;
443             enum vl-terminate-phase;
444             enum terminated;
445             enum failed;
446           }
447         }
448         uses placement-group-info;
449       }
450
451       uses manotypes:monitoring-param;
452
453       leaf operational-status {
454         description
455           "The operational status of the VNFR instance
456             init                : The VNF has just started.
457             vl-init-phase       : The internal VLs in the VNF are being instantiated.
458             vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
459             running             : The VNF is in running state.
460             terminate           : The VNF is being terminated.
461             vm-terminate-phase  : The VMs in the VNF are being terminated.
462             vl-terminate-phase  : The internal VLs in the VNF are being terminated.
463             terminated          : The VNF is in the terminated state.
464             failed              : The VNF instantiation failed
465           ";
466
467         type enumeration {
468           rwpb:enum-type "VnfrOperationalStatus";
469           enum init;
470           enum vl-init-phase;
471           enum vm-init-phase;
472           enum running;
473           enum terminate;
474           enum vm-terminate-phase;
475           enum vl-terminate-phase;
476           enum terminated;
477           enum failed;
478         }
479       }
480       leaf config-status {
481         description
482           "The configuration status of the NS instance
483             configuring: At least one of the VNFs in this instance is in configuring state
484             configured:  All the VNFs in this NS instance are configured or config-not-needed state
485           ";
486
487         type enumeration {
488           enum configuring {
489             value 1;
490           }
491           enum configured {
492             value 2;
493           }
494           enum failed {
495             value 3;
496           }
497           enum config-not-needed {
498             value 4;
499           }
500         }
501       }
502       uses placement-group-info;
503     }
504   }
505
506   rpc create-alarm {
507     description "Create an alert for a running VDU";
508     input {
509       leaf cloud-account {
510         mandatory true;
511         type string;
512       }
513
514       leaf vdur-id {
515         mandatory true;
516         type string;
517       }
518
519       container alarm {
520         uses manotypes:alarm;
521       }
522     }
523
524     output {
525       leaf alarm-id {
526         type string;
527       }
528     }
529   }
530
531   rpc destroy-alarm {
532     description "Destroy an alert that is associated with a running VDU";
533     input {
534       leaf cloud-account {
535         mandatory true;
536         type string;
537       }
538
539       leaf alarm-id {
540         mandatory true;
541         type string;
542       }
543     }
544   }
545 }
546