Bug 113 add VNFD copy to VNFR
[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 connection-point-id {
274           rwpb:field-inline "true";
275           rwpb:field-string-max 64;
276           type string;
277         }
278       }
279
280       list vdur {
281         description "List of Virtual Deployment Units";
282         key "id";
283         unique "name";
284
285         leaf id {
286           description "Unique id for the VDU";
287           type yang:uuid;
288         }
289
290         leaf name {
291           description "name of the instantiated VDUR";
292           type string;
293         }
294
295         leaf vdu-id-ref {
296           type leafref {
297             path "../../vnfd/vdu/id";
298           }
299         }
300
301         leaf vim-id {
302           description "Allocated VM resource id";
303           type string;
304         }
305
306         leaf flavor-id {
307           description "VIM assigned flavor id";
308           type string;
309         }
310
311         leaf image-id {
312           description "VIM assigned image id";
313           type string;
314         }
315
316         leaf management-ip {
317           description "Management IP address";
318           type inet:ip-address;
319         }
320
321         leaf vm-management-ip {
322           description "VM Private Management IP address";
323           type inet:ip-address;
324         }
325
326         leaf console-url {
327           description "Console URL for this VDU, if available";
328           type inet:uri;
329         }
330
331         uses manotypes:vm-flavor;
332         uses manotypes:guest-epa;
333         uses manotypes:vswitch-epa;
334         uses manotypes:hypervisor-epa;
335         uses manotypes:host-epa;
336
337         list volumes {
338           key "name";
339
340           leaf name {
341             description "Name of the disk-volumes, e.g. vda, vdb etc";
342             type string;
343           }
344
345           leaf volume-id {
346             description "VIM assigned volume id";
347             type string;
348           }
349
350           uses manotypes:volume-info;
351         }
352
353         list alarms {
354           description
355               "A list of the alarms that have been created for this VDU";
356
357           key "alarm-id";
358           uses manotypes:alarm;
359         }
360
361         list internal-connection-point {
362           key "id";
363           description
364               "List for internal connection points. Each VNFC
365                has zero or more internal connection points.
366                Internal connection points are used for connecting
367                the VNF components internal to the VNF. If a VNF
368                has only one VNFC, it may not have any internal
369                connection points.";
370
371           uses vnfd:common-connection-point;
372
373           leaf ip-address {
374             description 
375                 "IP address assigned to the external connection point";
376             type inet:ip-address;
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