c1640782e582ea6c2cd6f5806f196971cf107917
[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-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       } //rsp
475
476       list classifier {
477         description
478             "List of classifier rules.";
479
480         key "id";
481
482         uses classifier-common;
483
484         leaf member-vnf-index-ref {
485           description "Reference to member-vnf within constituent-vnfds";
486           type leafref {
487             path "../../../constituent-vnfd/member-vnf-index";
488           }
489         }
490
491         leaf vnfd-id-ref {
492           description
493               "A reference to a vnfd. This is a
494                   leafref to path:
495                       ../../../nsd:constituent-vnfd
496                       + [nsd:id = current()/../nsd:id-ref]
497                       + /nsd:vnfd-id-ref";
498
499           type leafref {
500               path "../../../constituent-vnfd" +
501                    "[member-vnf-index = current()/../member-vnf-index-ref]" +
502                    "/vnfd-id-ref";
503           }
504         }
505
506         leaf vnfd-connection-point-ref {
507           description
508               "A reference to a connection point name
509                   in a vnfd. This is a leafref to path:
510                       /vnfd:vnfd-catalog/vnfd:vnfd
511                       + [vnfd:id = current()/../nsd:vnfd-id-ref]
512                       + /vnfd:connection-point/vnfd:name
513                   NOTE: An issue with confd is preventing the
514                   use of xpath. Seems to be an issue with leafref
515                   to leafref, whose target is in a different module.
516                   Once that is resolved this will switched to use
517                   leafref";
518           // TODO: Keeping as string as this needs to be
519           // diffenent lvel based of if it is nsd-catalog or
520           // in nsr.
521           // type leafref {
522           //     path "../../../../../vnfd:vnfd-catalog/vnfd:vnfd" +
523           //          "[vnfd:id = current()/../vnfd-id-ref]/" +
524           //          "vnfd:connection-point/vnfd:name";
525           // }
526           type string;
527         }
528       } // classifier
529
530     } // vnffgd
531
532     uses manotypes:ip-profile-list;
533
534     list initial-service-primitive {
535       description
536         "Initial set of service primitives for NSD.";
537       key "seq";
538
539       uses manotypes:event-config;
540     }
541
542     list terminate-service-primitive {
543       description
544         "Set of service primitives during
545          termination for NSD.";
546       key "seq";
547
548       uses manotypes:event-config;
549     }
550
551     uses manotypes:input-parameter-xpath;
552
553     list parameter-pool {
554       description
555         "Pool of parameter values which must be
556          pulled from during configuration";
557       key "name";
558
559       leaf name {
560         description
561             "Name of the configuration value pool";
562         type string;
563       }
564
565       container range {
566         description
567             "Create a range of values to populate the pool with";
568
569         leaf start-value {
570           description
571               "Generated pool values start at this value";
572           type uint32;
573           mandatory true;
574         }
575
576         leaf end-value {
577           description
578               "Generated pool values stop at this value";
579           type uint32;
580           mandatory true;
581         }
582       }
583     }
584
585     list key-pair {
586       key "name";
587       description "Used to configure the list of public keys to be injected as part
588           of ns instantiation";
589
590       leaf name {
591         description "Name of this key pair";
592         type string;
593       }
594
595       leaf key {
596         description "Key associated with this key pair";
597         type string;
598       }
599     }
600
601     list user {
602       key "name";
603       description "List of users to be added through cloud-config";
604
605       leaf name {
606         description "Name of the user ";
607         type string;
608       }
609
610       leaf user-info {
611         description "The user name's real name";
612         type string;
613       }
614
615       list key-pair {
616         key "name";
617         description "Used to configure the list of public keys to be injected as part
618             of ns instantiation";
619
620         leaf name {
621           description "Name of this key pair";
622           type string;
623         }
624
625         leaf key {
626           description "Key associated with this key pair";
627           type string;
628         }
629       }
630     }
631   } // nsd-descriptor-common
632
633   grouping nsd-vld-common {
634     /* Still having issues modelling this,
635        see the comments under vnfd-connection-point-ref
636
637        IMPORTANT: Change description fields
638     */
639     uses vld-common;
640
641     choice init-params {
642       description "Extra parameters for VLD instantiation";
643
644       case vim-network-ref {
645         leaf vim-network-name {
646           description
647             "Name of network in VIM account. This is used to indicate
648                    pre-provisioned network name in cloud account.";
649           type string;
650         }
651       }
652
653       case vim-network-profile {
654         leaf ip-profile-ref {
655           description "Named reference to IP-profile object";
656           type leafref {
657             path "../../ip-profiles/name";
658           }
659         }
660       }
661
662     }
663   } // nsd-vld-common
664
665   grouping nsd-connection-point-common {
666     description "NSD connection point base";
667     //IMPORTANT: Change description fields
668     leaf name {
669       description
670           "Name of the connection point.";
671       type string;
672     }
673
674     leaf floating-ip-required {
675       description
676           "Boolean parameter to indicate whether the CP must be exposed.
677            A public IP address will be allocated to this CP if exposed is true.
678            The default is false meaning a floating IP address is not required.
679            It must be explicitly asked for a floating IP address to be allocated.";
680       type boolean;
681     }
682   } // nsd-connection-point-common
683
684   grouping vld-common {
685     description
686       "List of Virtual Link Descriptors.";
687
688     leaf id {
689       description
690         "Identifier for the VLD.";
691       type string;
692     }
693
694     leaf name {
695       description
696         "Virtual Link Descriptor (VLD) name.";
697       type string;
698     }
699
700     leaf short-name {
701       description
702         "Short name to appear as label in the UI";
703       type string;
704     }
705
706     leaf vendor {
707       description "Provider of the VLD.";
708       type string;
709     }
710
711     leaf description {
712       description "Description of the VLD.";
713       type string;
714     }
715
716     leaf version {
717       description "Version of the VLD";
718       type string;
719     }
720
721     leaf type {
722       type manotypes:virtual-link-type;
723     }
724
725     leaf root-bandwidth {
726       description
727         "For ELAN this is the aggregate bandwidth.";
728       type uint64;
729     }
730
731     leaf leaf-bandwidth {
732       description
733         "For ELAN this is the bandwidth of branches.";
734       type uint64;
735     }
736
737     // replicate for pnfd container here
738     uses manotypes:provider-network;
739
740     leaf mgmt-network {
741       description "Flag indicating whether this network is a VIM management network";
742       type boolean;
743       default false;
744     }
745   } // vld-common
746
747   grouping fgd-common {
748
749     leaf id {
750       description
751           "Identifier for the FGD.";
752       type string;
753     }
754
755     leaf name {
756       description
757           "FGD name.";
758       type string;
759     }
760
761     leaf short-name {
762       description
763           "Short name to appear as label in the UI";
764       type string;
765     }
766
767     leaf vendor {
768       description "Provider of the FGD.";
769       type string;
770     }
771
772     leaf description {
773       description "Description of the FGD.";
774       type string;
775     }
776
777     leaf version {
778       description "Version of the FGD";
779       type string;
780     }
781   } // fgd-common
782
783   grouping rsp-common {
784
785     leaf id {
786       description
787         "Identifier for the RSP.";
788       type string;
789     }
790
791     leaf name {
792       description
793         "RSP name.";
794       type string;
795     }
796
797   } // rsp-common
798
799   grouping classifier-common {
800
801     leaf id {
802       description
803           "Identifier for the classifier rule.";
804       type string;
805     }
806
807     leaf name {
808       description
809           "Name of the classifier.";
810       type string;
811     }
812
813     leaf rsp-id-ref {
814       description
815           "A reference to the RSP.";
816       type leafref {
817         path "../../rsp/id";
818       }
819     }
820
821     list match-attributes {
822       description
823           "List of match attributes.";
824
825       key "id";
826
827       leaf id {
828         description
829             "Identifier for the classifier match attribute rule.";
830         type string;
831       }
832
833       leaf ip-proto {
834         description
835             "IP Protocol.";
836         type uint8;
837       }
838
839       leaf source-ip-address {
840         description
841             "Source IP address.";
842         type inet:ip-address;
843       }
844
845       leaf destination-ip-address {
846         description
847             "Destination IP address.";
848         type inet:ip-address;
849       }
850
851       leaf source-port {
852         description
853             "Source port number.";
854         type inet:port-number;
855       }
856
857       leaf destination-port {
858         description
859             "Destination port number.";
860         type inet:port-number;
861       }
862       //TODO: Add more match criteria
863     } //match-attributes
864   } // classifier-common
865
866   grouping monitoring-param-common {
867     description
868       "List of monitoring parameters from VNF's that should be
869         propogated up into NSR";
870
871     leaf id {
872       type string;
873     }
874
875     leaf name {
876       type string;
877     }
878
879     uses manotypes:monitoring-param-value;
880     uses manotypes:monitoring-param-ui-data;
881     uses manotypes:monitoring-param-aggregation;
882   } // monitoring-param-common
883 }