VNFD and NSD updated to support VDU and NS scaling from NFVI and VNF metrics 30/5930/2
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Mon, 2 Apr 2018 15:29:08 +0000 (17:29 +0200)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 5 Apr 2018 14:24:37 +0000 (16:24 +0200)
Change-Id: Ib9214f394a7ffc5402fa3f339e2a4498ad4e6d6b
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
models/yang/mano-types.yang
models/yang/nsd-base.yang
models/yang/vnfd-base.yang

index 3aa10a1..7f50c1a 100644 (file)
@@ -237,6 +237,20 @@ module mano-types
     }
   }
 
+  grouping vca-metrics {
+    description
+        "Information about the VNF or VDU metrics";
+    list metrics {
+      description "List of VCA related metrics";
+      key "name";
+      leaf name {
+        description
+          "Name of the metric, as defined in the Juju charm.";
+        type string;
+      }
+    }
+  } // END - grouping vca-metrics
+
   grouping vca-configuration {
     description
         "Information about the VNF or VDU configuration. Note:
@@ -337,6 +351,9 @@ module mano-types
         }
       }
     }
+
+    uses manotypes:vca-metrics;
+
   } // END - grouping vca-configuration
 
   typedef virtual-link-type {
@@ -622,6 +639,60 @@ module mano-types
     }
   }
 
+  typedef nfvi-metric-type {
+    description "Type of NFVI metric to be monitored";
+    type enumeration {
+      enum cpu_utilization;
+      enum average_memory_utilization;
+      enum disk_read_ops;
+      enum disk_write_ops;
+      enum disk_read_bytes;
+      enum disk_write_bytes;
+      enum packets_sent;
+      enum packets_received;
+      enum packets_dropped;
+    }
+  }
+
+  typedef scaling-trigger {
+    type enumeration {
+      enum pre-scale-in {
+        value 1;
+      }
+      enum post-scale-in {
+        value 2;
+      }
+      enum pre-scale-out {
+        value 3;
+      }
+      enum post-scale-out {
+        value 4;
+      }
+    }
+  }
+
+  typedef scaling-policy-type {
+    type enumeration {
+      enum manual {
+        value 1;
+      }
+      enum automatic {
+        value 2;
+      }
+    }
+  }
+
+  typedef scaling-criteria-operation {
+    type enumeration {
+      enum AND {
+        value 1;
+      }
+      enum OR {
+        value 2;
+      }
+    }
+  }
+
   grouping vm-flavor {
     container vm-flavor {
       leaf vcpu-count {
@@ -1118,7 +1189,7 @@ module mano-types
     }
   }
 
-  grouping monitoring-param {
+  grouping http-endpoints {
     list http-endpoint {
       description
           "List of http endpoints to be used by monitoring params";
@@ -1179,47 +1250,6 @@ module mano-types
         }
       }
     }
-
-    list monitoring-param {
-      description
-          "List of monitoring parameters at the network service level";
-      key id;
-      leaf id {
-        type string;
-      }
-
-      leaf name {
-        type string;
-      }
-
-      leaf http-endpoint-ref {
-        type leafref {
-          path "../../http-endpoint/path";
-        }
-      }
-
-      leaf json-query-method {
-        type json-query-method;
-        default "NAMEKEY";
-      }
-
-      container json-query-params {
-        leaf json-path {
-          description
-            "The jsonpath to use to extract value from JSON structure";
-          type string;
-        }
-        leaf object-path {
-          description
-            "The objectpath to use to extract value from JSON structure";
-          type string;
-        }
-      }
-
-      uses monitoring-param-ui-data;
-      uses monitoring-param-value;
-
-    }
   }
 
   grouping monitoring-param-aggregation {
@@ -1735,11 +1765,12 @@ module mano-types
     }
   }
 
