X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FIM.git;a=blobdiff_plain;f=models%2Fyang%2Fvnfd-base.yang;h=38bede65879d9a9eff0564b4a8afe25c1897b764;hp=607a76cf1ca7260d5609a92fbcad40227dc96ea7;hb=54409a2918af8af47dad29fa3dff637fbf3836ef;hpb=19a20de67ca9bd705abed066a8c530a8a4fdf461;ds=sidebyside diff --git a/models/yang/vnfd-base.yang b/models/yang/vnfd-base.yang index 607a76c..38bede6 100644 --- a/models/yang/vnfd-base.yang +++ b/models/yang/vnfd-base.yang @@ -20,7 +20,7 @@ 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 { @@ -62,8 +62,9 @@ module vnfd-base } leaf port-security-enabled { - description "Enables the port security for the port"; + description "Enables the port security for the port."; type boolean; + default true; } } @@ -94,15 +95,17 @@ module vnfd-base 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; @@ -111,7 +114,7 @@ module vnfd-base enum RTL8139; enum PCNET; } - default "VIRTIO"; + default "PARAVIRT"; } leaf vpci { @@ -173,6 +176,8 @@ module vnfd-base container vnf-configuration { uses manotypes:vca-configuration; + uses manotypes:vca-relations; + uses manotypes:vca-config-access; } leaf operational-status { @@ -298,11 +303,16 @@ module vnfd-base 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; @@ -342,6 +352,19 @@ module vnfd-base 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 { @@ -363,6 +386,16 @@ module vnfd-base 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; @@ -386,13 +419,74 @@ module vnfd-base 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; + list alternative-images { + key "vim-type"; + description + "List of alternative images per VIM type. + Different images can be used for specific types of VIMs instead + of the default image. This allows deployments in sites where the + image identifier in the VIM is given by the VIM provider and + cannot be modified. + If an alternative image is specified for a VIM type, it will prevail + over the default image"; + + leaf vim-type { + description "VIM type: openvim, openstack, vmware, aws, etc."; + type string; + } + + 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 { @@ -456,6 +550,14 @@ module vnfd-base 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"; @@ -464,23 +566,34 @@ module vnfd-base default "EXTERNAL"; } + 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."; + type string; + } + choice connection-point-type { 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"; + } } } } @@ -501,6 +614,118 @@ module vnfd-base } } + 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: + - / + - + - + - + "; + type string; + } + } + + case juju-bundle { + leaf juju-bundle { + description + "Juju bundle that models the KDU, in any of the following ways: + - / + - + - + - + "; + type string; + } + } + } + + } + + 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."; @@ -543,7 +768,284 @@ 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 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";