d47c6a733bfda7f53eda523e8192449ff3bed568
[osm/IM.git] / models / yang / vnfr.yang
1
2 /*
3  *
4  *   Copyright 2016-2017 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-base {
35     prefix "vnfd-base";
36   }
37
38   import project-vnfd {
39     prefix "project-vnfd";
40   }
41
42   import project-nsd {
43     prefix "project-nsd";
44   }
45
46   import vlr {
47     prefix "vlr";
48   }
49
50   import ietf-yang-types {
51     prefix "yang";
52   }
53
54   import ietf-inet-types {
55     prefix "inet";
56   }
57
58   import rw-project {
59     prefix "rw-project";
60   }
61
62   revision 2017-02-28 {
63     description
64       "Update model to support projects.";
65   }
66
67   revision 2015-09-10 {
68     description
69       "Initial revision. This YANG file defines
70        the Virtual Network Function Record (VNFR)";
71     reference
72       "Derived from earlier versions of base YANG files";
73   }
74
75   grouping placement-group-info {
76     list placement-groups-info {
77       description
78           "
79           Placement groups to which this VDU belongs and its
80           cloud construct
81           ";
82       key "name";
83       uses manotypes:placement-group-info;
84       uses manotypes:placement-group-input;
85     }
86   }
87
88
89   grouping virtual-interface {
90     container virtual-interface {
91       description
92           "Container for the virtual interface properties";
93
94       leaf type {
95         description
96             "Specifies the type of virtual interface
97              between VM and host.
98              VIRTIO          : Use the traditional VIRTIO interface.
99              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
100              SR-IOV          : Use SR-IOV interface.";
101         type enumeration {
102           enum VIRTIO;
103           enum PCI-PASSTHROUGH;
104           enum SR-IOV;
105         }
106       }
107
108       leaf bandwidth {
109         description
110             "Aggregate bandwidth of the NIC.";
111         type uint64;
112       }
113
114       leaf ovs-offload {
115         description
116             "Defines if the NIC supports OVS offload.
117              MANDATORY : OVS offload support in the NIC is mandatory.
118              PREFERRED : OVS offload support in the NIC is preferred.";
119         type enumeration {
120           enum MANDATORY;
121           enum PREFERRED;
122         }
123       }
124
125       leaf vendor-id {
126         description
127             "Specifies the vendor specific id for
128              the device. This is used when a NIC from
129              specific HW vendor is required.";
130         type string;
131       }
132
133       leaf datapath-library {
134         description
135             "Specifies the name and version of the datapath
136              library the NIC is expected to support.";
137         type string;
138       }
139
140       leaf provider-network-name {
141         description
142             "Name of the provider network to which this
143              NIC is attached.";
144         type string;
145       }
146     }
147   }
148
149   grouping associated-virtual-cps {
150     list virtual-cps {
151       key "name";
152       uses vnfd-base:common-connection-point;
153
154       leaf ip-address {
155         description
156             "IP address assigned to the virtual connection point";
157         type inet:ip-address;
158       }
159
160       leaf mac-address {
161         description
162             "MAC address assigned to the virtual connection point";
163         type string;
164       }
165
166       leaf connection-point-id {
167         description "VIM identifier for connection point";
168         type string;
169       }
170     }
171   }
172
173   augment "/rw-project:project" {
174     container vnfr-catalog {
175       config false;
176       list vnfr {
177         description
178           "Virtual Network Function Record (VNFR).";
179         key "id";
180         unique "name";
181
182         leaf id {
183           description "Identifier for the VNFR.";
184           type yang:uuid;
185         }
186
187         leaf nsr-id-ref {
188           description
189             "NS instance identifier.
190              This is a leafref /nsr:ns-instance-config/nsr:nsr/nsr:id";
191           type yang:uuid;
192         }
193
194         leaf member-vnf-index-ref {
195           description "Reference to member VNF index in Network service.";
196           type leafref {
197             path "../../../project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:constituent-vnfd/project-nsd:member-vnf-index";
198           }
199         }
200
201         leaf dashboard-url {
202           description "Dashboard URL";
203           type inet:uri;
204         }
205
206         leaf name {
207           description "VNFR name.";
208           type string;
209         }
210
211         leaf short-name {
212           description "VNFR short name.";
213           type string;
214         }
215
216         leaf vendor {
217           description "Vendor of the VNFR.";
218           type string;
219         }
220
221         leaf description {
222           description "Description of the VNFR.";
223           type string;
224         }
225
226         leaf version {
227           description "Version of the VNFR";
228           type string;
229         }
230
231         leaf create-time {
232           description
233             "Creation timestamp of this Virtual Network
234           Function.  The timestamp is expressed as
235           seconds since unix epoch - 1970-01-01T00:00:00Z";
236
237           type uint32;
238         }
239
240         leaf uptime {
241           description
242             "Active period of this Virtual Network Function.
243           Uptime is expressed in seconds";
244
245           type uint32;
246         }
247
248         container vnfd {
249           description "VNF descriptor used to instantiate this VNF";
250           uses vnfd-base:vnfd-descriptor;
251         }
252
253         leaf vnfd-ref {
254           description "Reference to VNFD";
255           type leafref {
256             path "../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
257           }
258         }
259
260         // Use parameters provided here to configure this VNF
261       container vnf-configuration {
262         uses manotypes:vca-configuration;
263       }
264
265         // Mainly used by Mon-params & dashboard url
266         container mgmt-interface {
267           leaf ip-address {
268             type inet:ip-address;
269           }
270
271           leaf port {
272             type inet:port-number;
273           }
274
275           container ssh-key {
276             description "SSH key pair used for this VNF";
277             leaf public-key {
278               description "Public key configured on this VNF";
279               type string;
280             }
281
282             leaf private-key-file {
283               description "Path to the private key file";
284               type string;
285             }
286           }
287         }
288
289         list internal-vlr {
290           key "vlr-ref";
291
292           leaf vlr-ref {
293             description "Reference to a VLR record in the VLR catalog";
294             type leafref {
295               path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
296             }
297           }
298
299           leaf-list internal-connection-point-ref {
300             type leafref {
301               path "../../vdur/internal-connection-point/id";
302             }
303           }
304         }
305
306         list connection-point {
307           key "name";
308           description
309             "List for external connection points. Each VNF has one
310              or more external connection points. As the name
311              implies that external connection points are used for
312              connecting the VNF to other VNFs or to external networks.
313              Each VNF exposes these connection points to the
314              orchestrator. The orchestrator can construct network
315              services by connecting the connection points between
316              different VNFs. The NFVO will use VLDs and VNFFGs at
317              the network service level to construct network services.";
318
319           uses vnfd-base:common-connection-point;
320
321           leaf vlr-ref {
322             description
323               "Reference to the VLR associated with this connection point";
324             type  leafref {
325               path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id";
326             }
327           }
328
329           leaf ip-address {
330             description
331               "IP address assigned to the external connection point";
332             type inet:ip-address;
333           }
334           leaf mac-address {
335             description
336               "MAC address assigned to the external connection point";
337             // type inet:mac-address;
338             type string;
339           }
340
341           leaf connection-point-id {
342             type string;
343           }
344
345           uses associated-virtual-cps;
346         }
347
348         list vdur {
349           description "List of Virtual Deployment Units";
350           key "id";
351           unique "name";
352
353           leaf id {
354             description "Unique id for the VDU";
355             type yang:uuid;
356           }
357
358           leaf name {
359             description "name of the instantiated VDUR";
360             type string;
361           }
362
363           leaf unique-short-name {
364             description "Short Unique name of the VDU
365                   This will be of the format NSR name-ShortnedString-VDUname
366                   NSR name and VDU name shall be constrained to 10 characters";
367             rwpb:field-inline "true";
368             rwpb:field-string-max 64;
369             type string;
370           }
371
372           leaf vdu-id-ref {
373             type leafref {
374               path "../../vnfd/vdu/id";
375             }
376           }
377
378           leaf vim-id {
379             description "Allocated VM resource id";
380             type string;
381           }
382
383           leaf flavor-id {
384             description "VIM assigned flavor id";
385             type string;
386           }
387
388           leaf image-id {
389             description "VIM assigned image id";
390             type string;
391           }
392
393           leaf management-ip {
394             description "Management IP address";
395             type inet:ip-address;
396           }
397
398           leaf vm-management-ip {
399             description "VM Private Management IP address";
400             type inet:ip-address;
401           }
402
403           leaf console-url {
404             description "Console URL for this VDU, if available";
405             type inet:uri;
406           }
407
408           uses manotypes:vm-flavor;
409           uses manotypes:guest-epa;
410           uses manotypes:vswitch-epa;
411           uses manotypes:hypervisor-epa;
412           uses manotypes:host-epa;
413
414           uses manotypes:supplemental-boot-data;
415
416         container vdu-configuration {
417           uses manotypes:vca-configuration;
418         }
419
420           list volumes {
421             key "name";
422
423             leaf name {
424               description "Name of the disk-volumes, e.g. vda, vdb etc";
425               type string;
426             }
427
428             leaf volume-id {
429               description "VIM assigned volume id";
430               type string;
431             }
432
433             uses manotypes:volume-info;
434           }
435
436           list internal-connection-point {
437             key "id";
438             description
439               "List for internal connection points. Each VNFC
440                has zero or more internal connection points.
441                Internal connection points are used for connecting
442                the VNF components internal to the VNF. If a VNF
443                has only one VNFC, it may not have any internal
444                connection points.";
445
446             uses vnfd-base:common-connection-point;
447
448             leaf ip-address {
449               description
450                 "IP address assigned to the internal connection point";
451               type inet:ip-address;
452             }
453             leaf mac-address {
454               description
455                 "MAC address assigned to the internal connection point";
456               // type inet:mac-address;
457               type string;
458             }
459
460             leaf connection-point-id {
461               type string;
462             }
463
464             uses associated-virtual-cps;
465           }
466
467         list interface {
468           description
469               "List of interfaces (internal and external) for the VNF";
470           key name;
471
472           leaf name {
473             description
474                 "Name of the interface. Note that this
475                 name has only local significance to the VDU.";
476             type string;
477           }
478
479           leaf position {
480             description
481                 "Explicit Position of the interface within the list";
482             type uint32;
483           }
484
485           leaf type {
486             description
487                 "Type of the Interface";
488
489             type vnfd-base:interface-type;
490
491             default "EXTERNAL";
492           }
493           choice connection-point-type {
494             case internal {
495               leaf internal-connection-point-ref {
496                 description
497                     "Leaf Ref to the particular internal connection point";
498                 type leafref {
499                   path "../../internal-connection-point/id";
500                 }
501               }
502             }
503             case external {
504               leaf external-connection-point-ref {
505                 description
506                     "Leaf Ref to the particular external connection point";
507                 type leafref {
508                   path "../../../connection-point/name";
509                 }
510               }
511             }
512           }
513           uses virtual-interface;
514         }
515
516         leaf operational-status {
517           description
518             "The operational status of the VDU
519               init                : The VDU has just started.
520               vm-init-phase       : The VDUs in the VNF is being created in VIM.
521               vm-alloc-pending    : The  VM alloc is pending in VIM
522               running             : The VDU is active in VM
523               terminate           : The VDU is being terminated
524               vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
525               terminated          : The VDU is in the terminated state.
526               failed              : The VDU  instantiation failed.
527             ";
528
529             type enumeration {
530               rwpb:enum-type "VduOperationalStatus";
531               enum init;
532               enum vm-init-phase;
533               enum vm-alloc-pending;
534               enum running;
535               enum terminate;
536               enum vl-terminate-phase;
537               enum terminated;
538               enum failed;
539             }
540           }
541
542           uses placement-group-info;
543         }
544
545         uses manotypes:monitoring-param;
546
547         leaf operational-status {
548           description
549             "The operational status of the VNFR instance
550               pre-init            : The VNF before Input Param Substitution.
551               init                : The VNF has just started.
552               vl-init-phase       : The internal VLs in the VNF are being instantiated.
553               vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
554               running             : The VNF is in running state.
555               terminate           : The VNF is being terminated.
556               vm-terminate-phase  : The VMs in the VNF are being terminated.
557               vl-terminate-phase  : The internal VLs in the VNF are being terminated.
558               terminated          : The VNF is in the terminated state.
559               failed              : The VNF instantiation failed
560             ";
561
562           type enumeration {
563             rwpb:enum-type "VnfrOperationalStatus";
564             enum pre-init;
565             enum init;
566             enum vl-init-phase;
567             enum vm-init-phase;
568             enum running;
569             enum terminate;
570             enum vm-terminate-phase;
571             enum vl-terminate-phase;
572             enum terminated;
573             enum failed;
574           }
575         }
576
577         leaf config-status {
578           description
579             "The configuration status of the NS instance
580             configuring: At least one of the VNFs in this instance is in configuring state
581             configured:  All the VNFs in this NS instance are configured or config-not-needed state
582           ";
583
584           type enumeration {
585             enum configuring {
586               value 1;
587             }
588             enum configured {
589               value 2;
590             }
591             enum failed {
592               value 3;
593             }
594             enum config-not-needed {
595               value 4;
596             }
597           }
598         }
599         uses placement-group-info;
600
601         container cloud-config {
602           rwpb:msg-new VnfrCloudConfig;
603           uses manotypes:cloud-config;
604         }
605       }
606     }
607   }
608 }