-  typedef alarm-operation-type {
+  typedef relational-operation-type {
     description
-        "The relational operator used to define whether an alarm
-        should be triggered in certain scenarios, such as if the
-        metric statistic goes above or below a specified value.";
+        "The relational operator used to define whether an alarm,
+        scaling event, etc. should be triggered in certain scenarios,
+        such as if the metric statistic goes above or below a specified
+        value.";
     type enumeration {
       enum GE; // greater than or equal
       enum LE; // less than or equal
@@ -1834,7 +1865,7 @@ module mano-types
           "The relational operator used to define whether an alarm should be
            triggered in certain scenarios, such as if the metric statistic
            goes above or below a specified value.";
-      type alarm-operation-type;
+      type relational-operation-type;
     }
 
     leaf value {
index f11ab22..df99563 100644 (file)
@@ -259,6 +259,12 @@ module nsd-base
           type string;
         }
 
+        leaf scaling-type {
+          description
+              "Type of scaling";
+          type manotypes:scaling-policy-type;
+        }
+
         leaf enabled {
           description
             "Specifies if the scaling policy can be applied";
@@ -271,7 +277,7 @@ module nsd-base
               "Operation to be applied to check between scaling criterias to
                check if the scale in threshold condition has been met.
                Defaults to AND";
-          type scaling-criteria-operation;
+          type manotypes:scaling-criteria-operation;
           default AND;
         }
 
@@ -280,7 +286,7 @@ module nsd-base
               "Operation to be applied to check between scaling criterias to
                check if the scale out threshold condition has been met.
                Defauls to OR";
-          type scaling-criteria-operation;
+          type manotypes:scaling-criteria-operation;
           default OR;
         }
 
@@ -315,12 +321,28 @@ module nsd-base
             type uint64;
           }
 
+          leaf scale-in-relational-operation {
+            description
+              "The relational operator used to compare the monitoring param
+              against the scale-in-threshold.";
+            type manotypes:relational-operation-type;
+            default LE;
+          }
+
           leaf scale-out-threshold {
             description
                 "Value above which scale-out requests are generated";
             type uint64;
           }
 
