SO Multidisk changes
[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 connection-point-id {
276           rwpb:field-inline "true";
277           rwpb:field-string-max 64;
278           type string;
279         }
280       }
281
282       list vdur {
283         description "List of Virtual Deployment Units";
284         key "id";
285         unique "name";
286
287         leaf id {
288           description "Unique id for the VDU";
289           type yang:uuid;
290         }
291
292         leaf name {
293           description "name of the instantiated VDUR";
294           type string;
295         }
296
297         leaf vdu-id-ref {
298           type leafref {
299             path "/vnfd:vnfd-catalog/vnfd:vnfd" 
300                + "[vnfd:id = current()/../../vnfr:vnfd-ref]"
301                + "/vnfd:vdu/vnfd:id";
302           }
303         }
304
305         leaf vim-id {
306           description "Allocated VM resource id";
307           type string;
308         }
309
310         leaf flavor-id {
311           description "VIM assigned flavor id";
312           type string;
313         }
314
315         leaf image-id {
316           description "VIM assigned image id";
317           type string;
318         }
319
320         leaf management-ip {
321           description "Management IP address";
322           type inet:ip-address;
323         }
324
325         leaf vm-management-ip {
326           description "VM Private Management IP address";
327           type inet:ip-address;
328         }
329
330         leaf console-url {
331           description "Console URL for this VDU, if available";
332           type inet:uri;
333         }
334
335         uses manotypes:vm-flavor;
336         uses manotypes:guest-epa;
337         uses manotypes:vswitch-epa;
338         uses manotypes:hypervisor-epa;
339         uses manotypes:host-epa;
340
341         list volumes {
342           key "name";
343
344           leaf name {
345             description "Name of the disk-volumes, e.g. vda, vdb etc";
346             type string;
347           }
348
349           leaf volume-id {
350             description "VIM assigned volume id";
351             type string;
352           }
353
354           uses manotypes:volume-info;
355         }
356
357         list alarms {
358           description
359               "A list of the alarms that have been created for this VDU";
360
361           key "alarm-id";
362           uses manotypes:alarm;
363         }
364
365         list internal-connection-point {
366           key "id";
367           description
368               "List for internal connection points. Each VNFC
369                has zero or more internal connection points.
370                Internal connection points are used for connecting
371                the VNF components internal to the VNF. If a VNF
372                has only one VNFC, it may not have any internal
373                connection points.";
374
375           uses vnfd:common-connection-point;
376
377           leaf ip-address {
378             description 
379                 "IP address assigned to the external connection point";
380             type inet:ip-address;
381           }
382         }
383
384         list internal-interface {
385           description
386               "List of internal interfaces for the VNF";
387           key name;
388
389           leaf name {
390             description
391                 "Name of internal interface. Note that this
392                  name has only local significance to the VDU.";
393             type string;
394           }
395
396           leaf vdur-internal-connection-point-ref {
397             type leafref {
398               path "../../internal-connection-point/id";
399             }
400           }
401           uses virtual-interface;
402         }
403
404         list external-interface {
405           description
406               "List of external interfaces for the VNF.
407                The external interfaces enable sending
408                traffic to and from VNF.";
409           key name;
410
411           leaf name {
412             description
413                 "Name of the external interface. Note that
414                  this name has only local significance.";
415             type string;
416           }
417
418           leaf vnfd-connection-point-ref {
419             description
420               "Name of the external connection point.";
421             type leafref {
422               path "../../../connection-point/name";
423             }
424           }
425           uses virtual-interface;
426         }
427         leaf operational-status {
428           description
429             "The operational status of the VDU 
430               init                : The VDU has just started.
431               vm-init-phase       : The VDUs in the VNF is being created in VIM.
432               vm-alloc-pending    : The  VM alloc is pending in VIM
433               running             : The VDU is active in VM
434               terminate           : The VDU is being terminated
435               vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
436               terminated          : The VDU is in the terminated state.
437               failed              : The VDU  instantiation failed.
438             ";
439
440           type enumeration {
441             rwpb:enum-type "VduOperationalStatus";
442             enum init;
443             enum vm-init-phase;
444             enum vm-alloc-pending;
445             enum running;
446             enum terminate;
447             enum vl-terminate-phase;
448             enum terminated;
449             enum failed;
450           }
451         }
452         uses placement-group-info;
453       }
454
455       uses manotypes:monitoring-param;
456
457       leaf operational-status {
458         description
459           "The operational status of the VNFR instance
460             init                : The VNF has just started.
461             vl-init-phase       : The internal VLs in the VNF are being instantiated.
462             vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
463             running             : The VNF is in running state.
464             terminate           : The VNF is being terminated.
465             vm-terminate-phase  : The VMs in the VNF are being terminated.
466             vl-terminate-phase  : The internal VLs in the VNF are being terminated.
467             terminated          : The VNF is in the terminated state.
468             failed              : The VNF instantiation failed
469           ";
470
471         type enumeration {
472           rwpb:enum-type "VnfrOperationalStatus";
473           enum init;
474           enum vl-init-phase;
475           enum vm-init-phase;
476           enum running;
477           enum terminate;
478           enum vm-terminate-phase;
479           enum vl-terminate-phase;
480           enum terminated;
481           enum failed;
482         }
483       }
484       leaf config-status {
485         description
486           "The configuration status of the NS instance
487             configuring: At least one of the VNFs in this instance is in configuring state
488             configured:  All the VNFs in this NS instance are configured or config-not-needed state
489           ";
490
491         type enumeration {
492           enum configuring {
493             value 1;
494           }
495           enum configured {
496             value 2;
497           }
498           enum failed {
499             value 3;
500           }
501           enum config-not-needed {
502             value 4;
503           }
504         }
505       }
506       uses placement-group-info;
507     }
508   }
509
510   rpc create-alarm {
511     description "Create an alert for a running VDU";
512     input {
513       leaf cloud-account {
514         mandatory true;
515         type string;
516       }
517
518       leaf vdur-id {
519         mandatory true;
520         type string;
521       }
522
523       container alarm {
524         uses manotypes:alarm;
525       }
526     }
527
528     output {
529       leaf alarm-id {
530         type string;
531       }
532     }
533   }
534
535   rpc destroy-alarm {
536     description "Destroy an alert that is associated with a running VDU";
537     input {
538       leaf cloud-account {
539         mandatory true;
540         type string;
541       }
542
543       leaf alarm-id {
544         mandatory true;
545         type string;
546       }
547     }
548   }
549 }
550