-
/*
*
* Copyright 2017 RIFT.IO Inc
+ * Copyright 2018-2020 ETSI
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
module vnfd-base
{
- namespace "http://riftio.com/ns/riftware-1.0/vnfd-base";
+ namespace "urn:etsi:osm:yang:vnfd-base";
prefix "vnfd-base";
import mano-types {
}
leaf port-security-enabled {
- description "Enables the port security for the port";
+ description "Enables the port security for the port.";
type boolean;
+ default true;
+ }
+
+ leaf port-security-disable-strategy {
+ description "Strategy to disable port security, either Enables the port security for the port.
+ full : disable port security in the whole port
+ allow-address-pairs : allow address pairs for virtual IP (any virtual IP can be configured)";
+ type enumeration {
+ enum full;
+ enum allow-address-pairs;
+ }
+ default full;
}
}
description
"Specifies the type of virtual interface
between VM and host.
- VIRTIO : Use the traditional VIRTIO interface.
+ PARAVIRT : Use the default paravirtualized interface for the VIM (virtio, vmxnet3, etc.).
+ VIRTIO : Deprecated! Use the traditional VIRTIO interface.
PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface.
SR-IOV : Use SR-IOV interface.
E1000 : Emulate E1000 interface.
RTL8139 : Emulate RTL8139 interface.
PCNET : Emulate PCNET interface.
- OM-MGMT : Deprecated! Use VIRTIO instead and set the VNF management interface at vnfd:mgmt-interface:cp";
+ OM-MGMT : Deprecated! Use PARAVIRT instead and set the VNF management interface at vnfd:mgmt-interface:cp";
type enumeration {
+ enum PARAVIRT;
enum OM-MGMT;
enum PCI-PASSTHROUGH;
enum SR-IOV;
enum RTL8139;
enum PCNET;
}
- default "VIRTIO";
+ default "PARAVIRT";
}
leaf vpci {
container vnf-configuration {
uses manotypes:vca-configuration;
+ uses manotypes:vca-relations;
+ uses manotypes:vca-config-access;
}
leaf operational-status {
key "id-ref";
description "List of internal connection points in this VLD";
leaf id-ref {
- description "reference to the internal connection point id";
+ description "Reference to the internal connection point id";
type leafref {
path "../../../vdu/internal-connection-point/id";
}
}
+
+ leaf ip-address {
+ description "IP address of the internal connection point";
+ type inet:ip-address;
+ }
}
uses manotypes:provider-network;
at the network service level to construct network services.";
uses common-connection-point;
+
+ leaf internal-vld-ref {
+ description
+ "Reference to an internal VLD of the VNF. This field is
+ optional. It allows exposing an internal VLD through a
+ connection point. When building a NS, this VNF CP might be
+ connected to a NS VLD, then both VLDs (the i-VLD of the VNF and the
+ VLD of the NS) will become the same network and the IP profile will
+ be the one configured at NS level.";
+ type leafref {
+ path "../../internal-vld/id";
+ }
+ }
}
list vdu {
type string;
}
+ leaf pdu-type {
+ description
+ "Type of PDU. If this field exists, the deployment unit must be
+ understood as a PDU, not as a VDU. This field is used to identify
+ the category of PDU instances to be used at instantiation time. For
+ the instantiation to be successful, there must be available
+ PDU instances of this type in the selected datacenter.";
+ type string;
+ }
+
leaf count {
description "Number of instances of VDU";
type uint64;
list alarm {
key "alarm-id";
- uses manotypes:alarm;
+ leaf alarm-id {
+ description
+ "This field is reserved for the identifier assigned by the VIM provider";
+
+ type string;
+ }
+
+
+ leaf vnf-monitoring-param-ref {
+ description
+ "Reference to the VNF level monitoring parameter
+ that is aggregated";
+ type leafref {
+ path "../../monitoring-param/id";
+ }
+ }
+
+ uses manotypes:alarm-properties;
}
uses manotypes:image-properties;
container vdu-configuration {
uses manotypes:vca-configuration;
+ uses manotypes:vca-config-access;
+ }
+
+ 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 {
type uint32;
}
+ leaf mgmt-interface {
+ description
+ "Flag to indicate that this is the mgmt interface
+ to be used for VDU configuration";
+ type boolean;
+ default false;
+ }
+
leaf type {
description
"Type of the Interface";
leaf mac-address {
description
- "MAC address of the interface.
- Some VNFs require a specific MAC address to be configured
- in the interface. While this is not recommended at all in
- NFV environments, this parameter exists to allow those
- scenarios.
- This parameter will be likely deprecated in the future.";
+ "MAC address of the interface.
+ Some VNFs require a specific MAC address to be configured
+ in the interface. While this is not recommended at all in
+ NFV environments, this parameter exists to allow those
+ scenarios.
+ This parameter will be likely deprecated in the future.";
type string;
}
case internal {
leaf internal-connection-point-ref {
description
- "Leaf Ref to the particular internal connection point";
+ "Leaf Ref to the particular internal connection point";
type leafref {
- path "../../internal-connection-point/id";
- }
+ path "../../internal-connection-point/id";
+ }
}
}
case external {
leaf external-connection-point-ref {
description
- "Leaf Ref to the particular external connection point";
+ "Leaf Ref to the particular external connection point";
type leafref {
- path "../../../connection-point/name";
- }
+ path "../../../connection-point/name";
+ }
}
}
}
}
}
+ list kdu {
+ description "List of K8s Deployment Units";
+ key "name";
+
+ leaf name {
+ description "Unique name for the KDU";
+ type string;
+ }
+
+ leaf description {
+ description "Description of the KDU.";
+ type string;
+ }
+
+ container kdu-configuration {
+ uses manotypes:vca-configuration;
+ uses manotypes:vca-config-access;
+
+ leaf-list blacklist-config-primitive {
+ description
+ "List of blacklisted config primitives from the list of
+ default kdu config primitives";
+
+ type enumeration {
+ enum upgrade;
+ enum rollback;
+ }
+
+ }
+
+ }
+
+ choice kdu-model {
+ description
+ "Indicates the KDU model, either as a helm-chart or as a juju-bundle.";
+
+ case helm-chart {
+ leaf helm-chart {
+ description
+ "Helm chart that models the KDU, in any of the following ways:
+ - <helm-repo>/<helm-chart>
+ - <helm-chart folder under k8s_models folder in the package>
+ - <helm-chart tgz file (w/ or w/o extension) under k8s_models folder in the package>
+ - <URL_where_to_fetch_chart>
+ ";
+ type string;
+ }
+ leaf helm-version {
+ description
+ "Helm version to use for this helm-chart, v3 by default";
+ type enumeration {
+ enum v2;
+ enum v3;
+ }
+ default v3;
+ }
+ }
+
+ case juju-bundle {
+ leaf juju-bundle {
+ description
+ "Juju bundle that models the KDU, in any of the following ways:
+ - <juju-repo>/<juju-bundle>
+ - <juju-bundle folder under k8s_models folder in the package>
+ - <juju-bundle tgz file (w/ or w/o extension) under k8s_models folder in the package>
+ - <URL_where_to_fetch_juju_bundle>
+ ";
+ type string;
+ }
+ }
+ }
+
+ list service {
+ description
+ "List of Kubernetes services exposed by the KDU.
+ If empty, all services are assumed to be exposed in the CP associated to the first network
+ in k8s-cluster.nets.";
+ key name;
+
+ leaf name {
+ description "Name of the Kubernetes service exposed by he KDU model";
+ type string;
+ }
+
+ leaf mgmt-service {
+ description
+ "Flag to indicate that this Kubernetes service is a mgmt service
+ to be used for KDU configuration. Defaults to false (if no present).
+ All services with mgmt-service set to true will be passed to the execution
+ environment in charge of the KDU configuration.";
+ type boolean;
+ default false;
+ }
+
+ leaf external-connection-point-ref {
+ description
+ "Leaf Ref to the particular external connection point";
+ type leafref {
+ path "../../../connection-point/name";
+ }
+ }
+
+ }
+
+ }
+
+ container k8s-cluster {
+ leaf-list version {
+ description
+ "List of supported K8s versions.
+ The cluster where the KDUs will be deployed will have to match
+ one of these versions.";
+
+ type string;
+ }
+
+ leaf-list cni {
+ description
+ "List of supported CNI plugins.
+ The cluster where the KDUs will be deployed will have to use
+ one of these CNI plugins.";
+
+ type enumeration {
+ enum calico;
+ enum flannel;
+ enum multus;
+ }
+ }
+
+ list nets {
+ description
+ "List of required networks in the K8s cluster.
+ The cluster where the KDUs will be deployed will have to use
+ one of these CNI plugins.";
+
+ key "id";
+
+ leaf id {
+ description "Internal identifier for the K8s cluster network in this VNF";
+ type string;
+ }
+
+ leaf external-connection-point-ref {
+ description
+ "Leaf Ref to the particular external connection point";
+ type leafref {
+ path "../../../connection-point/name";
+ }
+ }
+
+ }
+ }
+
list vdu-dependency {
description
"List of VDU dependencies.";
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 decimal64{
+ fraction-digits 10;
+ }
+ }
+
+ 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 decimal64{
+ fraction-digits 10;
+ }
+ }
+
+ 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";
+ container vdu-monitoring-param {
+ 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)";
+ container vnf-metric {
+ leaf vnf-metric-name-ref {
+ type leafref {
+ path "../../../vnf-configuration/metrics/name";
+ }
+ }
+ }
+ }
+
+ case vdu-metric {
+ description "VDU-related metric (from VCA)";
+ container vdu-metric {
+ leaf vdu-ref {
+ type leafref {
+ path "../../../vdu/id";
+ }
+ }
+ leaf vdu-metric-name-ref {
+ type leafref {
+ path "../../../vdu[id = current()/../vdu-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";