2eeabc59a9202a9f0c9f86f91ffc7ede8cc5a26b
[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 "urn:etsi:osm:yang: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-config-primitive-name-ref {
394           description "Reference to the NS primitive";
395           type leafref {
396             path "../../../ns-configuration/config-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       description
559         "Information about NS configuration.";
560
561       uses manotypes:vca-configuration;
562     }
563
564     uses manotypes:input-parameter-xpath;
565
566     list parameter-pool {
567       description
568         "Pool of parameter values which must be
569          pulled from during configuration";
570       key "name";
571
572       leaf name {
573         description
574             "Name of the configuration value pool";
575         type string;
576       }
577
578       container range {
579         description
580             "Create a range of values to populate the pool with";
581
582         leaf start-value {
583           description
584               "Generated pool values start at this value";
585           type uint32;
586           mandatory true;
587         }
588
589         leaf end-value {
590           description
591               "Generated pool values stop at this value";
592           type uint32;
593           mandatory true;
594         }
595       }
596     }
597
598     list key-pair {
599       key "name";
600       description "Used to configure the list of public keys to be injected as part
601           of ns instantiation";
602
603       leaf name {
604         description "Name of this key pair";
605         type string;
606       }
607
608       leaf key {
609         description "Key associated with this key pair";
610         type string;
611       }
612     }
613
614     list user {
615       key "name";
616       description "List of users to be added through cloud-config";
617
618       leaf name {
619         description "Name of the user ";
620         type string;
621       }
622
623       leaf user-info {
624         description "The user name's real name";
625         type string;
626       }
627
628       list key-pair {
629         key "name";
630         description "Used to configure the list of public keys to be injected as part
631             of ns instantiation";
632
633         leaf name {
634           description "Name of this key pair";
635           type string;
636         }
637
638         leaf key {
639           description "Key associated with this key pair";
640           type string;
641         }
642       }
643     }
644   } // nsd-descriptor-common
645
646   grouping nsd-vld-common {
647     /* Still having issues modelling this,
648        see the comments under vnfd-connection-point-ref
649
650        IMPORTANT: Change description fields
651     */
652     uses vld-common;
653
654     choice init-params {
655       description "Extra parameters for VLD instantiation";
656
657       case vim-network-ref {
658         leaf vim-network-name {
659           description
660             "Name of network in VIM account. This is used to indicate
661                    pre-provisioned network name in cloud account.";
662           type string;
663         }
664       }
665
666       case vim-network-profile {
667         leaf ip-profile-ref {
668           description "Named reference to IP-profile object";
669           type leafref {
670             path "../../ip-profiles/name";
671           }
672         }
673       }
674
675     }
676   } // nsd-vld-common
677
678   grouping nsd-connection-point-common {
679     description "NSD connection point base";
680     //IMPORTANT: Change description fields
681     leaf name {
682       description
683           "Name of the connection point.";
684       type string;
685     }
686
687     leaf floating-ip-required {
688       description
689           "Boolean parameter to indicate whether the CP must be exposed.
690            A public IP address will be allocated to this CP if exposed is true.
691            The default is false meaning a floating IP address is not required.
692            It must be explicitly asked for a floating IP address to be allocated.";
693       type boolean;
694     }
695   } // nsd-connection-point-common
696
697   grouping vld-common {
698     description
699       "List of Virtual Link Descriptors.";
700
701     leaf id {
702       description
703         "Identifier for the VLD.";
704       type string;
705     }
706
707     leaf name {
708       description
709         "Virtual Link Descriptor (VLD) name.";
710       type string;
711     }
712
713     leaf short-name {
714       description
715         "Short name to appear as label in the UI";
716       type string;
717     }
718
719     leaf vendor {
720       description "Provider of the VLD.";
721       type string;
722     }
723
724     leaf description {
725       description "Description of the VLD.";
726       type string;
727     }
728
729     leaf version {
730       description "Version of the VLD";
731       type string;
732     }
733
734     leaf type {
735       type manotypes:virtual-link-type;
736     }
737
738     leaf root-bandwidth {
739       description
740         "For ELAN this is the aggregate bandwidth.";
741       type uint64;
742     }
743
744     leaf leaf-bandwidth {
745       description
746         "For ELAN this is the bandwidth of branches.";
747       type uint64;
748     }
749
750     // replicate for pnfd container here
751     uses manotypes:provider-network;
752
753     leaf mgmt-network {
754       description "Flag indicating whether this network is a VIM management network";
755       type boolean;
756       default false;
757     }
758   } // vld-common
759
760   grouping fgd-common {
761
762     leaf id {
763       description
764           "Identifier for the FGD.";
765       type string;
766     }
767
768     leaf name {
769       description
770           "FGD name.";
771       type string;
772     }
773
774     leaf short-name {
775       description
776           "Short name to appear as label in the UI";
777       type string;
778     }
779
780     leaf vendor {
781       description "Provider of the FGD.";
782       type string;
783     }
784
785     leaf description {
786       description "Description of the FGD.";
787       type string;
788     }
789
790     leaf version {
791       description "Version of the FGD";
792       type string;
793     }
794   } // fgd-common
795
796   grouping rsp-common {
797
798     leaf id {
799       description
800         "Identifier for the RSP.";
801       type string;
802     }
803
804     leaf name {
805       description
806         "RSP name.";
807       type string;
808     }
809
810   } // rsp-common
811
812   grouping classifier-common {
813
814     leaf id {
815       description
816           "Identifier for the classifier rule.";
817       type string;
818     }
819
820     leaf name {
821       description
822           "Name of the classifier.";
823       type string;
824     }
825
826     leaf rsp-id-ref {
827       description
828           "A reference to the RSP.";
829       type leafref {
830         path "../../rsp/id";
831       }
832     }
833
834     list match-attributes {
835       description
836           "List of match attributes.";
837
838       key "id";
839
840       leaf id {
841         description
842             "Identifier for the classifier match attribute rule.";
843         type string;
844       }
845
846       leaf ip-proto {
847         description
848             "IP Protocol.";
849         type uint8;
850       }
851
852       leaf source-ip-address {
853         description
854             "Source IP address.";
855         type inet:ip-address;
856       }
857
858       leaf destination-ip-address {
859         description
860             "Destination IP address.";
861         type inet:ip-address;
862       }
863
864       leaf source-port {
865         description
866             "Source port number.";
867         type inet:port-number;
868       }
869
870       leaf destination-port {
871         description
872             "Destination port number.";
873         type inet:port-number;
874       }
875       //TODO: Add more match criteria
876     } //match-attributes
877   } // classifier-common
878
879   grouping monitoring-param-common {
880     description
881       "List of monitoring parameters from VNF's that should be
882         propogated up into NSR";
883
884     leaf id {
885       type string;
886     }
887
888     leaf name {
889       type string;
890     }
891
892     uses manotypes:monitoring-param-value;
893     uses manotypes:monitoring-param-ui-data;
894     uses manotypes:monitoring-param-aggregation;
895   } // monitoring-param-common
896 }