/* * * Copyright 2017 RIFT.IO Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * */ module vnfd-base { namespace "urn:etsi:osm:yang:vnfd-base"; prefix "vnfd-base"; import mano-types { prefix "manotypes"; } import ietf-inet-types { prefix "inet"; } revision 2017-02-28 { description "Initial revision. This YANG file defines the common types for Virtual Network Function (VNF) descriptor"; reference "Derived from earlier versions of base YANG files"; } grouping common-connection-point { leaf name { description "Name of the connection point"; type string; } leaf id { description "Identifier for the internal connection points"; type string; } leaf short-name { description "Short name to appear as label in the UI"; type string; } leaf type { description "Type of the connection point."; type manotypes:connection-point-type; } leaf port-security-enabled { description "Enables the port security for the port."; type boolean; default true; } } typedef interface-type { type enumeration { enum INTERNAL; enum EXTERNAL; } } typedef vnf-operational-status { type enumeration { enum init; enum running; enum upgrading; enum terminate; enum terminated; enum failed; } } grouping virtual-interface { container virtual-interface { description "Container for the virtual interface properties"; leaf type { description "Specifies the type of virtual interface between VM and host. 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 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 VIRTIO; enum E1000; enum RTL8139; enum PCNET; } default "PARAVIRT"; } leaf vpci { description "Specifies the virtual PCI address. Expressed in the following format dddd:dd:dd.d. For example 0000:00:12.0. This information can be used to pass as metadata during the VM creation."; type string; } leaf bandwidth { description "Aggregate bandwidth of the NIC."; type uint64; } } } grouping vnfd-descriptor { leaf id { description "Identifier for the VNFD."; type string { length "1..63"; } } leaf name { description "VNFD name."; mandatory true; type string; } leaf short-name { description "Short name to appear as label in the UI"; type string; } leaf vendor { description "Vendor of the VNFD."; type string; } leaf logo { description "Vendor logo for the Virtual Network Function"; type string; } leaf description { description "Description of the VNFD."; type string; } leaf version { description "Version of the VNFD"; type string; } container vnf-configuration { uses manotypes:vca-configuration; uses manotypes:vca-relations; uses manotypes:vca-config-access; } leaf operational-status { description "The operational status of the VNF init : The VNF has just started. running : The VNF is active in VM upgrading : The VNF is being upgraded (EXPERIMENTAL) terminate : The VNF is being terminated terminated : The VNF is in the terminated state. failed : The VNF instantiation failed. "; type vnf-operational-status; } container mgmt-interface { description "Interface over which the VNF is managed."; choice endpoint-type { description "Indicates the type of management endpoint."; case ip { description "Specifies the static IP address for managing the VNF."; leaf ip-address { type inet:ip-address; } } case vdu-id { description "Use the default management interface on this VDU."; leaf vdu-id { type leafref { path "../../vdu/id"; } } } case cp { description "Use the ip address associated with this connection point. This cp is then considered as management."; leaf cp { type leafref { path "../../connection-point/name"; } } } } leaf port { description "Port for the management interface."; type inet:port-number; } container dashboard-params { description "Parameters for the VNF dashboard"; leaf path { description "The HTTP path for the dashboard"; type string; } leaf https { description "Pick HTTPS instead of HTTP , Default is false"; type boolean; } leaf port { description "The HTTP port for the dashboard"; type inet:port-number; } } } list internal-vld { key "id"; description "List of Internal Virtual Link Descriptors (VLD). The internal VLD describes the basic topology of the connectivity such as E-LAN, E-Line, E-Tree. between internal VNF components of the system."; leaf id { description "Identifier for the VLD"; type string; } leaf name { description "Name of the internal VLD"; type string; } leaf short-name { description "Short name to appear as label in the UI"; type string; } leaf description { type string; } leaf type { type manotypes:virtual-link-type; } leaf root-bandwidth { description "For ELAN this is the aggregate bandwidth."; type uint64; } leaf leaf-bandwidth { description "For ELAN this is the bandwidth of branches."; type uint64; } list internal-connection-point { key "id-ref"; description "List of internal connection points in this VLD"; leaf id-ref { 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; choice init-params { description "Extra parameters for VLD instantiation"; case vim-network-ref { leaf vim-network-name { description "Name of network in VIM account. This is used to indicate pre-provisioned network name in cloud account."; type string; } } case vim-network-profile { leaf ip-profile-ref { description "Named reference to IP-profile object"; type string; } } } } uses manotypes:ip-profile-list; list connection-point { key "name"; description "List for external connection points. Each VNF has one or more external connection points that connect the VNF to other VNFs or to external networks. Each VNF exposes connection points to the orchestrator, which can construct network services by connecting the connection points between different VNFs. The NFVO will use VLDs and VNFFGs 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 { description "List of Virtual Deployment Units"; key "id"; leaf id { description "Unique id for the VDU"; type string; } leaf name { description "Unique name for the VDU"; type string; } leaf description { description "Description of the 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; } leaf mgmt-vpci { description "Specifies the virtual PCI address. Expressed in the following format dddd:dd:dd.d. For example 0000:00:12.0. This information can be used to pass as metadata during the VM creation."; type string; } uses manotypes:vm-flavor; uses manotypes:guest-epa; uses manotypes:vswitch-epa; uses manotypes:hypervisor-epa; uses manotypes:host-epa; list alarm { key "alarm-id"; 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 { description "Indicates how the contents of cloud-init script are provided. There are 2 choices - inline or in a file"; case inline { leaf cloud-init { description "Contents of cloud-init script, provided inline, in cloud-config format"; type string; } } case filename { leaf cloud-init-file { description "Name of file with contents of cloud-init script in cloud-config format"; type string; } } } uses manotypes:supplemental-boot-data; list internal-connection-point { key "id"; description "List for internal connection points. Each VNFC has zero or more internal connection points. Internal connection points are used for connecting the VNF with components internal to the VNF. If a VNF has only one VNFC, it may not have any internal connection points."; uses common-connection-point; leaf internal-vld-ref { type leafref { path "../../../internal-vld/id"; } } } list interface { description "List of Interfaces (external and internal) for the VNF"; key name; leaf name { description "Name of the interface. Note that this name has only local significance to the VDU."; type string; } leaf position { description "Explicit Position of the interface within the list"; 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"; type interface-type; 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"; type leafref { path "../../internal-connection-point/id"; } } } case external { leaf external-connection-point-ref { description "Leaf Ref to the particular external connection point"; type leafref { path "../../../connection-point/name"; } } } } uses virtual-interface; } list volumes { key "name"; leaf name { description "Name of the disk-volumes, e.g. vda, vdb etc"; type string; } uses manotypes:volume-info; } } list vdu-dependency { description "List of VDU dependencies."; key vdu-source-ref; leaf vdu-source-ref { type leafref { path "../../vdu/id"; } } leaf vdu-depends-on-ref { description "Reference to the VDU on which the source VDU depends."; type leafref { path "../../vdu/id"; } } } leaf service-function-chain { description "Type of node in Service Function Chaining Architecture"; type enumeration { enum UNAWARE; enum CLASSIFIER; enum SF; enum SFF; } default "UNAWARE"; } leaf service-function-type { description "Type of Service Function. NOTE: This needs to map with Service Function Type in ODL to support VNFFG. Service Function Type is mandatory param in ODL SFC. This is temporarily set to string for ease of use"; type string; } 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"; key "name"; uses manotypes:placement-group-info; list member-vdus { description "List of VDUs that are part of this placement group"; key "member-vdu-ref"; leaf member-vdu-ref { type leafref { path "../../../vdu/id"; } } } } } } // vim: sw=2