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