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