Skip to content
etsi-nfv-vnf.yang 76.8 KiB
Newer Older
submodule etsi-nfv-vnf {
  yang-version 1.1;
  belongs-to etsi-nfv {
    prefix nfv;
  }

  include etsi-nfv-common;

  import ietf-inet-types {
    prefix inet;
  }
  import ietf-yang-types {
    prefix yang;
  }

  description
    "Models for VNFD according to GS NFV-IFA 011.";

  revision 2018-06-19 {
    description
      "Initial revision.

       Common data structure to support VNFD according to:
       VNFD according to ETSI GS NFV-IFA 011 Ed251v243";
      "ETSI GS NFV-IFA 011 Ed251v243";
  }

  grouping virtual-network-interface-requirements {
    list virtual-network-interface-requirement {
      key "name";
      description
        "Specifies requirements on a virtual network interface
         realising the CPs instantiated from this CPD.";
      reference
        "GS NFV-IFA011: Section 7.1.6.4, VduCpd information
         element";

      leaf name {
        type string;
        description
          "Provides a human readable name for the requirement.";
        reference
          "GS NFV-IFA011: Section 7.1.6.6,
           VirtualNetworkInterfaceRequirements information element";
      }
      leaf description {
        type string;
        description
          "Provides a human readable description of the requirement.";
        reference
          "GS NFV-IFA011: Section 7.1.6.6,
           VirtualNetworkInterfaceRequirements information element";
      }
      leaf support-mandatory {
        mandatory true;
        type boolean;
        description
          "Indicates whether fulfilling the constraint is
           mandatory (true) for successful operation or desirable
           (false).";
        reference
          "GS NFV-IFA011: Section 7.1.6.6,
           VirtualNetworkInterfaceRequirements information element";
      }
      list network-interface-requirements {
        key "key";
        leaf key {
          type string;
        }
        leaf value {
          type string;
        }
        description
          "The network interface requirements. An element from an
           array of key-value pairs that articulate the network
           interface deployment requirements.";
        reference
          "GS NFV-IFA011: Section 7.1.6.6,
           VirtualNetworkInterfaceRequirements information element";
      }
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
      leaf nicio-requirements {
        type leafref {
          path "/nfv/vnfd/virtual-compute-descriptor/id";
        }
        description
          "This references (couples) the CPD with any logical node I/O
           requirements (for network devices) that may have been
           created. Linking these attributes is necessary so that so
           that I/O requirements that need to be articulated at the
           logical node level can be associated with the network
           interface requirements associated with the CPD.";
        reference
          "GS NFV-IFA011: Section 7.1.6.6,
           VirtualNetworkInterfaceRequirements information element";
      }
    }
  }

  // This grouping definition is for use within Vnfd as defined in
  // IFA011. A similar definition of Cpd exists in IFA014, but
  // that is for use with Sapd and Pnfd. Do not use this grouping
  // for that.
  grouping vnf-cpd {
    description
      "A Cpd information element describes network
       connectivity to a compute resource or a VL.";
    reference
      "GS NFC IFA011: Section 7.1.6.3 Cpd Information
       Element";
    leaf id {
      type string;
      description
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "Identifier of this Cpd information element.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
    }
    leaf layer-protocol {
      mandatory true;
      type identityref {
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        base layer-protocol;
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "Identifies which protocol the CP uses for connectivity
         purposes (Ethernet, MPLS, ODU2, IPV4, IPV6, Pseudo-Wire,
         etc.).";
      reference
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
    }
    leaf role {
      type identityref {
	base cp-role;
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "Identifies the role of the port in the context of the
         traffic flow patterns in the VNF or parent NS. For example a
         VNF with a tree flow pattern within the VNF will have legal
         cpRoles of ROOT and LEAF.";
      reference
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
    }
    leaf description {
      type string;
      description
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "Human readable description of the connection point";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
    }
    container protocol {
      description
	"Identifies the protocol layering information the CP uses for
         connectivity purposes and associated information. There shall
         be one cpProtocol for each layer protocol as indicated by the
         attribute layerProtocol.";
      reference
	"GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
      leaf associated-layer-protocol {
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        type identityref {
          base layer-protocol;
        }
        description
          "One of the values of the attribute layerProtocol of the Cpd
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        reference
          "GS NFV IFA011: Section 7.1.6.8, CpProtocolData information
           element.";
      }

      list address-data {
	key "address-type";
	leaf address-type {
	  type identityref {
	    base address-type;
	  }
	  description
	    "Describes the type of the address to be assigned to the CP
             instantiated from the parent CPD.
             Value:
             • MAC address.
             • IP address.
             • …
             The content type shall be aligned with the address type
             supported by the layerProtocol attribute of the parent CPD.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          reference
            "GS NFV IFA011: Section 7.1.3.3, AddressData information
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        }
        container l2-address-data {
          when "../address-type='mac-address'";
        }
        container l3-address-data {
          when "../address-type='ip-address'";
	  leaf ip-address-assignment {
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            type boolean;
            description
              "Specify if the address assignment is the responsibility
               of management and orchestration function or not. If it
               is set to True, it is the management and orchestration
               function responsibility. ";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            reference
              "GS NFV IFA011: Section 7.1.3.4, L3AddressData
               information element.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          }
          leaf floating-ip-activated {
            type boolean;
            description
              "Specify if the floating IP scheme is activated on the CP
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            reference
              "GS NFV IFA011: Section 7.1.3.4, L3AddressData
               information element.";
	  }
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          leaf ip-address-type {
            type enumeration {
              enum "ipv4";
              enum "ipv6";
            }
            description
              "Define address type. The address type should be aligned
               with the address type supported by the layerProtocol
               attribute of the parent VnfExtCpd.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            reference
              "GS NFV IFA011: Section 7.1.3.4, L3AddressData
               information element.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          }
          leaf number-of-ip-addresses {
            type uint32;
            description
              "Minimum number of IP addresses to be assigned based on
               this L3AddressData information element.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            reference
              "GS NFV IFA011: Section 7.1.3.4, L3AddressData
               information element.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          }
        }
        description
          "The AddressData information element supports providing
           information about the addressing scheme and parameters
           applicable to a CP.";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        reference
          "GS NFV IFA011: Section 7.1.3.3, AddressData information
           element.";
      }
    }
    leaf trunk-mode {
      type boolean;
      description
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "Information about whether the CP instantiated from this CPD
         is in Trunk mode (802.1Q or other).";
      reference
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
        "GS NFV IFA011: Section 7.1.6.3, Cpd information element.";
  grouping vnfd {
    list vnfd {
      key "id";
      description
        "A VNF Descriptor (VNFD) is a deployment template which
         describes a VNF in terms of deployment and operational
         behaviour requirements. It also contains connectivity,
         interface and virtualised resource requirements";
      reference
        "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      leaf id {
        type string;
        description
          "Identifier of this VNFD information element. This attribute
           shall be globally unique. The format will be defined in the
           data model specification phase.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf provider {
        type string;
        mandatory true;
        description
          "Provider of the VNF and of the VNFD";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf product-name {
        type string;
        mandatory true;
        description
          "Name to identify the VNF Product. Invariant for the VNF
           Product lifetime.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf software-version {
        type string;
        mandatory true;
        description
          "Software version of the VNF. This is changed when there is
           any change to the software that is included in the VNF
           Package";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf version {
        type string;
        mandatory true;
        description
          "Identifies the version of the VNFD";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf product-info-name {
        type string;
        description
          "Human readable name of the VNFD. Can change
           during the VNF Product lifetime.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf product-info-description {
        type string;
        description
          "Human readable description of the VNFD. Can change during
           the VNF Product lifetime.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf-list vnfm-info {
        type string;
        min-elements 1;
        description
          "Identifies VNFM(s) compatible with the VNF described in
           this version of the VNFD.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf localization-language {
        type string;
        description
          "Information about the language of the VNF.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      leaf default-localization-language {
        when "../localization-language";
        type string;
        description
          "Default localization language that is instantiated if no
           information about selected localization language is
           available. Shall be present if 'localization-language'
           is present and shall be absent otherwise.";
        reference
          "GS NFV-IFA011: Section 7.1.2, VNFD information element";
      }
      list vdu {
        key "id";
        min-elements 1;
        description
          "The Virtualisation Deployment Unit (VDU) is a construct supporting
           the description of the deployment and operational behaviour of a
           VNF component, or the entire VNF if it was not componentized in
           components.";
        reference
          "GS NFV IFA011: Section 7.1.2, VNFD information element";
        leaf id {
          type string;
          description
            "Unique identifier of this VDU in VNFD.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
        }
        leaf name {
          type string;
          mandatory true;
          description
            "Human readable name of the VDU.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
        }
        leaf description {
          type string;
          description
            "Human readable description of the VDU.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
        }
        list int-cpd {
          key "id";
          min-elements 1;
          description
            "A internal-connection-point element is a type of
             connection point and describes network connectivity
             between a VDU instance and an internal Virtual Link or
             an external connection point.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information element";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
          leaf int-virtual-link-desc {
            type leafref {
              path "../../../nfv:int-virtual-link-desc/nfv:id";
Mahesh Jethanandani's avatar
Mahesh Jethanandani committed
            description
              "Reference of the internal VLD which this internal CPD
               connects to.";
            reference
              "GS NFV IFA011: Section 7.1.6.4, VduCpd information
               element";
          leaf bitrate-requirement {
            type uint64;
            units "Mbps";
            description
              "Bitrate requirement on this CP.";
            reference
              "GS NFV IFA011: Section 7.1.6.4, VduCpd information
               element.";
          }
          uses virtual-network-interface-requirements;
          leaf-list order {
            type uint32;
            description
              "The order of the NIC to be assigned on the compute
               instance (e.g. 2 for eth2).

               Note: when binding more than one port to a single
               compute (aka multi vNICs) and ordering is desired, it
               is mandatory that all ports will be set with an order
               value. The order values shall represent a positive,
               arithmetic progression that starts with 0 (i.e. 0, 1,
               2,..., n).

               If the property is not present, it shall be left to the
               VIM to assign a value when creating the instance.";
            reference
              "GS NFV IFA011: Section 7.1.6.4, VduCpd information
               element.";
          }
          uses vnf-cpd;
        }
        leaf virtual-compute-desc {
          type leafref {
            path "../../nfv:virtual-compute-descriptor/" +
                 "nfv:id";
          }
          must "../../nfv:virtual-compute-descriptor[id=current()]/" +
               "nfv:virtual-memory/size >=" +
               "../../nfv:sw-image-desc[id=current()/" +
               "../sw-image-desc]/min-ram" {
          }
          description
            "Describes CPU, Memory and acceleration requirements of
             the Virtualisation Container realizing this VDU.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, VDU information
             element, and Section 7.1.9.2.2, VirtualComputeDesc
             information element.";
        }
        leaf-list virtual-storage-desc {
          type leafref {
            path "../../nfv:virtual-storage-descriptor/" +
                 "nfv:id";
          }
          description
            "Describes storage requirements for a VirtualStorage
             instance attached to the virtualisation container
             created from virtualComputeDesc defined for this VDU.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, VDU information
             element, and Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }
        list boot-order {
          ordered-by user;
          key "key";
          leaf key {
            type uint32;
          }
          leaf value {
            type leafref {
              path "../../nfv:virtual-storage-desc";
            }
          }
          description
            "The key indicates the boot index (lowest index defines
             highest boot priority). The Value references a descriptor
             from which a valid boot device is created e.g.
             VirtualStorageDesc from which a VirtualStorage instance
             is created.

             Editor's note: The boot-order node requires further
             study.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information
             element.";
        leaf sw-image-desc {
          type leafref {
            path "../../sw-image-desc/id";
          }
          description
            "Describes the software image which is directly loaded on
             the virtualisation container realising this Vdu.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, Vdu information
             element.";
        }
        leaf-list nfvi-constraint {
          type string;
          description
            "Describes constraints on the NFVI for the VNFC
             instance(s) created from this Vdu. For example, aspects
             of a secure hosting environment for the VNFC instance
             that involve additional entities or processes.";
          reference
            "GS NFV IFA011: Section 7.1.6.2, VDU Information
             element.";
        }
        list monitoring-parameter {
          key "id";
          leaf id {
            type string;
            description
              "Unique identifier of the monitoring parameter.";
            reference
              "GS NFV IFA011: Section 7.1.11.3, MonitoringParameter
               information element.";
          }
          uses monitoring-parameter;
        list configurable-properties {
          key "key";
          leaf key {
            type string;
          }
          leaf value {
            type string;
          }
          description
            "It provides VNFC configurable properties that can be
             modified using the ModifyVnfInfo operation.";
            "GS NFV IFA011: Section 7.1.6.7,
             VnfcConfigurableProperties Information element.";
        }
        list boot-data {
          key "key";
          leaf key {
            type string;
            type string;
          }
          description
            "Contains a string or a URL to a file contained in the
             VNF package used to customize a virtualised compute
             resource at boot time. The bootData may contain variable
             parts that are replaced by deployment specific values
             before being sent to the VIM.";
          reference
            "GS NFV IFA011: Section 7.1.6.7,
             VnfcConfigurableProperties Information element.";
      list virtual-compute-descriptor {
        key "id";
        description
          "Defines descriptors of virtual compute resources to be
           used by the VNF.";
        leaf id {
          type string;
          description
            "Unique identifier of this VirtualComputeDesc in the
             VNFD.";
          reference
            "GS NFV IFA011: Section 7.1.9.2, Information elements
             related to Virtual CPU.";
        }

        list logical-node {
            type string;
            description
              "Identifies this set of logical node requirements.";
            reference
              "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements
               Information elements.";

          list requirement-detail {
            key "key";

            leaf key {
              type string;
            }
            leaf value {
              type string;
            }
            description
              "The logical node-level compute, memory and I/O
               requirements. An array of key-value pairs that
               articulate the deployment requirements.

               This could include the number of CPU cores on this
               logical node, a memory configuration specific to a
               logical node (e.g. such as available in the Linux
               kernel via the libnuma library) or a requirement
               related to the association of an I/O device with the
               logical node.";
            reference
              "GS NFV IFA011: Section 7.1.9.6, LogicalNodeRequirements
               information element.";
            "The logical node requirements.";
            "GS NFV IFA011: Section 7.1.9.2, VirtualComputeDesc
             information element.";
        }

        list request-additional-capability {
          key "name";
          leaf name {
            type string;
            description
              "Identifies a requested additional capability for the
               VDU. ETSI GS NFV-IFA 002 [i.1] describes acceleration
               capabilities.";
            reference
              "GS NFV IFA011: Section 7.1.9.5,
               RequestedAdditionalCapabilityData Information
               element.";
          }
          leaf support-mandatory {
            type boolean;
            description
              "Indicates whether the requested additional capability
               is mandatory for successful operation.";
            reference
              "GS NFV IFA011: Section 7.1.9.5,
               RequestedAdditionalCapabilityData Information
               element.";
          }

          leaf min-version {
            type string;
            description
              "Identifies the minimum version of the requested
               additional capability.";
            reference
              "GS NFV IFA011: Section 7.1.9.5,
               RequestedAdditionalCapabilityData Information
               element.";
          }

          leaf preferred-version {
            type string;
            description
              "Identifies the preferred version of the requested
               additional capability.";
            reference
              "GS NFV IFA011: Section 7.1.9.5,
               RequestedAdditionalCapabilityData Information
               element.";
          }
          list target-performance-parameters {
            key "key";
            leaf key {
              type string;
            }
            leaf value {
              type string;
            }
            description
              "Identifies specific attributes, dependent on the
               requested additional capability type.";
            reference
              "GS NFV IFA011: Section 7.1.9.5,
               RequestedAdditionalCapabilityData Information
               element.";
          }
        }

        leaf compute-requirements {
          type string;
          description
            "Specifies compute requirements.";
          reference
            "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc
             Information element.";
        }

        container virtual-memory {
          leaf size {
            type decimal64 {
              fraction-digits 1;
              range "0..max";
            }
            units "Gb";
            mandatory true;
            description
              "Amount of virtual memory in MB.";
            reference
              "GS NFV IFA011: Section 7.1.9.3, Information elements
               related to Virtual Memory.";
          }
          leaf over-subscription-policy {
            type string;
            description
              "The memory core oversubscription policy in terms of
               virtual memory to physical memory on the platform.
               The cardinality can be 0 during the allocation
               request, if no particular value is requested.";
            reference
              "GS NFV IFA011: Section 7.1.9.3, Information elements
               related to Virtual Memory.";
          }
          list vdu-mem-requirements {
            key "key";
            leaf key {
              type string;
            }
            leaf value {
              type string;
            }
            description
              "Array of key-value pair requirements on the memory for
               the VDU.";
            reference
              "GS NFV IFA011: Section 7.1.9.3.2, VirtualMemoryData
               information element.";
          }

          leaf numa-enabled {
            type boolean;
            description
              "It specifies the memory allocation to be cognisant of
               the relevant process/core allocation. The cardinality
               can be 0 during the allocation request, if no
               particular value is requested.";
            reference
              "GS NFV IFA011: Section 7.1.9.3, Information elements
               related to Virtual Memory.";
          }
          description
            "The virtual memory of the virtualised compute.";
          reference
            "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc
             Information element.";
        }
        container virtual-cpu {
          description
            "The virtual CPU(s)of the virtualised compute.";
          reference
            "GS NFV IFA011: Section 7.1.9.2.2, VirtualComputeDesc
             Information element.";

          leaf cpu-architecture {
            type string;
            description
              "CPU architecture type. Examples are x86, ARM. The
               cardinality can be 0 during the allocation request,
               if no particular CPU architecture type is requested.";
            reference
              "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData
               information elements.";
          }
          leaf num-virtual-cpu {
            type uint16 {
              range "1..max";
            }
            mandatory true;
            description
              "Number of virtual CPUs.";
            reference
              "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData
               information elements.";
          }
          leaf clock {
            type uint32;
            units "MHz";
            description
              "Minimum virtual CPU clock rate (e.g. in MHz). The
               cardinality can be 0 during the allocation request,
               if no particular value is requested.";
            reference
              "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData
               information elements.";
          }
          leaf oversubscription-policy {
            type string;
            description
              "The CPU core oversubscription policy e.g. the relation
               of virtual CPU cores to physical CPU cores/threads.
               The cardinality can be 0 during the allocation request,
               if no particular value is requested.";
            reference
              "GS NFV IFA011: Section 7.1.9.2.3, VirtualCpuData
               information elements.";
          }
          list vdu-cpu-requirements {
            key "key";
            leaf key {
              type string;
            }
            leaf value {
              type string;
            }
            description
              "Array of key-value pair requirements on the compute
               (CPU) for the VDU.";
            reference
              "GS NFV IFA011: Section 7.1.9.3.2, VirtualCpuData
               information element.";
          }
          container virtual-cpu-pinning {
            presence "Set to specify CPU pinning.";
            leaf cpu-pinning-policy {
              mandatory true;
              type enumeration {
                enum "static";
                enum "dynamic";
              }
              description
                "Indicates the policy for CPU pinning. The policy can
                 take values of 'static' or 'dynamic'. The cardinality
                 can be 0 during the allocation request, if no
                 particular value is requested.";
            }
            container cpu-pinning-map {
              when "../nfv:cpu-pinning-policy = 'static'";
            }
            description
              "If cpuPinningPolicy is defined as 'static', the
               cpuPinningMap provides the map of pinning virtual
               CPU cores to physical CPU cores/threads. Cardinality
               is 0 if cpuPinningPolicy has a different value than
               'static'.";
          }
        }
      }
      list virtual-storage-descriptor {
        key "id";
        description
          "Storage requirements for a Virtual Storage instance
           attached to the VNFC created from this VDU";
        leaf id {
          type string;
          description
            "Unique identifier of this VirtualStorageDesc in the
             VNFD.";
          reference
            "GS NFV IFA011: Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }

        leaf type-of-storage {
          // Needed to be able to onboard images
          type enumeration {
            enum "root";
            enum "swap";
            enum "ephemeral";
          }
          mandatory true;
          description
            "Type of virtualised storage resource (e.g. volume,
             object).";
          reference
            "GS NFV IFA011: Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }
        leaf size-of-storage {
          type uint64;
          units "Gb";
          mandatory true;
          description
            "Size of virtualised storage resource (e.g. size of
             volume, in Gb)";
            "GS NFV IFA011: Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }
        list vdu-storage-requirements {
          key "key";
          leaf key {
            type string;
          }
          leaf value {
            type string;
          }
          description
            "Array of key-value pairs that articulate the storage
             deployment requirements.";
          reference
            "GS NFV IFA011: Section 7.1.9.4.2, VirtualStorageDesc
             information element.";
        }
        leaf rdma-enabled {
          type boolean;
          description
            "Indicate if the storage support RDMA.";
          reference
            "GS NFV IFA011: Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }
        leaf sw-image-desc {
          type leafref {
            path "../../sw-image-desc/id";
          must "../nfv:size-of-storage >=" +
            "../../nfv:sw-image-desc[id=current()]/min-disk" {
          }
          description
            "Software image to be loaded on the VirtualStorage
             resource created based on this VirtualStorageDesc.";
          reference
            "GS NFV IFA011: Section 7.1.9.4, Information elements
             related to Virtual Storage.";
        }
      }
      list sw-image-desc {
        key "id";
        description
          "Defines descriptors of software images to be used by the
           VNF.";
        reference
          "GS NFV IFA011: Section 7.1.2, VNFD Information element.";
        leaf id {
          type string;
          description
            "The identifier of this software image.";
          reference
            "GS NFV IFA011: Section 7.1.6.5, SwImageDesc
             information element";
        }
        leaf name {
          type string;
          description
            "The name of this software image.";
          reference
            "GS NFV IFA011: Section 7.1.6.5 SwImageDesc
             information element.";
        }
        leaf version {
          type string;
          description
            "The version of this software image.";
          reference
            "GS NFV IFA011: Section 7.1.6.5 SwImageDesc
             information element.";
        }
        leaf checksum {
          type string;
          description
            "The checksum of the software image file.";
          reference
            "GS NFV IFA011: Section 7.1.6.5 SwImageDesc
             information element.";
        }
        leaf container-format {
          mandatory true;
          type enumeration {
            enum "aki" {
              description
                "An Amazon kernel image.";
            }
            enum "ami" {
              description
                "An Amazon machine image.";
            }
            enum "ari" {
              description
                "An Amazon ramdisk image.";
            }
            enum "bare" {
              description
                "The image does not have a container or metadata
                 envelope.";
            }
            enum "docker" {
              description
                "A docker container format.";
            }
            enum "ova" {
              description
                "An OVF package in a tarfile.";
            }
            enum "ovf" {
              description
                "The OVF container format.";
            }
          }
          description