Support for additional EPA parameters for resource allocation and placement
[osm/IM.git] / models / yang / vnfd-base.yang
1
2 /*
3  *
4  *   Copyright 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 vnfd-base
22 {
23   namespace "http://riftio.com/ns/riftware-1.0/vnfd-base";
24   prefix "vnfd-base";
25
26   import mano-types {
27     prefix "manotypes";
28   }
29
30   import ietf-inet-types {
31     prefix "inet";
32   }
33
34   revision 2017-02-28 {
35     description
36       "Initial revision. This YANG file defines
37        the common types for Virtual Network Function
38        (VNF) descriptor";
39     reference
40       "Derived from earlier versions of base YANG files";
41   }
42
43   grouping common-connection-point {
44     leaf name {
45       description "Name of the connection point";
46       type string;
47     }
48
49     leaf id {
50       description "Identifier for the internal connection points";
51       type string;
52     }
53
54     leaf short-name {
55       description "Short name to appear as label in the UI";
56       type string;
57     }
58
59     leaf type {
60       description "Type of the connection point.";
61       type manotypes:connection-point-type;
62     }
63
64     leaf port-security-enabled {
65       description "Enables the port security for the port.";
66       type boolean;
67       default true;
68     }
69   }
70
71   typedef interface-type {
72     type enumeration {
73       enum INTERNAL;
74       enum EXTERNAL;
75     }
76   }
77
78   typedef vnf-operational-status {
79     type enumeration {
80       enum init;
81       enum running;
82       enum upgrading;
83       enum terminate;
84       enum terminated;
85       enum failed;
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              PARAVIRT        : Use the default paravirtualized interface for the VIM (virtio, vmxnet3, etc.).
99              VIRTIO          : Deprecated! Use the traditional VIRTIO interface.
100              PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
101              SR-IOV          : Use SR-IOV interface.
102              E1000           : Emulate E1000 interface.
103              RTL8139         : Emulate RTL8139 interface.
104              PCNET           : Emulate PCNET interface.
105              OM-MGMT         : Deprecated! Use PARAVIRT instead and set the VNF management interface at vnfd:mgmt-interface:cp";
106
107         type enumeration {
108           enum PARAVIRT;
109           enum OM-MGMT;
110           enum PCI-PASSTHROUGH;
111           enum SR-IOV;
112           enum VIRTIO;
113           enum E1000;
114           enum RTL8139;
115           enum PCNET;
116         }
117         default "PARAVIRT";
118       }
119
120       leaf vpci {
121         description
122             "Specifies the virtual PCI address. Expressed in
123              the following format dddd:dd:dd.d. For example
124              0000:00:12.0. This information can be used to
125              pass as metadata during the VM creation.";
126         type string;
127       }
128
129       leaf bandwidth {
130         description
131             "Aggregate bandwidth of the NIC.";
132         type uint64;
133       }
134     }
135   }
136
137   grouping vnfd-descriptor {
138       leaf id {
139         description "Identifier for the VNFD.";
140         type string {
141           length "1..63";
142         }
143       }
144
145       leaf name {
146         description "VNFD name.";
147         mandatory true;
148         type string;
149       }
150
151       leaf short-name {
152         description "Short name to appear as label in the UI";
153         type string;
154       }
155
156       leaf vendor {
157         description "Vendor of the VNFD.";
158         type string;
159       }
160
161       leaf logo {
162         description
163             "Vendor logo for the Virtual Network Function";
164         type string;
165       }
166
167       leaf description {
168         description "Description of the VNFD.";
169         type string;
170       }
171
172       leaf version {
173         description "Version of the VNFD";
174         type string;
175       }
176
177       container vnf-configuration {
178         uses manotypes:vca-configuration;
179       }
180
181       leaf operational-status {
182          description
183            "The operational status of the VNF
184              init                : The VNF has just started.
185              running             : The VNF is active in VM
186              upgrading           : The VNF is being upgraded (EXPERIMENTAL)
187              terminate           : The VNF is being terminated
188              terminated          : The VNF is in the terminated state.
189              failed              : The VNF  instantiation failed.
190            ";
191          type vnf-operational-status;
192       }
193
194       container mgmt-interface {
195         description
196             "Interface over which the VNF is managed.";
197
198         choice endpoint-type {
199           description
200               "Indicates the type of management endpoint.";
201
202           case ip {
203             description
204                 "Specifies the static IP address for managing the VNF.";
205             leaf ip-address {
206               type inet:ip-address;
207             }
208           }
209
210           case vdu-id {
211             description
212                 "Use the default management interface on this VDU.";
213             leaf vdu-id {
214               type leafref {
215                 path "../../vdu/id";
216               }
217             }
218           }
219
220           case cp {
221             description
222                 "Use the ip address associated with this connection point. This cp is then considered as management.";
223             leaf cp {
224               type leafref {
225                 path "../../connection-point/name";
226               }
227             }
228           }
229         }
230
231         leaf port {
232           description
233               "Port for the management interface.";
234           type inet:port-number;
235         }
236
237         container dashboard-params {
238           description "Parameters for the VNF dashboard";
239
240           leaf path {
241             description "The HTTP path for the dashboard";
242             type string;
243           }
244
245           leaf https {
246             description "Pick HTTPS instead of HTTP , Default is false";
247             type boolean;
248           }
249
250           leaf port {
251             description "The HTTP port for the dashboard";
252             type inet:port-number;
253           }
254         }
255       }
256
257       list internal-vld {
258         key "id";
259         description
260           "List of Internal Virtual Link Descriptors (VLD).
261           The internal VLD describes the basic topology of
262           the connectivity such as E-LAN, E-Line, E-Tree.
263           between internal VNF components of the system.";
264
265         leaf id {
266           description "Identifier for the VLD";
267           type string;
268         }
269
270         leaf name {
271           description "Name of the internal VLD";
272           type string;
273         }
274
275         leaf short-name {
276           description "Short name to appear as label in the UI";
277           type string;
278         }
279
280         leaf description {
281           type string;
282         }
283
284         leaf type {
285           type manotypes:virtual-link-type;
286         }
287
288         leaf root-bandwidth {
289           description
290               "For ELAN this is the aggregate bandwidth.";
291           type uint64;
292         }
293
294         leaf leaf-bandwidth {
295           description
296               "For ELAN this is the bandwidth of branches.";
297           type uint64;
298         }
299
300         list internal-connection-point {
301           key "id-ref";
302           description "List of internal connection points in this VLD";
303           leaf id-ref {
304             description "Reference to the internal connection point id";
305             type leafref {
306               path "../../../vdu/internal-connection-point/id";
307             }
308           }
309
310           leaf ip-address {
311             description "IP address of the internal connection point";
312             type inet:ip-address;
313           }
314         }
315
316         uses manotypes:provider-network;
317         choice init-params {
318           description "Extra parameters for VLD instantiation";
319
320           case vim-network-ref {
321             leaf vim-network-name {
322               description
323                   "Name of network in VIM account. This is used to indicate
324                     pre-provisioned network name in cloud account.";
325               type string;
326             }
327           }
328
329           case vim-network-profile {
330             leaf ip-profile-ref {
331               description "Named reference to IP-profile object";
332               type string;
333             }
334           }
335
336         }
337       }
338
339       uses manotypes:ip-profile-list;
340
341       list connection-point {
342         key "name";
343         description
344           "List for external connection points. Each VNF has one
345           or more external connection points that connect the VNF
346           to other VNFs or to external networks. Each VNF exposes
347           connection points to the orchestrator, which can construct
348           network services by connecting the connection points
349           between different VNFs. The NFVO will use VLDs and VNFFGs
350           at the network service level to construct network services.";
351
352         uses common-connection-point;
353
354         leaf internal-vld-ref {
355           description
356             "Reference to an internal VLD of the VNF. This field is
357             optional. It allows exposing an internal VLD through a
358             connection point. When building a NS, this VNF CP might be
359             connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
360             VLD of the NS) will become the same network and the IP profile will
361             be the one configured at NS level.";
362           type leafref {
363             path "../../internal-vld/id";
364           }
365         }
366       }
367
368       list vdu {
369         description "List of Virtual Deployment Units";
370         key "id";
371
372         leaf id {
373           description "Unique id for the VDU";
374           type string;
375         }
376
377         leaf name {
378           description "Unique name for the VDU";
379           type string;
380         }
381
382         leaf description {
383             description "Description of the VDU.";
384             type string;
385         }
386
387         leaf pdu-type {
388           description
389             "Type of PDU. If this field exists, the deployment unit must be
390             understood as a PDU, not as a VDU. This field is used to identify
391             the category of PDU instances to be used at instantiation time. For
392             the instantiation to be successful, there must be available
393             PDU instances of this type in the selected datacenter.";
394           type string;
395         }
396
397         leaf count {
398           description "Number of instances of VDU";
399           type uint64;
400         }
401
402         leaf mgmt-vpci {
403           description
404               "Specifies the virtual PCI address. Expressed in
405              the following format dddd:dd:dd.d. For example
406              0000:00:12.0. This information can be used to
407              pass as metadata during the VM creation.";
408           type string;
409         }
410
411         uses manotypes:vm-flavor;
412         uses manotypes:guest-epa;
413         uses manotypes:vswitch-epa;
414         uses manotypes:hypervisor-epa;
415         uses manotypes:host-epa;
416
417         list alarm {
418           key "alarm-id";
419
420           uses manotypes:alarm;
421         }
422
423         uses manotypes:image-properties;
424
425         list alternative-images {
426           key "vim-type";
427           description
428             "List of alternative images per VIM type.
429             Different images can be used for specific types of VIMs instead
430             of the default image. This allows deployments in sites where the
431             image identifier in the VIM is given by the VIM provider and
432             cannot be modified.
433             If an alternative image is specified for a VIM type, it will prevail
434             over the default image";
435
436           leaf vim-type {
437             description "VIM type: openvim, openstack, vmware, aws, etc.";
438             type string;
439           }
440
441           uses manotypes:image-properties;
442         }
443
444         container vdu-configuration {
445           uses manotypes:vca-configuration;
446         }
447
448         list monitoring-param {
449           description
450             "List of VDU-related monitoring parameters at NFVI level";
451           key id;
452           leaf id {
453             description "The unique id of the monitoring param at VDU level";
454             type string;
455           }
456
457           leaf nfvi-metric {
458             description "The associated NFVI metric to be monitored";
459             type manotypes:nfvi-metric-type;
460           }
461
462           leaf interface-name-ref {
463             description
464               "Reference to a VDU interface name. Applicable only when the nfvi-metric
465               refers to an interface and not to the VM";
466             type leafref {
467               path "../../interface/name";
468             }
469           }
470         }
471
472         choice cloud-init-input {
473           description
474             "Indicates how the contents of cloud-init script are provided.
475              There are 2 choices - inline or in a file";
476
477           case inline {
478             leaf cloud-init {
479               description
480                 "Contents of cloud-init script, provided inline, in cloud-config format";
481               type string;
482             }
483           }
484
485           case filename {
486             leaf cloud-init-file {
487               description
488                 "Name of file with contents of cloud-init script in cloud-config format";
489                 type string;
490             }
491           }
492         }
493
494         uses manotypes:supplemental-boot-data;
495
496         list internal-connection-point {
497           key "id";
498           description
499             "List for internal connection points. Each VNFC
500             has zero or more internal connection points.
501             Internal connection points are used for connecting
502             the VNF with components internal to the VNF. If a VNF
503             has only one VNFC, it may not have any internal
504             connection points.";
505
506           uses common-connection-point;
507
508           leaf internal-vld-ref {
509             type leafref {
510               path "../../../internal-vld/id";
511             }
512           }
513         }
514
515         list interface {
516           description
517               "List of Interfaces (external and internal) for the VNF";
518           key name;
519
520           leaf name {
521             description
522                 "Name of the interface. Note that this
523                 name has only local significance to the VDU.";
524             type string;
525           }
526
527           leaf position {
528             description
529                 "Explicit Position of the interface within the list";
530             type uint32;
531           }
532
533           leaf mgmt-interface {
534             description
535                 "Flag to indicate that this is the mgmt interface
536                 to be used for VDU configuration";
537             type boolean;
538             default false;
539           }
540
541           leaf type {
542             description
543                 "Type of the Interface";
544             type interface-type;
545
546             default "EXTERNAL";
547           }
548
549           leaf mac-address {
550             description
551                 "MAC address of the interface.
552                 Some VNFs require a specific MAC address to be configured
553                 in the interface. While this is not recommended at all in
554                 NFV environments, this parameter exists to allow those
555                 scenarios.
556                 This parameter will be likely deprecated in the future.";
557             type string;
558           }
559
560           choice connection-point-type {
561             case internal {
562               leaf internal-connection-point-ref {
563                 description
564                     "Leaf Ref to the particular internal connection point";
565                 type leafref {
566                    path "../../internal-connection-point/id";
567                  }
568               }
569             }
570             case external {
571               leaf external-connection-point-ref {
572                 description
573                     "Leaf Ref to the particular external connection point";
574                 type leafref {
575                    path "../../../connection-point/name";
576                  }
577               }
578             }
579           }
580
581           uses virtual-interface;
582         }
583
584
585         list volumes {
586           key "name";
587
588           leaf name {
589             description "Name of the disk-volumes, e.g. vda, vdb etc";
590             type string;
591           }
592
593           uses manotypes:volume-info;
594         }
595       }
596
597       list vdu-dependency {
598         description
599             "List of VDU dependencies.";
600
601         key vdu-source-ref;
602         leaf vdu-source-ref {
603           type leafref {
604             path "../../vdu/id";
605           }
606         }
607
608         leaf vdu-depends-on-ref {
609           description
610             "Reference to the VDU on which
611             the source VDU depends.";
612           type leafref {
613             path "../../vdu/id";
614           }
615         }
616       }
617
618       leaf service-function-chain {
619         description "Type of node in Service Function Chaining Architecture";
620
621         type enumeration {
622           enum UNAWARE;
623           enum CLASSIFIER;
624           enum SF;
625           enum SFF;
626         }
627         default "UNAWARE";
628       }
629
630       leaf service-function-type {
631         description
632           "Type of Service Function.
633            NOTE: This needs to map with Service Function Type in ODL to
634            support VNFFG. Service Function Type is mandatory param in ODL
635            SFC. This is temporarily set to string for ease of use";
636         type string;
637       }
638
639       uses manotypes:http-endpoints;
640
641       list scaling-group-descriptor {
642         description
643             "scaling group descriptor within the VNF.
644              The scaling group defines a group of VDUs,
645              and the ratio of VDUs in the VNF
646              that is used as target for scaling action";
647
648         key "name";
649
650         leaf name {
651           description "Name of this scaling group.";
652           type string;
653         }
654
655         list scaling-policy {
656
657           key "name";
658
659           leaf name {
660             description
661                 "Name of the scaling policy";
662             type string;
663           }
664
665           leaf scaling-type {
666             description
667                 "Type of scaling";
668             type manotypes:scaling-policy-type;
669           }
670
671           leaf enabled {
672             description
673               "Specifies if the scaling policy can be applied";
674             type boolean;
675             default true;
676           }
677
678           leaf scale-in-operation-type {
679             description
680                 "Operation to be applied to check between scaling criterias to
681                  check if the scale in threshold condition has been met.
682                  Defaults to AND";
683             type manotypes:scaling-criteria-operation;
684             default AND;
685           }
686
687           leaf scale-out-operation-type {
688             description
689                 "Operation to be applied to check between scaling criterias to
690                  check if the scale out threshold condition has been met.
691                  Defauls to OR";
692             type manotypes:scaling-criteria-operation;
693             default OR;
694           }
695
696           leaf threshold-time {
697             description
698               "The duration for which the criteria must hold true";
699             type uint32;
700             mandatory true;
701           }
702
703           leaf cooldown-time {
704             description
705               "The duration after a scaling-in/scaling-out action has been
706               triggered, for which there will be no further optional";
707             type uint32;
708             mandatory true;
709           }
710
711           list scaling-criteria {
712             description
713                 "list of conditions to be met for generating scaling
714                    requests";
715             key "name";
716
717             leaf name {
718               type string;
719             }
720
721             leaf scale-in-threshold {
722               description
723                   "Value below which scale-in requests are generated";
724               type decimal64{
725                 fraction-digits 10;
726              }
727             }
728
729             leaf scale-in-relational-operation {
730               description
731                 "The relational operator used to compare the monitoring param
732                 against the scale-in-threshold.";
733               type manotypes:relational-operation-type;
734               default LE;
735             }
736
737             leaf scale-out-threshold {
738               description
739                   "Value above which scale-out requests are generated";
740               type decimal64{
741                 fraction-digits 10;
742              }
743             }
744
745             leaf scale-out-relational-operation {
746               description
747                 "The relational operator used to compare the monitoring param
748                 against the scale-out-threshold.";
749               type manotypes:relational-operation-type;
750               default GE;
751             }
752
753             leaf vnf-monitoring-param-ref {
754               description
755                  "Reference to the VNF level monitoring parameter
756                   that is aggregated";
757               type leafref {
758                 path "../../../../monitoring-param/id";
759               }
760             }
761           }
762         }
763
764         list vdu {
765           description "List of VDUs in this scaling group";
766           key "vdu-id-ref";
767
768           leaf vdu-id-ref {
769             description "Reference to the VDU id";
770             type leafref {
771               path "../../../vdu/id";
772             }
773           }
774
775           leaf count {
776             description
777               "count of this VDU id within this scaling group.
778                The count allows to define the number of instances
779                when a scaling action targets this scaling group";
780             type uint32;
781             default 1;
782           }
783         }
784
785         leaf min-instance-count {
786           description
787             "Minimum instances of the scaling group which are allowed.
788             These instances are created by default when the network service
789             is instantiated.";
790           type uint32;
791           default 0;
792         }
793
794         leaf max-instance-count {
795           description
796             "Maximum instances of this scaling group that are allowed
797              in a single network service. The network service scaling
798              will fail, when the number of service group instances
799              exceed the max-instance-count specified.";
800           type uint32;
801           default 10;
802         }
803
804         list scaling-config-action {
805           description "List of scaling config actions";
806           key "trigger";
807
808           leaf trigger {
809             description "scaling trigger";
810             type manotypes:scaling-trigger;
811           }
812
813           leaf vnf-config-primitive-name-ref {
814             description "Reference to the VNF config primitive";
815             type leafref {
816               path "../../../vnf-configuration/config-primitive/name";
817             }
818           }
819         }
820       }
821
822       list monitoring-param {
823         description
824           "List of monitoring parameters at the network service level";
825         key id;
826         leaf id {
827           type string;
828         }
829
830         leaf name {
831           type string;
832         }
833
834         uses manotypes:monitoring-param-aggregation;
835
836         choice monitoring-type {
837           description
838             "Defines the type of monitoring param to be used:
839               * vdu-monitorin-param:     VDU-related metric (from NFVI)
840               * vnf-metric:              VNF-related metric (from VCA)
841               * vdu-metric:              VDU-related metric (from VCA)
842             ";
843
844           case vdu-monitoring-param {
845             description "VDU-related metric from the infrastructure";
846             container vdu-monitoring-param {
847               leaf vdu-ref {
848                 type leafref {
849                   path "../../../vdu/id";
850                 }
851               }
852               leaf vdu-monitoring-param-ref {
853                 type leafref {
854                   path "../../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
855                 }
856               }
857             }
858           }
859
860           case vnf-metric {
861             description "VNF-related metric (from VCA)";
862             container vnf-metric {
863               leaf vnf-metric-name-ref {
864                 type leafref {
865                   path "../../../vnf-configuration/metrics/name";
866                 }
867               }
868             }
869           }
870
871           case vdu-metric {
872             description "VDU-related metric (from VCA)";
873             container vdu-metric {
874               leaf vdu-ref {
875                 type leafref {
876                   path "../../../vdu/id";
877                 }
878               }
879               leaf vdu-metric-name-ref {
880                 type leafref {
881                   path "../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
882                 }
883               }
884             }
885           }
886
887         }
888
889         leaf http-endpoint-ref {
890           type leafref {
891             path "../../http-endpoint/path";
892           }
893         }
894
895         leaf json-query-method {
896           type manotypes:json-query-method;
897           default "NAMEKEY";
898         }
899
900         container json-query-params {
901           leaf json-path {
902             description
903               "The jsonpath to use to extract value from JSON structure";
904             type string;
905           }
906           leaf object-path {
907             description
908               "The objectpath to use to extract value from JSON structure";
909             type string;
910           }
911         }
912
913         uses manotypes:monitoring-param-ui-data;
914         uses manotypes:monitoring-param-value;
915
916       }
917
918       list placement-groups {
919         description "List of placement groups at VNF level";
920
921         key "name";
922         uses manotypes:placement-group-info;
923
924         list member-vdus {
925
926           description
927               "List of VDUs that are part of this placement group";
928           key "member-vdu-ref";
929
930           leaf member-vdu-ref {
931             type leafref {
932               path "../../../vdu/id";
933             }
934           }
935         }
936       }
937   }
938 }
939
940 // vim: sw=2