
/*
 *
 *   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
