merge from 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         uses manotypes:custom-boot-data;
344
345         list volumes {
346           key "name";
347
348           leaf name {
349             description "Name of the disk-volumes, e.g. vda, vdb etc";
350             type string;
351           }
352
353           leaf volume-id {
354             description "VIM assigned volume id";
355             type string;
356           }
357
358           uses manotypes:volume-info;
359         }
360
361         list alarms {
362           description
363               "A list of the alarms that have been created for this VDU";
364
365           key "alarm-id";
366           uses manotypes:alarm;
367         }
368
369         list internal-connection-point {
370           key "id";
371           description
372               "List for internal connection points. Each VNFC
373                has zero or more internal connection points.
374                Internal connection points are used for connecting
375                the VNF components internal to the VNF. If a VNF
376                has only one VNFC, it may not have any internal
377                connection points.";
378
379           uses vnfd:common-connection-point;
380
381           leaf ip-address {
382             description
383                 "IP address assigned to the internal connection point";
384             type inet:ip-address;
385           }
386           leaf mac-address {
387             description
388                 "MAC address assigned to the internal connection point";
389             // type inet:mac-address;
390             type string;
391           }
392         }
393
394         list internal-interface {
395           description
396               "List of internal interfaces for the VNF";
397           key name;
398
399           leaf name {
400             description
401                 "Name of internal interface. Note that this
402                  name has only local significance to the VDU.";
403             type string;
404           }
405
406           leaf vdur-internal-connection-point-ref {
407             type leafref {
408               path "../../internal-connection-point/id";
409             }
410           }
411           uses virtual-interface;
412         }
413
414         list external-interface {
415           description
416               "List of external interfaces for the VNF.
417                The external interfaces enable sending
418                traffic to and from VNF.";
419           key name;
420
421           leaf name {
422             description
423                 "Name of the external interface. Note that
424                  this name has only local significance.";
425             type string;
426           }
427
428           leaf vnfd-connection-point-ref {
429             description
430               "Name of the external connection point.";
431             type leafref {
432               path "../../../connection-point/name";
433             }
434           }
435           uses virtual-interface;
436         }
437         leaf operational-status {
438           description
439             "The operational status of the VDU 
440               init                : The VDU has just started.
441               vm-init-phase       : The VDUs in the VNF is being created in VIM.
442               vm-alloc-pending    : The  VM alloc is pending in VIM
443               running             : The VDU is active in VM
444               terminate           : The VDU is being terminated
445               vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
446               terminated          : The VDU is in the terminated state.
447               failed              : The VDU  instantiation failed.
448             ";
449
450           type enumeration {
451             rwpb:enum-type "VduOperationalStatus";
452             enum init;
453             enum vm-init-phase;
454             enum vm-alloc-pending;
455             enum running;
456             enum terminate;
457             enum vl-terminate-phase;
458             enum terminated;
459             enum failed;
460           }
461         }
462         uses placement-group-info;
463       }
464
465       uses manotypes:monitoring-param;
466
467       leaf operational-status {
468         description
469           "The operational status of the VNFR instance
470             init                : The VNF has just started.
471             vl-init-phase       : The internal VLs in the VNF are being instantiated.
472             vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
473             running             : The VNF is in running state.
474             terminate           : The VNF is being terminated.
475             vm-terminate-phase  : The VMs in the VNF are being terminated.
476             vl-terminate-phase  : The internal VLs in the VNF are being terminated.
477             terminated          : The VNF is in the terminated state.
478             failed              : The VNF instantiation failed
479           ";
480
481         type enumeration {
482           rwpb:enum-type "VnfrOperationalStatus";
483           enum init;
484           enum vl-init-phase;
485           enum vm-init-phase;
486           enum running;
487           enum terminate;
488           enum vm-terminate-phase;
489           enum vl-terminate-phase;
490           enum terminated;
491           enum failed;
492         }
493       }
494       leaf config-status {
495         description
496           "The configuration status of the NS instance
497             configuring: At least one of the VNFs in this instance is in configuring state
498             configured:  All the VNFs in this NS instance are configured or config-not-needed state
499           ";
500
501         type enumeration {
502           enum configuring {
503             value 1;
504           }
505           enum configured {
506             value 2;
507           }
508           enum failed {
509             value 3;
510           }
511           enum config-not-needed {
512             value 4;
513           }
514         }
515       }
516       uses placement-group-info;
517     }
518   }
519
520   rpc create-alarm {
521     description "Create an alert for a running VDU";
522     input {
523       leaf cloud-account {
524         mandatory true;
525         type string;
526       }
527
528       leaf vdur-id {
529         mandatory true;
530         type string;
531       }
532
533       container alarm {
534         uses manotypes:alarm;
535       }
536     }
537
538     output {
539       leaf alarm-id {
540         type string;
541       }
542     }
543   }
544
545   rpc destroy-alarm {
546     description "Destroy an alert that is associated with a running VDU";
547     input {
548       leaf cloud-account {
549         mandatory true;
550         type string;
551       }
552
553       leaf alarm-id {
554         mandatory true;
555         type string;
556       }
557     }
558   }
559 }
560