4 * Copyright 2016 RIFT.IO Inc
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 namespace "urn:ietf:params:xml:ns:yang:nfvo:nsd";
34 import ietf-inet-types {
38 import ietf-yang-types {
48 "Initial revision. This YANG file defines
49 the Network Service Descriptor (NSD)";
51 "Derived from earlier versions of base YANG files";
54 typedef scaling-trigger {
71 typedef scaling-policy-type {
82 typedef scaling-criteria-operation {
93 grouping primitive-parameter {
96 "Name of the parameter.";
102 "Data type associated with the name.";
103 type manotypes:parameter-data-type;
107 description "Is this field mandatory";
113 description "The default value for this field";
117 leaf parameter-pool {
118 description "NSD parameter pool name to use for this parameter";
123 grouping nsd-descriptor {
125 description "Identifier for the NSD.";
130 description "NSD name.";
136 description "Short name to appear as label in the UI";
141 description "Vendor of the NSD.";
147 "File path for the vendor-specific logo. For example, icons/mylogo.png.
148 The logo should be part of the network service";
153 description "Description of the NSD.";
158 description "Version of the NSD";
162 list connection-point {
164 "List for external connection points.
165 Each network service (NS) has one or more external connection
166 points that connect the NS to other NSs or to external networks.
167 Each NS exposes connection points to the orchestrator, which can
168 construct network service chains by connecting the connection
169 points between different NSs.";
173 "Name of the NS connection point.";
179 "Type of the connection point.";
180 type manotypes:connection-point-type;
184 /* Model Limitations,
185 see the comments under vnfd-connection-point-ref
189 "List of Virtual Link Descriptors (VLDs).";
195 "Identifier for the VLD.";
201 "Virtual Link Descriptor (VLD) name.";
207 "Short name to appear as label in the UI";
212 description "Provider of the VLD.";
217 description "Description of the VLD.";
222 description "Version of the VLD";
227 type manotypes:virtual-link-type;
230 leaf root-bandwidth {
232 "For ELAN this is the aggregate bandwidth.";
236 leaf leaf-bandwidth {
238 "For ELAN this is the bandwidth of branches.";
242 list vnfd-connection-point-ref {
244 "A list of references to connection points.";
245 key "member-vnf-index-ref vnfd-connection-point-ref";
247 leaf member-vnf-index-ref {
248 description "Reference to member-vnf within constituent-vnfds";
250 path "../../../constituent-vnfd/member-vnf-index";
256 "A reference to a VNFD";
258 path "../../../constituent-vnfd" +
259 "[member-vnf-index = current()/../member-vnf-index-ref]" +
264 leaf vnfd-connection-point-ref {
265 description "A reference to a connection point name";
267 path "/vnfd:vnfd-catalog/vnfd:vnfd" +
268 "[vnfd:id = current()/../vnfd-id-ref]/" +
269 "vnfd:connection-point/vnfd:name";
274 // replicate for pnfd container here
275 uses manotypes:provider-network;
278 description "Flag indicating whether this network is a VIM management network";
284 description "Extra parameters for VLD instantiation";
286 case vim-network-ref {
287 leaf vim-network-name {
289 "Name of network in VIM account. This is used to indicate
290 pre-provisioned network name in cloud account.";
295 case vim-network-profile {
296 leaf ip-profile-ref {
297 description "Named reference to IP-profile object";
299 path "../../ip-profiles/name";
306 list constituent-vnfd {
308 "List of VNFDs that are part of this
311 key "member-vnf-index";
313 leaf member-vnf-index {
315 "Identifier/index for the VNFD. This separate id
316 is required so that multiple VNFs can be part of
323 "Identifier for the VNFD.";
325 path "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:id";
329 leaf start-by-default {
331 "VNFD is started as part of the NS instantiation";
337 list scaling-group-descriptor {
339 "Scaling group descriptor within this network service.
340 The scaling group defines a group of VNFs,
341 and the ratio of VNFs in the network service
342 that is used as target for scaling action";
347 description "Name of this scaling group.";
351 list scaling-policy {
357 "Name of the scaling policy";
364 type scaling-policy-type;
369 "Specifies if the scaling policy can be applied";
374 leaf scale-in-operation-type {
376 "Operation to be applied to check between scaling criterias to
377 check if the scale in threshold condition has been met.
379 type scaling-criteria-operation;
383 leaf scale-out-operation-type {
385 "Operation to be applied to check between scaling criterias to
386 check if the scale out threshold condition has been met.
388 type scaling-criteria-operation;
392 leaf threshold-time {
394 "The duration for which the criteria must hold true";
401 "The duration after a scaling-in/scaling-out action has been
402 triggered, for which there will be no further scaling activity";
407 list scaling-criteria {
409 "list of conditions to be met for generating scaling
414 description "Name of the scaling criteria";
418 leaf scale-in-threshold {
420 "Value below which scale-in requests are generated
421 (depends on monitoring parameters)";
425 leaf scale-out-threshold {
427 "Value above which scale-out requests are generated
428 (depends on monitoring parameters)";
432 leaf ns-monitoring-param-ref {
434 "Reference to the NS level monitoring parameter
437 path "../../../../monitoring-param/id";
444 description "List of VNFs in this scaling group";
445 key "member-vnf-index-ref";
447 leaf member-vnf-index-ref {
448 description "Member VNF index of this member VNF";
450 path "../../../constituent-vnfd/member-vnf-index";
456 "Count of this member VNF within this scaling group.
457 The count defines the number of instances when a
458 scaling action targets this scaling group.";
464 leaf min-instance-count {
466 "Minimum number of instances of the scaling group that
467 are allowed in a single network service. These instances
468 are created by default when the network service is
474 leaf max-instance-count {
476 "Maximum number of instances of this scaling group that
477 are allowed in a single network service. The network
478 service scaling fails when the number of service group
479 instances exceeds the max-instance-count specified.";
484 list scaling-config-action {
485 description "List of scaling config actions";
489 description "Scaling trigger";
490 type scaling-trigger;
493 leaf ns-config-primitive-name-ref {
494 description "Reference to the NS config name primitive";
496 path "../../../service-primitive/name";
502 list placement-groups {
503 description "List of placement groups at NS level";
506 uses manotypes:placement-group-info;
510 "List of VNFDs that are part of this placement group";
512 key "member-vnf-index-ref";
514 leaf member-vnf-index-ref {
515 description "Member VNF index of this member VNF";
517 path "../../../constituent-vnfd/member-vnf-index";
523 "Identifier for the VNFD.";
525 path "../../../constituent-vnfd" +
526 "[member-vnf-index = current()/../member-vnf-index-ref]" +
533 uses manotypes:ip-profile-list;
535 list vnf-dependency {
537 "List of VNF dependencies.";
539 leaf vnf-source-ref {
541 path "../../constituent-vnfd/vnfd-id-ref";
544 leaf vnf-depends-on-ref {
546 "Reference to VNF on which the source VNF depends.";
548 path "../../constituent-vnfd/vnfd-id-ref";
555 "List of VNF Forwarding Graph Descriptors (VNFFGD).";
561 "Identifier for the VNFFGD.";
573 "Short name to appear as label in the UI";
578 description "Provider of the VNFFGD.";
583 description "Description of the VNFFGD.";
588 description "Version of the VNFFGD";
594 "List of Rendered Service Paths (RSP).";
600 "Identifier for the RSP.";
610 list vnfd-connection-point-ref {
612 "A list of references to connection points.";
613 key "member-vnf-index-ref";
615 leaf member-vnf-index-ref {
616 description "Reference to member-vnf within constituent-vnfds";
618 path "../../../../constituent-vnfd/member-vnf-index";
625 "A number that denotes the order of a VNF in a chain";
630 "A reference to a vnfd";
632 path "../../../../constituent-vnfd" +
633 "[member-vnf-index = current()/../member-vnf-index-ref]" +
638 leaf vnfd-connection-point-ref {
640 "A reference to a connection point name";
642 path "/vnfd:vnfd-catalog/vnfd:vnfd" +
643 "[vnfd:id = current()/../vnfd-id-ref]/" +
644 "vnfd:connection-point/vnfd:name";
652 "List of classifier rules.";
658 "Identifier for the classifier rule.";
664 "Name of the classifier.";
670 "A reference to the RSP.";
676 leaf member-vnf-index-ref {
677 description "Reference to member-vnf within constituent-vnfds";
679 path "../../../constituent-vnfd/member-vnf-index";
685 "A reference to a VNFD";
687 path "../../../constituent-vnfd" +
688 "[member-vnf-index = current()/../member-vnf-index-ref]" +
693 leaf vnfd-connection-point-ref {
695 "A reference to a connection point name";
697 path "/vnfd:vnfd-catalog/vnfd:vnfd" +
698 "[vnfd:id = current()/../vnfd-id-ref]/" +
699 "vnfd:connection-point/vnfd:name";
703 list match-attributes {
705 "List of match attributes.";
711 "Identifier for the classifier match attribute rule.";
717 "Internet Protocol.";
721 leaf source-ip-address {
723 "Source IP address.";
724 type inet:ip-address;
727 leaf destination-ip-address {
729 "Destination IP address.";
730 type inet:ip-address;
735 "Source port number.";
736 type inet:port-number;
739 leaf destination-port {
741 "Destination port number.";
742 type inet:port-number;
748 list monitoring-param {
750 "List of monitoring parameters from VNFs that should be
751 propogated up into NSR";
755 description "Identifier for a monitoring parameter";
760 description "Name of the monitoring parameter";
764 uses manotypes:monitoring-param-value;
765 uses manotypes:monitoring-param-ui-data;
766 uses manotypes:monitoring-param-aggregation;
768 list vnfd-monitoring-param {
769 description "A list of VNFD monitoring params";
770 key "member-vnf-index-ref vnfd-monitoring-param-ref";
774 "A reference to a VNFD. This is a leafref";
777 path "../../../constituent-vnfd" +
778 "[member-vnf-index = current()/../member-vnf-index-ref]" +
783 leaf vnfd-monitoring-param-ref {
784 description "A reference to the VNFD monitoring param";
786 path "/vnfd:vnfd-catalog/vnfd:vnfd"
787 + "[vnfd:id = current()/../vnfd-id-ref]"
788 + "/vnfd:monitoring-param/vnfd:id";
792 leaf member-vnf-index-ref {
794 "Mandatory reference to member-vnf within constituent-vnfds";
796 path "../../../constituent-vnfd/member-vnf-index";
802 uses manotypes:input-parameter-xpath;
804 list parameter-pool {
806 "Pool of parameter values from which to choose during
812 "Name of the configuration value pool";
818 "Create a range of values from which to populate the pool with";
822 "Generated pool values start at this value";
829 "Generated pool values stop at this value";
836 list service-primitive {
838 "Network service level service primitives.";
844 "Name of the service primitive.";
850 "List of parameters for the service primitive.";
853 uses manotypes:primitive-parameter;
856 uses manotypes:ui-primitive-group;
858 list vnf-primitive-group {
860 "List of service primitives grouped by VNF.";
862 key "member-vnf-index-ref";
863 leaf member-vnf-index-ref {
865 "Reference to member-vnf within constituent-vnfds";
867 path "../../../constituent-vnfd/member-vnf-index";
873 "A reference to a VNFD. This is a leafref";
876 path "../../../constituent-vnfd" +
877 "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
885 path "/vnfd:vnfd-catalog/vnfd:vnfd"
886 + "[vnfd:id = current()/../vnfd-id-ref]"
895 description "Index of this primitive";
900 description "Name of the primitive in the VNF primitive ";
906 leaf user-defined-script {
908 "A user defined script.";
913 list initial-config-primitive {
914 rwpb:msg-new NsdInitialConfigPrimitive;
916 "Initial set of configuration primitives for NSD.";
919 uses manotypes:initial-config;
924 description "Used to configure the list of public keys to be injected as part
925 of NS instantiation";
928 description "Name of this key pair";
933 description "Key associated with this key pair";
940 description "List of users to be added through cloud-config";
943 description "Name of the user ";
948 description "The user name's real name";
954 description "Used to configure the list of public keys to be injected as part
955 of NS instantiation";
958 description "Name of this key pair";
963 description "Key associated with this key pair";
971 container nsd-catalog {