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