Merge branch 'master' into netslice
[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 uint64;
725             }
726
727             leaf scale-in-relational-operation {
728               description
729                 "The relational operator used to compare the monitoring param
730                 against the scale-in-threshold.";
731               type manotypes:relational-operation-type;
732               default LE;
733             }
734
735             leaf scale-out-threshold {
736               description
737                   "Value above which scale-out requests are generated";
738               type uint64;
739             }
740
741             leaf scale-out-relational-operation {
742               description
743                 "The relational operator used to compare the monitoring param
744                 against the scale-out-threshold.";
745               type manotypes:relational-operation-type;
746               default GE;
747             }
748
749             leaf vnf-monitoring-param-ref {
750               description
751                  "Reference to the VNF level monitoring parameter
752                   that is aggregated";
753               type leafref {
754                 path "../../../../monitoring-param/id";
755               }
756             }
757           }
758         }
759
760         list vdu {
761           description "List of VDUs in this scaling group";
762           key "vdu-id-ref";
763
764           leaf vdu-id-ref {
765             description "Reference to the VDU id";
766             type leafref {
767               path "../../../vdu/id";
768             }
769           }
770
771           leaf count {
772             description
773               "count of this VDU id within this scaling group.
774                The count allows to define the number of instances
775                when a scaling action targets this scaling group";
776             type uint32;
777             default 1;
778           }
779         }
780
781         leaf min-instance-count {
782           description
783             "Minimum instances of the scaling group which are allowed.
784             These instances are created by default when the network service
785             is instantiated.";
786           type uint32;
787           default 0;
788         }
789
790         leaf max-instance-count {
791           description
792             "Maximum instances of this scaling group that are allowed
793              in a single network service. The network service scaling
794              will fail, when the number of service group instances
795              exceed the max-instance-count specified.";
796           type uint32;
797           default 10;
798         }
799
800         list scaling-config-action {
801           description "List of scaling config actions";
802           key "trigger";
803
804           leaf trigger {
805             description "scaling trigger";
806             type manotypes:scaling-trigger;
807           }
808
809           leaf vnf-config-primitive-name-ref {
810             description "Reference to the VNF config primitive";
811             type leafref {
812               path "../../../vnf-configuration/config-primitive/name";
813             }
814           }
815         }
816       }
817
818       list monitoring-param {
819         description
820           "List of monitoring parameters at the network service level";
821         key id;
822         leaf id {
823           type string;
824         }
825
826         leaf name {
827           type string;
828         }
829
830         uses manotypes:monitoring-param-aggregation;
831
832         choice monitoring-type {
833           description
834             "Defines the type of monitoring param to be used:
835               * vdu-monitorin-param:     VDU-related metric (from NFVI)
836               * vnf-metric:              VNF-related metric (from VCA)
837               * vdu-metric:              VDU-related metric (from VCA)
838             ";
839
840           case vdu-monitoring-param {
841             description "VDU-related metric from the infrastructure";
842             container vdu-monitoring-param {
843               leaf vdu-ref {
844                 type leafref {
845                   path "../../../vdu/id";
846                 }
847               }
848               leaf vdu-monitoring-param-ref {
849                 type leafref {
850                   path "../../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
851                 }
852               }
853             }
854           }
855
856           case vnf-metric {
857             description "VNF-related metric (from VCA)";
858             container vnf-metric {
859               leaf vnf-metric-name-ref {
860                 type leafref {
861                   path "../../../vnf-configuration/metrics/name";
862                 }
863               }
864             }
865           }
866
867           case vdu-metric {
868             description "VDU-related metric (from VCA)";
869             container vdu-metric {
870               leaf vdu-ref {
871                 type leafref {
872                   path "../../../vdu/id";
873                 }
874               }
875               leaf vdu-metric-name-ref {
876                 type leafref {
877                   path "../../../vdu[id = current()/../vdu-ref]/vdu-configuration/metrics/name";
878                 }
879               }
880             }
881           }
882
883         }
884
885         leaf http-endpoint-ref {
886           type leafref {
887             path "../../http-endpoint/path";
888           }
889         }
890
891         leaf json-query-method {
892           type manotypes:json-query-method;
893           default "NAMEKEY";
894         }
895
896         container json-query-params {
897           leaf json-path {
898             description
899               "The jsonpath to use to extract value from JSON structure";
900             type string;
901           }
902           leaf object-path {
903             description
904               "The objectpath to use to extract value from JSON structure";
905             type string;
906           }
907         }
908
909         uses manotypes:monitoring-param-ui-data;
910         uses manotypes:monitoring-param-value;
911
912       }
913
914       list placement-groups {
915         description "List of placement groups at VNF level";
916
917         key "name";
918         uses manotypes:placement-group-info;
919
920         list member-vdus {
921
922           description
923               "List of VDUs that are part of this placement group";
924           key "member-vdu-ref";
925
926           leaf member-vdu-ref {
927             type leafref {
928               path "../../../vdu/id";
929             }
930           }
931         }
932       }
933   }
934 }
935
936 // vim: sw=2