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