Merge feature7106
[osm/IM.git] / models / yang / nsd-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 nsd-base
22 {
23   namespace "http://riftio.com/ns/riftware-1.0/nsd-base";
24   prefix "nsd-base";
25
26   import ietf-inet-types {
27     prefix "inet";
28   }
29
30   import mano-types {
31     prefix "manotypes";
32   }
33
34   import vnfd {
35     prefix "vnfd";
36   }
37
38   revision 2017-02-28 {
39     description
40       "Initial revision. This YANG file defines
41        the Network Service Descriptor (NSD)
42        common groupings";
43     reference
44       "Derived from earlier versions of base YANG files";
45   }
46
47   typedef scaling-trigger {
48     type enumeration {
49       enum pre-scale-in {
50         value 1;
51       }
52       enum post-scale-in {
53         value 2;
54       }
55       enum pre-scale-out {
56         value 3;
57       }
58       enum post-scale-out {
59         value 4;
60       }
61     }
62   }
63
64   typedef scaling-criteria-operation {
65     type enumeration {
66       enum AND {
67         value 1;
68       }
69       enum OR {
70         value 2;
71       }
72     }
73   }
74
75   grouping primitive-parameter {
76     leaf name {
77       description
78           "Name of the parameter.";
79       type string;
80     }
81
82     leaf data-type {
83       description
84           "Data type associated with the name.";
85       type manotypes:parameter-data-type;
86     }
87
88     leaf mandatory {
89       description "Is this field mandatory";
90       type boolean;
91       default false;
92     }
93
94     leaf default-value {
95       description "The default value for this field";
96       type string;
97     }
98
99     leaf parameter-pool {
100       description "NSD parameter pool name to use for this parameter";
101       type string;
102     }
103   } // primitive-parameter
104
105   grouping nsd-descriptor-common {
106     leaf id {
107       description "Identifier for the NSD.";
108       type string {
109         length 1..63;
110       }
111     }
112
113     leaf name {
114       description "NSD name.";
115       mandatory true;
116       type string;
117     }
118
119     leaf short-name {
120       description "Short name to appear as label in the UI";
121       type string;
122     }
123
124     leaf vendor {
125       description "Vendor of the NSD.";
126       type string;
127     }
128
129     leaf logo {
130       description
131         "File path for  the vendor specific logo. For example icons/mylogo.png.
132          The logo  should be part of the network service";
133       type string;
134     }
135
136     leaf description {
137       description "Description of the NSD.";
138       type string;
139     }
140
141     leaf version {
142       description "Version of the NSD";
143       type string;
144     }
145
146     list connection-point {
147       description
148           "List for external connection points.
149           Each NS has one or more external connection
150           points. As the name implies that external
151           connection points are used for connecting
152           the NS to other NS or to external networks.
153           Each NS exposes these connection points to
154           the orchestrator. The orchestrator can
155           construct network service chains by
156           connecting the connection points between
157           different NS.";
158
159       key "name";
160       uses nsd-connection-point-common;
161
162       leaf type {
163         description
164             "Type of the connection point.";
165         type manotypes:connection-point-type;
166       }
167
168       choice connection {
169         description "Logical connection of the CP to a VLD or to a VNF CP";
170
171         case vld-ref {
172
173           leaf vld-id-ref {
174             description
175               "ID reference to a VLD in the NS";
176             type leafref {
177               path "../../vld/id";
178             }
179           }
180
181         }
182
183         case vnfd-connection-point-ref {
184
185           leaf member-vnf-index-ref {
186             description "Reference to member-vnf within constituent-vnfd";
187             type leafref {
188               path "../../constituent-vnfd/member-vnf-index";
189             }
190           }
191
192           leaf vnfd-id-ref {
193             description
194               "A reference to a vnfd. This is a leafref to path:
195                   ../../nsd:constituent-vnfd
196                   + [nsd:id = current()/../nsd:id-ref]
197                   + /nsd:vnfd-id-ref";
198             type leafref {
199               path "../../constituent-vnfd" +
200                    "[member-vnf-index = current()/../member-vnf-index-ref]" +
201                    "/vnfd-id-ref";
202             }
203           }
204
205           leaf vnfd-connection-point-ref {
206             description
207               "A reference to a connection point name
208                   in a vnfd. This is a leafref to path:
209                       /vnfd:vnfd-catalog/vnfd:vnfd
210                       + [vnfd:id = current()/../nsd:vnfd-id-ref]
211                       + /vnfd:connection-point/vnfd:name";
212             type leafref {
213               path "/vnfd:vnfd-catalog/vnfd:vnfd" +
214                    "[vnfd:id = current()/../vnfd-id-ref]" +
215                    "/vnfd:connection-point/vnfd:name";
216             }
217           }
218
219         }
220
221       }
222
223     }
224
225     list scaling-group-descriptor {
226       description
227           "scaling group descriptor within this network service.
228            The scaling group defines a group of VNFs,
229            and the ratio of VNFs in the network service
230            that is used as target for scaling action";
231
232       key "name";
233
234       leaf name {
235         description "Name of this scaling group.";
236         type string;
237       }
238
239       list scaling-policy {
240
241         key "name";
242
243         leaf name {
244           description
245               "Name of the scaling policy";
246           type string;
247         }
248
249         leaf scaling-type {
250           description
251               "Type of scaling";
252           type manotypes:scaling-policy-type;
253         }
254
255         leaf enabled {
256           description
257             "Specifies if the scaling policy can be applied";
258           type boolean;
259           default true;
260         }
261
262         leaf scale-in-operation-type {
263           description
264               "Operation to be applied to check between scaling criterias to
265                check if the scale in threshold condition has been met.
266                Defaults to AND";
267           type manotypes:scaling-criteria-operation;
268           default AND;
269         }
270
271         leaf scale-out-operation-type {
272           description
273               "Operation to be applied to check between scaling criterias to
274                check if the scale out threshold condition has been met.
275                Defauls to OR";
276           type manotypes:scaling-criteria-operation;
277           default OR;
278         }
279
280         leaf threshold-time {
281           description
282             "The duration for which the criteria must hold true";
283           type uint32;
284           mandatory true;
285         }
286
287         leaf cooldown-time {
288           description
289             "The duration after a scaling-in/scaling-out action has been
290             triggered, for which there will be no further optional";
291           type uint32;
292           mandatory true;
293         }
294
295         list scaling-criteria {
296           description
297               "list of conditions to be met for generating scaling
298                  requests";
299           key "name";
300
301           leaf name {
302             type string;
303           }
304
305           leaf scale-in-threshold {
306             description
307                 "Value below which scale-in requests are generated";
308             type uint64;
309           }
310
311           leaf scale-in-relational-operation {
312             description
313               "The relational operator used to compare the monitoring param
314               against the scale-in-threshold.";
315             type manotypes:relational-operation-type;
316             default LE;
317           }
318
319           leaf scale-out-threshold {
320             description
321                 "Value above which scale-out requests are generated";
322             type uint64;
323           }
324
325           leaf scale-out-relational-operation {
326             description
327               "The relational operator used to compare the monitoring param
328               against the scale-out-threshold.";
329             type manotypes:relational-operation-type;
330             default GE;
331           }
332
333           leaf ns-monitoring-param-ref {
334             description
335                "Reference to the NS level monitoring parameter
336                 that is aggregated";
337             type leafref {
338               path "../../../../monitoring-param/id";
339             }
340           }
341         }
342       }
343
344       list vnfd-member {
345         description "List of VNFs in this scaling group";
346         key "member-vnf-index-ref";
347
348         leaf member-vnf-index-ref {
349           description "member VNF index of this member VNF";
350           type leafref {
351             path "../../../constituent-vnfd/member-vnf-index";
352           }
353         }
354
355         leaf count {
356           description
357             "count of this member VNF  within this scaling group.
358              The count allows to define  the number of instances
359              when a scaling action targets this scaling group";
360           type uint32;
361           default 1;
362         }
363       }
364
365       leaf min-instance-count {
366         description
367           "Minimum instances of the scaling group which are allowed.
368           These instances are created by default when the network service
369           is instantiated.";
370         type uint32;
371         default 0;
372       }
373
374       leaf max-instance-count {
375         description
376           "Maximum instances of this scaling group that are allowed
377            in a single network service. The network service scaling
378            will fail, when the number of service group instances
379            exceed the max-instance-count specified.";
380         type uint32;
381         default 10;
382       }
383
384       list scaling-config-action {
385         description "List of scaling config actions";
386         key "trigger";
387
388         leaf trigger {
389           description "scaling trigger";
390           type manotypes:scaling-trigger;
391         }
392
393         leaf ns-service-primitive-name-ref {
394           description "Reference to the NS service primitive";
395           type leafref {
396             path "../../../service-primitive/name";
397           }
398         }
399       }
400     }
401
402
403     list vnffgd {
404       description
405           "List of VNF Forwarding Graph Descriptors (VNFFGD).";
406
407       key "id";
408
409       uses fgd-common;
410
411       list rsp {
412         description
413           "List of Rendered Service Paths (RSP).";
414         key "id";
415
416         uses rsp-common;
417
418         list vnfd-connection-point-ref { // not common
419           description
420             "A list of references to connection points.";
421           key "member-vnf-index-ref";
422
423           leaf member-vnf-index-ref {
424             description "Reference to member-vnf within constituent-vnfds";
425             type leafref {
426               path "../../../../constituent-vnfd/member-vnf-index";
427             }
428           }
429
430           leaf order {
431             type uint8;
432             description
433               "A number that denotes the order of a VNF in a chain";
434           }
435
436           leaf vnfd-id-ref {
437             description
438               "A reference to a vnfd. This is a
439                   leafref to path:
440                       ../../../../nsd:constituent-vnfd
441                       + [nsd:id = current()/../nsd:id-ref]
442                       + /nsd:vnfd-id-ref";
443
444             type leafref {
445                 path "../../../../constituent-vnfd" +
446                     "[member-vnf-index = current()/../member-vnf-index-ref]" +
447                     "/vnfd-id-ref";
448             }
449           }
450
451           leaf vnfd-ingress-connection-point-ref {
452             description
453               "A reference to a connection point name
454                   in a vnfd. This is a leafref to path:
455                       /vnfd:vnfd-catalog/vnfd:vnfd
456                       + [vnfd:id = current()/../nsd:vnfd-id-ref]
457                       + /vnfd:connection-point/vnfd:name
458                   NOTE: An issue with confd is preventing the
459                   use of xpath. Seems to be an issue with leafref
460                   to leafref, whose target is in a different module.
461                   Once that is resolved this will switched to use
462                   leafref";
463             // TODO: Keeping as string as this needs to be
464             // diffenent lvel based of if it is nsd-catalog or
465             // in nsr.
466             // type leafref {
467             //   path "../../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
468             //        "[vnfd:id = current()/../vnfd-id-ref]/" +
469             //        "vnfd:connection-point/vnfd:name";
470             // }
471             type string;
472           }
473
474           leaf vnfd-egress-connection-point-ref {
475             description
476               "A reference to a connection point name
477                   in a vnfd. This is a leafref to path:
478                       /vnfd:vnfd-catalog/vnfd:vnfd
479                       + [vnfd:id = current()/../nsd:vnfd-id-ref]
480                       + /vnfd:connection-point/vnfd:name
481                   NOTE: An issue with confd is preventing the
482                   use of xpath. Seems to be an issue with leafref
483                   to leafref, whose target is in a different module.
484                   Once that is resolved this will switched to use
485                   leafref";
486             // TODO: Keeping as string as this needs to be
487             // diffenent lvel based of if it is nsd-catalog or
488             // in nsr.
489             // type leafref {
490             //   path "../../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
491             //        "[vnfd:id = current()/../vnfd-id-ref]/" +
492             //        "vnfd:connection-point/vnfd:name";
493             // }
494             type string;
495           }
496         }
497       } //rsp
498
499       list classifier {
500         description
501             "List of classifier rules.";
502
503         key "id";
504
505         uses classifier-common;
506
507         leaf member-vnf-index-ref {
508           description "Reference to member-vnf within constituent-vnfds";
509           type leafref {
510             path "../../../constituent-vnfd/member-vnf-index";
511           }
512         }
513
514         leaf vnfd-id-ref {
515           description
516               "A reference to a vnfd. This is a
517                   leafref to path:
518                       ../../../nsd:constituent-vnfd
519                       + [nsd:id = current()/../nsd:id-ref]
520                       + /nsd:vnfd-id-ref";
521
522           type leafref {
523               path "../../../constituent-vnfd" +
524                    "[member-vnf-index = current()/../member-vnf-index-ref]" +
525                    "/vnfd-id-ref";
526           }
527         }
528
529         leaf vnfd-connection-point-ref {
530           description
531               "A reference to a connection point name
532                   in a vnfd. This is a leafref to path:
533                       /vnfd:vnfd-catalog/vnfd:vnfd
534                       + [vnfd:id = current()/../nsd:vnfd-id-ref]
535                       + /vnfd:connection-point/vnfd:name
536                   NOTE: An issue with confd is preventing the
537                   use of xpath. Seems to be an issue with leafref
538                   to leafref, whose target is in a different module.
539                   Once that is resolved this will switched to use
540                   leafref";
541           // TODO: Keeping as string as this needs to be
542           // diffenent lvel based of if it is nsd-catalog or
543           // in nsr.
544           // type leafref {
545           //     path "../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
546           //          "[vnfd:id = current()/../vnfd-id-ref]/" +
547           //          "vnfd:connection-point/vnfd:name";
548           // }
549           type string;
550         }
551       } // classifier
552
553     } // vnffgd
554
555     uses manotypes:ip-profile-list;
556
557     container ns-configuration {
558       uses manotypes:ns-configuration;
559     }
560
561     list initial-service-primitive {
562       description
563         "Initial set of service primitives for NSD.";
564       key "seq";
565
566       uses manotypes:event-config;
567     }
568
569     list terminate-service-primitive {
570       description
571         "Set of service primitives during
572          termination for NSD.";
573       key "seq";
574
575       uses manotypes:event-config;
576     }
577
578     uses manotypes:input-parameter-xpath;
579
580     list parameter-pool {
581       description
582         "Pool of parameter values which must be
583          pulled from during configuration";
584       key "name";
585
586       leaf name {
587         description
588             "Name of the configuration value pool";
589         type string;
590       }
591
592       container range {
593         description
594             "Create a range of values to populate the pool with";
595
596         leaf start-value {
597           description
598               "Generated pool values start at this value";
599           type uint32;
600           mandatory true;
601         }
602
603         leaf end-value {
604           description
605               "Generated pool values stop at this value";
606           type uint32;
607           mandatory true;
608         }
609       }
610     }
611
612     list key-pair {
613       key "name";
614       description "Used to configure the list of public keys to be injected as part
615           of ns instantiation";
616
617       leaf name {
618         description "Name of this key pair";
619         type string;
620       }
621
622       leaf key {
623         description "Key associated with this key pair";
624         type string;
625       }
626     }
627
628     list user {
629       key "name";
630       description "List of users to be added through cloud-config";
631
632       leaf name {
633         description "Name of the user ";
634         type string;
635       }
636
637       leaf user-info {
638         description "The user name's real name";
639         type string;
640       }
641
642       list key-pair {
643         key "name";
644         description "Used to configure the list of public keys to be injected as part
645             of ns instantiation";
646
647         leaf name {
648           description "Name of this key pair";
649           type string;
650         }
651
652         leaf key {
653           description "Key associated with this key pair";
654           type string;
655         }
656       }
657     }
658   } // nsd-descriptor-common
659
660   grouping nsd-vld-common {
661     /* Still having issues modelling this,
662        see the comments under vnfd-connection-point-ref
663
664        IMPORTANT: Change description fields
665     */
666     uses vld-common;
667
668     choice init-params {
669       description "Extra parameters for VLD instantiation";
670
671       case vim-network-ref {
672         leaf vim-network-name {
673           description
674             "Name of network in VIM account. This is used to indicate
675                    pre-provisioned network name in cloud account.";
676           type string;
677         }
678       }
679
680       case vim-network-profile {
681         leaf ip-profile-ref {
682           description "Named reference to IP-profile object";
683           type leafref {
684             path "../../ip-profiles/name";
685           }
686         }
687       }
688
689     }
690   } // nsd-vld-common
691
692   grouping nsd-connection-point-common {
693     description "NSD connection point base";
694     //IMPORTANT: Change description fields
695     leaf name {
696       description
697           "Name of the connection point.";
698       type string;
699     }
700
701     leaf floating-ip-required {
702       description
703           "Boolean parameter to indicate whether the CP must be exposed.
704            A public IP address will be allocated to this CP if exposed is true.
705            The default is false meaning a floating IP address is not required.
706            It must be explicitly asked for a floating IP address to be allocated.";
707       type boolean;
708     }
709   } // nsd-connection-point-common
710
711   grouping vld-common {
712     description
713       "List of Virtual Link Descriptors.";
714
715     leaf id {
716       description
717         "Identifier for the VLD.";
718       type string;
719     }
720
721     leaf name {
722       description
723         "Virtual Link Descriptor (VLD) name.";
724       type string;
725     }
726
727     leaf short-name {
728       description
729         "Short name to appear as label in the UI";
730       type string;
731     }
732
733     leaf vendor {
734       description "Provider of the VLD.";
735       type string;
736     }
737
738     leaf description {
739       description "Description of the VLD.";
740       type string;
741     }
742
743     leaf version {
744       description "Version of the VLD";
745       type string;
746     }
747
748     leaf type {
749       type manotypes:virtual-link-type;
750     }
751
752     leaf root-bandwidth {
753       description
754         "For ELAN this is the aggregate bandwidth.";
755       type uint64;
756     }
757
758     leaf leaf-bandwidth {
759       description
760         "For ELAN this is the bandwidth of branches.";
761       type uint64;
762     }
763
764     // replicate for pnfd container here
765     uses manotypes:provider-network;
766
767     leaf mgmt-network {
768       description "Flag indicating whether this network is a VIM management network";
769       type boolean;
770       default false;
771     }
772   } // vld-common
773
774   grouping fgd-common {
775
776     leaf id {
777       description
778           "Identifier for the FGD.";
779       type string;
780     }
781
782     leaf name {
783       description
784           "FGD name.";
785       type string;
786     }
787
788     leaf short-name {
789       description
790           "Short name to appear as label in the UI";
791       type string;
792     }
793
794     leaf vendor {
795       description "Provider of the FGD.";
796       type string;
797     }
798
799     leaf description {
800       description "Description of the FGD.";
801       type string;
802     }
803
804     leaf version {
805       description "Version of the FGD";
806       type string;
807     }
808   } // fgd-common
809
810   grouping rsp-common {
811
812     leaf id {
813       description
814         "Identifier for the RSP.";
815       type string;
816     }
817
818     leaf name {
819       description
820         "RSP name.";
821       type string;
822     }
823
824   } // rsp-common
825
826   grouping classifier-common {
827
828     leaf id {
829       description
830           "Identifier for the classifier rule.";
831       type string;
832     }
833
834     leaf name {
835       description
836           "Name of the classifier.";
837       type string;
838     }
839
840     leaf rsp-id-ref {
841       description
842           "A reference to the RSP.";
843       type leafref {
844         path "../../rsp/id";
845       }
846     }
847
848     list match-attributes {
849       description
850           "List of match attributes.";
851
852       key "id";
853
854       leaf id {
855         description
856             "Identifier for the classifier match attribute rule.";
857         type string;
858       }
859
860       leaf ip-proto {
861         description
862             "IP Protocol.";
863         type uint8;
864       }
865
866       leaf source-ip-address {
867         description
868             "Source IP address.";
869         type inet:ip-address;
870       }
871
872       leaf destination-ip-address {
873         description
874             "Destination IP address.";
875         type inet:ip-address;
876       }
877
878       leaf source-port {
879         description
880             "Source port number.";
881         type inet:port-number;
882       }
883
884       leaf destination-port {
885         description
886             "Destination port number.";
887         type inet:port-number;
888       }
889       //TODO: Add more match criteria
890     } //match-attributes
891   } // classifier-common
892
893   grouping monitoring-param-common {
894     description
895       "List of monitoring parameters from VNF's that should be
896         propogated up into NSR";
897
898     leaf id {
899       type string;
900     }
901
902     leaf name {
903       type string;
904     }
905
906     uses manotypes:monitoring-param-value;
907     uses manotypes:monitoring-param-ui-data;
908     uses manotypes:monitoring-param-aggregation;
909   } // monitoring-param-common
910 }