+          leaf scale-out-relational-operation {
+            description
+              "The relational operator used to compare the monitoring param
+              against the scale-out-threshold.";
+            type manotypes:relational-operation-type;
+            default GE;
+          }
+
           leaf ns-monitoring-param-ref {
             description
                "Reference to the NS level monitoring parameter
@@ -378,7 +400,7 @@ module nsd-base
 
         leaf trigger {
           description "scaling trigger";
-          type scaling-trigger;
+          type manotypes:scaling-trigger;
         }
 
         leaf ns-service-primitive-name-ref {
index cd2061b..69f5265 100644 (file)
@@ -443,6 +443,30 @@ module vnfd-base
           uses manotypes:vca-configuration;
         }
 
+        list monitoring-param {
+          description
+            "List of VDU-related monitoring parameters at NFVI level";
+          key id;
+          leaf id {
+            description "The unique id of the monitoring param at VDU level";
+            type string;
+          }
+
+          leaf nfvi-metric {
+            description "The associated NFVI metric to be monitored";
+            type manotypes:nfvi-metric-type;
+          }
+
+          leaf interface-name-ref {
+            description
+              "Reference to a VDU interface name. Applicable only when the nfvi-metric
+              refers to an interface and not to the VM";
+            type leafref {
+              path "../../interface/name";
+            }
+          }
+        }
+
         choice cloud-init-input {
           description
             "Indicates how the contents of cloud-init script are provided.
@@ -602,7 +626,274 @@ module vnfd-base
         type string;
       }
 
-      uses manotypes:monitoring-param;
+      uses manotypes:http-endpoints;
+
+      list scaling-group-descriptor {
+        description
+            "scaling group descriptor within the VNF.
+             The scaling group defines a group of VDUs,
+             and the ratio of VDUs in the VNF
+             that is used as target for scaling action";
+
+        key "name";
+
+        leaf name {
+          description "Name of this scaling group.";
+          type string;
+        }
+
+        list scaling-policy {
+
+          key "name";
+
+          leaf name {
+            description
+                "Name of the scaling policy";
+            type string;
+          }
+
+          leaf scaling-type {
+            description
+                "Type of scaling";
+            type manotypes:scaling-policy-type;
+          }
+
+          leaf enabled {
+            description
+              "Specifies if the scaling policy can be applied";
+            type boolean;
+            default true;
+          }
+
+          leaf scale-in-operation-type {
+            description
+                "Operation to be applied to check between scaling criterias to
+                 check if the scale in threshold condition has been met.
+                 Defaults to AND";
+            type manotypes:scaling-criteria-operation;
+            default AND;
+          }
+
+          leaf scale-out-operation-type {
+            description
+                "Operation to be applied to check between scaling criterias to
+                 check if the scale out threshold condition has been met.
+                 Defauls to OR";
+            type manotypes:scaling-criteria-operation;
+            default OR;
+          }
+
+          leaf threshold-time {
+            description
+              "The duration for which the criteria must hold true";
+            type uint32;
+            mandatory true;
+          }
+
+          leaf cooldown-time {
+            description
+              "The duration after a scaling-in/scaling-out action has been
+              triggered, for which there will be no further optional";
+            type uint32;
+            mandatory true;
+          }
+
+          list scaling-criteria {
+            description
+                "list of conditions to be met for generating scaling
+                   requests";
+            key "name";
+
+            leaf name {
+              type string;
+            }
+
+            leaf scale-in-threshold {
+              description
+                  "Value below which scale-in requests are generated";
+              type uint64;
+            }
+
+            leaf scale-in-relational-operation {
+              description
+                "The relational operator used to compare the monitoring param
+                against the scale-in-threshold.";
+              type manotypes:relational-operation-type;
+              default LE;
+            }
+
+            leaf scale-out-threshold {
+              description
+                  "Value above which scale-out requests are generated";
+              type uint64;
+            }
+
+            leaf scale-out-relational-operation {
+              description
+                "The relational operator used to compare the monitoring param
+                against the scale-out-threshold.";
+              type manotypes:relational-operation-type;
+              default GE;
+            }
+
+            leaf vnf-monitoring-param-ref {
+              description
+                 "Reference to the VNF level monitoring parameter
+                  that is aggregated";
+              type leafref {
+                path "../../../../monitoring-param/id";
+              }
+            }
+          }
+        }
+
+        list vdu {
+          description "List of VDUs in this scaling group";
+          key "vdu-id-ref";
+
+          leaf vdu-id-ref {
+            description "Reference to the VDU id";
+            type leafref {
+              path "../../../vdu/id";
+            }
+          }
+
+          leaf count {
+            description
+              "count of this VDU id within this scaling group.
+               The count allows to define the number of instances
+               when a scaling action targets this scaling group";
+            type uint32;
+            default 1;
+          }
+        }
+
+        leaf min-instance-count {
+          description
+            "Minimum instances of the scaling group which are allowed.
+            These instances are created by default when the network service
+            is instantiated.";
+          type uint32;
+          default 0;
+        }
+
+        leaf max-instance-count {
+          description
+            "Maximum instances of this scaling group that are allowed
+             in a single network service. The network service scaling
+             will fail, when the number of service group instances
+             exceed the max-instance-count specified.";
+          type uint32;
+          default 10;
+        }
+
+        list scaling-config-action {
+          description "List of scaling config actions";
+          key "trigger";
+
+          leaf trigger {
+            description "scaling trigger";
+            type manotypes:scaling-trigger;
+          }
+
+          leaf vnf-config-primitive-name-ref {
+            description "Reference to the VNF config primitive";
+            type leafref {
+              path "../../../vnf-configuration/config-primitive/name";
+            }
+          }
+        }
+      }
+
+      list monitoring-param {
+        description
+          "List of monitoring parameters at the network service level";
+        key id;
+        leaf id {
+          type string;
+        }
+
+        leaf name {
+          type string;
+        }
+
+        uses manotypes:monitoring-param-aggregation;
+
+        choice monitoring-type {
+          description
+            "Defines the type of monitoring param to be used:
+              * vdu-monitorin-param:     VDU-related metric (from NFVI)
+              * vnf-metric:              VNF-related metric (from VCA)
+              * vdu-metric:              VDU-related metric (from VCA)
+            ";
+
+          case vdu-monitoring-param {
+            description "VDU-related metric from the infrastructure";
+            leaf vdu-ref {
+              type leafref {
+                path "../../vdu/id";
+              }
+            }
+            leaf vdu-monitoring-param-ref {
+              type leafref {
+                path "../../vdu[id = current()/../vdu-ref]/monitoring-param/id";
+              }
+            }
+          }
+
+          case vnf-metric {
+            description "VNF-related metric (from VCA)";
+            leaf vnf-metric-name-ref {
+              type leafref {
+                path "../../vnf-configuration/metrics/name";
+              }
+            }
+          }
+
+          case vdu-metric {
+            description "VDU-related metric (from VCA)";
+            leaf vdu-id-ref {
+              type leafref {
+                path "../../vdu/id";
+              }
+            }
+            leaf vdu-metric-name-ref {
+              type leafref {
+                path "../../vdu[id = current()/../vdu-id-ref]/vdu-configuration/metrics/name";
+              }
+            }
+          }
+
+        }
+
+        leaf http-endpoint-ref {
+          type leafref {
+            path "../../http-endpoint/path";
+          }
+        }
+
+        leaf json-query-method {
+          type manotypes:json-query-method;
+          default "NAMEKEY";
+        }
+
+        container json-query-params {
+          leaf json-path {
+            description
+              "The jsonpath to use to extract value from JSON structure";
+            type string;
+          }
+          leaf object-path {
+            description
+              "The objectpath to use to extract value from JSON structure";
+            type string;
+          }
+        }
+
+        uses manotypes:monitoring-param-ui-data;
+        uses manotypes:monitoring-param-value;
+
+      }
 
       list placement-groups {
         description "List of placement groups at VNF level";