add vdur and vnfr monitoring-param lists. Fixes IM tree view generation
[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 monitoring-param {
451             description
452               "List of VDU-related monitoring parameters at NFVI level";
453             key id;
454             leaf id {
455               description "The unique id of the monitoring param at VDU level";
456               type string;
457             }
458
459             leaf nfvi-metric {
460               description "The associated NFVI metric to be monitored";
461               type manotypes:nfvi-metric-type;
462             }
463
464             leaf interface-name-ref {
465               description
466                 "Reference to a VDU interface name. Applicable only when the nfvi-metric
467                 refers to an interface and not to the VM";
468               type leafref {
469                 path "../../interface/name";
470               }
471             }
472           }
473
474           list volumes {
475             key "name";
476
477             leaf name {
478               description "Name of the disk-volumes, e.g. vda, vdb etc";
479               type string;
480             }
481
482             leaf volume-id {
483               description "VIM assigned volume id";
484               type string;
485             }
486
487             uses manotypes:volume-info;
488           }
489
490           list internal-connection-point {
491             key "id";
492             description
493               "List for internal connection points. Each VNFC
494                has zero or more internal connection points.
495                Internal connection points are used for connecting
496                the VNF components internal to the VNF. If a VNF
497                has only one VNFC, it may not have any internal
498                connection points.";
499
500             uses vnfd-base:common-connection-point;
501
502             leaf ip-address {
503               description
504                 "IP address assigned to the internal connection point";
505               type inet:ip-address;
506             }
507
508             leaf mac-address {
509               description
510                 "MAC address assigned to the internal connection point";
511               // type inet:mac-address;
512               type string;
513             }
514
515             leaf connection-point-id {
516               type string;
517             }
518
519             uses associated-virtual-cps;
520           }
521
522           list interface {
523             description
524                 "List of interfaces (internal and external) for the VNF";
525             key name;
526
527             leaf name {
528               description
529                   "Name of the interface. Note that this
530                   name has only local significance to the VDU.";
531               type string;
532             }
533
534             leaf position {
535               description
536                   "Explicit Position of the interface within the list";
537               type uint32;
538             }
539
540             leaf type {
541               description
542                   "Type of the Interface";
543
544               type vnfd-base:interface-type;
545
546               default "EXTERNAL";
547             }
548             choice connection-point-type {
549               case internal {
550                 leaf internal-connection-point-ref {
551                   description
552                       "Leaf Ref to the particular internal connection point";
553                   type leafref {
554                     path "../../internal-connection-point/id";
555                   }
556                 }
557               }
558               case external {
559                 leaf external-connection-point-ref {
560                   description
561                       "Leaf Ref to the particular external connection point";
562                   type leafref {
563                     path "../../../connection-point/name";
564                   }
565                 }
566               }
567             }
568             uses virtual-interface;
569           }
570
571           leaf operational-status {
572             description
573               "The operational status of the VDU
574                 init                : The VDU has just started.
575                 vm-init-phase       : The VDUs in the VNF is being created in VIM.
576                 vm-alloc-pending    : The  VM alloc is pending in VIM
577                 running             : The VDU is active in VM
578                 upgrading           : The VDU is being upgraded (EXPERIMENTAL)
579                 terminate           : The VDU is being terminated
580                 vm-terminate-phase  : The VDU in the VNF is being terminated in VIM.
581                 terminated          : The VDU is in the terminated state.
582                 failed              : The VDU  instantiation failed.
583               ";
584             type vdu-operational-status;
585           }
586
587           uses placement-group-info;
588         }
589
590         list monitoring-param {
591           description
592             "List of monitoring parameters at the network service level";
593           key id;
594           leaf id {
595             type string;
596           }
597
598           leaf name {
599             type string;
600           }
601
602           uses manotypes:monitoring-param-aggregation;
603
604           choice monitoring-type {
605             description
606               "Defines the type of monitoring param to be used:
607                 * vdu-monitorin-param:     VDU-related metric (from NFVI)
608                 * vnf-metric:              VNF-related metric (from VCA)
609                 * vdu-metric:              VDU-related metric (from VCA)
610               ";
611
612             case vdu-monitoring-param {
613               description "VDU-related metric from the infrastructure";
614               container vdu-monitoring-param {
615                 leaf vdu-ref {
616                   type leafref {
617                     path "../../../vdur/id";
618                   }
619                 }
620                 leaf vdu-monitoring-param-ref {
621                   type leafref {
622                     path "../../../vdur[id = current()/../vdu-ref]/monitoring-param/id";
623                   }
624                 }
625               }
626             }
627
628             case vnf-metric {
629               description "VNF-related metric (from VCA)";
630               container vnf-metric {
631                 leaf vnf-metric-name-ref {
632                   type leafref {
633                     path "../../../vnf-configuration/metrics/name";
634                   }
635                 }
636               }
637             }
638
639             case vdu-metric {
640               description "VDU-related metric (from VCA)";
641               container vdu-metric {
642                 leaf vdu-ref {
643                   type leafref {
644                     path "../../../vdur/id";
645                   }
646                 }
647                 leaf vdu-metric-name-ref {
648                   type leafref {
649                     path "../../../vdur[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
650                   }
651                 }
652               }
653             }
654
655           }
656
657         }
658
659         leaf operational-status {
660           description
661             "The operational status of the VNFR instance
662               pre-init            : The VNF before Input Param Substitution.
663               init                : The VNF has just started.
664               vl-init-phase       : The internal VLs in the VNF are being instantiated.
665               vm-init-phase       : The VMs for VDUs in the VNF are being instantiated.
666               running             : The VNF is in running state.
667               terminate           : The VNF is being terminated.
668               vm-terminate-phase  : The VMs in the VNF are being terminated.
669               vl-terminate-phase  : The internal VLs in the VNF are being terminated.
670               terminated          : The VNF is in the terminated state.
671               failed              : The VNF instantiation failed
672             ";
673           type vnf-operational-status;
674         }
675
676         leaf config-status {
677           description
678             "The configuration status of the NS instance
679             configuring: At least one of the VNFs in this instance is in configuring state
680             configured:  All the VNFs in this NS instance are configured or config-not-needed state
681           ";
682
683           type enumeration {
684             enum configuring {
685               value 1;
686             }
687             enum configured {
688               value 2;
689             }
690             enum failed {
691               value 3;
692             }
693             enum config-not-needed {
694               value 4;
695             }
696           }
697         }
698         uses placement-group-info;
699
700         container cloud-config {
701           uses manotypes:cloud-config;
702         }
703       }
704     }
705   }
706 }