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