MEC010-2_AppLcm.json 126 KB
Newer Older
            "description": "Location of the MEC application instance. See note 5 and note 6.",
            "$ref": "#/components/schemas/LocationInformation"
          },
          "mcioInfo": {
            "type": "array",
            "description": "Information on the MCIO(s) representing application instance realized by one or a set of OS containers. See note 7.",
            "items": {
              "$ref": "#/components/schemas/McioInfo"
            }
        },
        "description": "'Information specific to an instantiated application. This attribute shall be present if the instantiationState attribute value is INSTANTIATED.'"
        "title": "OperationalState",
        "enum": ["STARTED", "STOPPED"],
        "type": "string",
        "description": "Operational state is applicable in the instantiation state INSTANTIATED",
        "examples": ["STARTED"]
        "title": "AppInstanceInfo.links",
        "required": ["self"],
        "type": "object",
            "type": "object",
            "description": "Self referring URI.",
            "$ref": "#/components/schemas/LinkType"
          },
          "instantiate": {
            "type": "object",
            "description": "Link to the \"instantiate\" task resource, if the related operation is possible based on the current status of this application instance resource (i.e. application instance in NOT_INSTANTIATED state). See note 3.",
            "$ref": "#/components/schemas/LinkType"
          },
          "terminate": {
            "type": "object",
            "description": "Link to the \"terminate\" task resource, if the related operation is possible based on the current status of this application instance resource (i.e. application instance is in INSTANTIATED state).",
            "$ref": "#/components/schemas/LinkType"
          },
          "operate": {
            "type": "object",
            "description": "Link to the \"operate\" task resource, if the related operation is supported for this application instance, and is possible based on the current status of this application instance resource (i.e. application instance is in INSTANTIATED state).",
            "$ref": "#/components/schemas/LinkType"
          },
          "configure_platform_for_app": {
            "type": "object",
            "description": "Link to the \"configure_platform_for_app\" task resource, if the related operation is supported for this application instance, and is possible based on the current status of this application instance resource (i.e. application instance is in INSTANTIATED state). See note 4",
            "$ref": "#/components/schemas/LinkType"
          }
        },
        "description": "Links to resources related to this resource."
        "title": "LcmOperation",
        "enum": ["INSTATIATE", "OPERATE", "TERMINATE"],
        "type": "string",
        "description": "Type of the actual LCM operation represented by this application instance LCM operation occurrence",
        "examples": ["INSTATIATE"]
      },
      "AppLcmOpOccNotification": {
        "title": "AppLcmOpOccNotification",
        "required": [
          "id",
          "notificationType",
          "operationType",
          "operationState",
          "subscriptionId",
          "timeStamp",
          "appLcmOpOccId",
          "appInstanceId",
          "_links"
        ],
        "type": "object",
            "type": "string",
            "description": "Identifier of this notification. If a notification is sent multiple times due to multiple subscriptions, the \"notificationId\" attribute of all these notifications shall have the same value."
            "type": "string",
            "description": "Discriminator for the different notification types. Shall be set to \"AppLcmOpOccStateChangeSubscription\" for this notification type."
          },
          "operationType": {
            "type": "string",
            "description": "Type of the LCM operation represented by this application instance LCM operation occurrence.",
            "enum": ["INSTANTIATE", "OPERATE", "TERMINATE"]
          },
          "operationState": {
            "type": "string",
            "description": "Operation state.",
            "enum": [
              "STARTING",
              "PROCESSING",
              "COMPLETED",
              "FAILED",
              "FAILED_TEMP"
            ]
            "type": "string",
            "description": "Identifier of the subscription related to this notification."
            "type": "object",
            "description": "Date and time of the notification generation.",
            "$ref": "#/components/schemas/TimeStamp"
          },
          "appLcmOpOccId": {
            "type": "string",
            "description": "Identifier of application lifecycle management operation occurrence."
            "type": "string",
            "description": "Identifier of application instance."
            "type": "object",
            "$ref": "#/components/schemas/AppLcmOpOccNotification.links"
          }
        },
        "description": "'This data type represents a notification related to state changes of an application LCM operation occurrence which informs the subscribers'"
      "AppInstanceIdentifierCreationNotification": {
        "title": "AppInstanceIdentifierCreationNotification",
        "required": [
          "id",
          "notificationType",
          "subscriptionId",
          "timeStamp",
          "appInstanceId",
          "_links"
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identifier of this notification. If a notification is sent multiple times due to multiple subscriptions, the \"notificationId\" attribute of all these notifications shall have the same value."
          },
          "notificationType": {
            "type": "string",
            "description": "Discriminator for the different notification types. Shall be set to \"AppIdentifierCreationSubscription\" for this notification type."
          },
          "subscriptionId": {
            "type": "string",
            "description": "Identifier of the subscription related to this notification."
          },
          "timeStamp": {
            "type": "object",
            "description": "Date and time of the notification generation.",
            "$ref": "#/components/schemas/TimeStamp"
          },
          "appInstanceId": {
            "type": "string",
            "description": "The created application instance Identifier."
            "type": "object",
            "description": "Links to resources related to this notification.",
            "$ref": "#/components/schemas/Notification._links"
          }
        }
      },
      "Notification._links": {
        "type": "object",
        "required": ["subscription", "appInstance"],
        "properties": {
          "subscription": {
            "type": "object",
            "description": "A link to the related subscription.",
            "$ref": "#/components/schemas/LinkType"
          },
          "appInstance": {
            "type": "object",
            "description": "Link to the resource representing the created application instance.",
            "$ref": "#/components/schemas/LinkType"
          }
        }
      },
      "AppInstanceIdentifierDeletionNotification": {
        "title": "AppInstanceIdentifierDeletionNotification",
        "required": [
          "id",
          "notificationType",
          "subscriptionId",
          "timeStamp",
          "appInstanceId",
          "_links"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identifier of this notification. If a notification is sent multiple times due to multiple subscriptions, the \"notificationId\" attribute of all these notifications shall have the same value."
          },
          "notificationType": {
            "type": "string",
            "description": "Discriminator for the different notification types. Shall be set to \"AppIdentifierDeletionSubscription\" for this notification type."
          },
          "subscriptionId": {
            "type": "string",
            "description": "Identifier of the subscription related to this notification."
          },
          "timeStamp": {
            "type": "object",
            "description": "Date and time of the notification generation.",
            "$ref": "#/components/schemas/TimeStamp"
          },
          "appInstanceId": {
            "type": "string",
            "description": "The deleted application instance Identifier."
            "type": "object",
            "description": "Links to resources related to this notification.",
            "$ref": "#/components/schemas/Notification._links"
          }
        }
      },
      "AppLcmOpOccNotification.links": {
        "title": "AppLcmOpOccNotification.links",
        "required": ["appInstance", "subscription", "appLcmOpOcc"],
        "type": "object",
        "properties": {
          "appInstance": {
            "type": "object",
            "$ref": "#/components/schemas/LinkType"
          },
          "subscription": {
            "type": "object",
            "$ref": "#/components/schemas/LinkType"
          },
          "appLcmOpOcc": {
            "type": "object",
            "$ref": "#/components/schemas/LinkType"
        },
        "description": "Links to resources related to this resource."
        "title": "InstantiateAppRequest",
        "required": ["selectedMECHostInfo"],
        "type": "object",
        "properties": {
          "locationConstraints": {
            "type": "object",
            "description": "Defines the location constraints for the application instance to be created. See note 3.",
            "$ref": "#/components/schemas/LocationConstraints"
          },
          "selectedMECHostInfo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MECHostInformation"
            },
            "description": "Describes the information of selected host for the application instance. See note 2.\n"
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VimConnectionInfo"
            },
            "description": "Information about VIM connections to be used for managing the resources for the application instance, or refer to external / externally-managed virtual links. This attribute shall only be supported and may be present if application-related resource management in direct mode is applicable. See note 2."
          },
          "virtualComputeDescriptor": {
            "type": "object",
            "items": {
              "$ref": "#/components/schemas/VirtualComputeDescriptor"
            },
            "description": "Describes CPU and memory requirements, as well as optional additional requirements, such as disk and acceleration related capabilities, of the single VM to realize the application\ninstance to be created. See note 1 and note 4.\n"
          },
          "osContainerDescriptor": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OsContainerDescriptor"
            },
            "description": "Describes CPU, memory requirements and limits, and software images of the OS Containers realizing this MEC application corresponding to OS Containers sharing the \nsame host and same network namespace. See note 1, note 4 and note 5.\n"
          },
          "virtualStorageDescriptor": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VirtualStorageDescriptor"
            "description": "Defines descriptors of virtual storage resources to be used by the application instance to be created. See note 1.\n"
          },
          "appTermCandsForCoord": {
            "type": "object",
            "items": {
              "$ref": "#/components/schemas/AppTermCandsForCoord"
            },
            "description": "Provides sets of applications as termination  candidate alternatives that the MEO/MEAO shall select from when utilizing the coordinate LCM operation exchange in pre-emption situations (see step 3 in clause 5.3.1). If this attribute is omitted, the MEO/MEAO shall make its own selection for the coordinate LCM operation exchange. See note 3."
        },
        "description": "NOTE 1: This attribute may be provided in the InstantiateAppRequest structure to override the same attribute in the AppD.\nNOTE 2: This field applies to Mm3 reference point only.\nNOTE 3: This field applies to Mm1 reference point only.\nNOTE 4: Only one of virtualComputeDescriptor or osContainerDescriptor shall be present.\nNOTE 5: This attribute reflects the ETSI NFV interpretation of the cloud native workloads.\n"
      },
      "AppTermCandsForCoord": {
        "type": "object",
        "required": ["terminationOptions"],
        "properties": {
          "terminationOptions": {
            "type": "array",
            "description": "Sets of application options for the MEO/MEAO to select from as candidates for termination. The MEO/MEAO shall select one or more of these alternate options to pass to the OSS when utilizing the LCM coordination exchange in pre-emption situations. For each option, the MEO/MEAO may select all, or a subset, of the candidate set's members.",
            "items": {
              "$ref": "#/components/schemas/AppTermCandsForCoord.terminationOptions"
            }
          }
        }
      },
      "VirtualStorageDescriptor": {
        "type": "object",
        "required": ["id", "typeOfStorage"],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of this VirtualStorageDesc in the VNFD."
          },
          "typeOfStorage": {
            "type": "string",
            "description": "Type of virtualised storage resource.",
            "enum": ["BLOCK", "OBJECT", "FILE"]
          },
          "blockStorageData": {
            "type": "object",
            "$ref": "#/components/schemas/BlockStorageData",
            "description": "Details of block storage."
          },
          "objectStorageData": {
            "type": "object",
            "$ref": "#/components/schemas/ObjectStorageData",
            "description": "Details of object storage."
          },
          "fileStorageData": {
            "type": "object",
            "$ref": "#/components/schemas/FileStorageData",
            "description": "Details of file storage."
          },
          "nfviMaintenanceInfo": {
            "type": "object",
            "$ref": "#/components/schemas/NfviMaintenanceInfo",
            "description": "Information on the rules to be observed during NFVI operation and maintenance."
          },
          "perVnfcInstance": {
            "type": "boolean",
            "description": "Indicates whether the virtual storage resource shall be instantiated per VNFC instance."
          }
        }
      },
      "NfviMaintenanceInfo": {
        "type": "object",
        "required": ["impactNotificationLeadTime"],
        "properties": {
          "impactNotificationLeadTime": {
            "type": "number",
            "description": "The minimum notification lead time requested for upcoming impact of the virtualised resource or their group."
          },
          "isImpactMitigationRequested": {
            "type": "boolean",
            "description": "When set to True, it is requested that at the time of the notification of an upcoming change that is expected to have an impact on the VNF, virtualised resource(s) of the same characteristics as the impacted ones is/are provided to compensate for the impact."
          },
          "supportedMigrationType": {
            "type": "array",
            "description": "Applicable to VirtualComputeDesc and VirtualStorageDesc. When present, specifies the allowed migration types in the order of preference in case of an impact starting with the most preferred type. For LIVE_MIGRATION, see note 1.",
            "items": {
              "type": "string",
              "enum": ["NO_MIGRATION", "OFFLINE_MIGRATION", "LIVE_MIGRATION"]
            }
          },
          "maxUndetectableInterruptionTime": {
            "type": "number",
            "description": "Applicable to VirtualComputeDesc and VirtualStorageDesc. When present, it specifies the maximum interruption time that can go undetected at the VNF level and therefore which will not trigger VNF-internal recovery during live migration. (see note 1)"
          },
          "minRecoveryTimeBetweenImpacts": {
            "type": "number",
            "description": "When present, it specifies the time required by the group to recover from an impact, thus, the minimum time requested between consecutive impacts of the group. (see note 2.)"
          },
          "maxNumberOfImpactedInstances": {
            "type": "object",
            "$ref": "#/components/schemas/MaxNumberOfImpactedInstances",
            "description": "When present, specifies for different group sizes the maximum number of instances that can be impacted simultaneously within the group of virtualised resources without losing functionality. Zero cardinality indicates no constraint (see note 2). MaxNumberOfImpactedInstances is defined in clause 7.1.8.18. See note 3."
          },
          "minNumberOfPreservedInstances": {
            "type": "object",
            "$ref": "#/components/schemas/MinNumberOfPreservedInstances",
            "description": "When present, specifies for different group sizes the minimum number of instances which need to be preserved simultaneously within the group of virtualised resources. Zero cardinality indicates no constraint (see note 2). MinNumberOfPreservedInstances is defined in clause 7.1.8.22.See note 3."
          }
        },
        "description": "NOTE 1: When the maximum undetectable interruption time is specified it constrains the live migration. If it cannot be\nguaranteed on an NFVI that the interruption caused by the live migration will be less than the indicated\nmaximum undetectable interruption time, then life migration should be downgraded according to the order of preference.\nNOTE 2: Impacts to instances of the group happening within the minimum recovery time are considered simultaneous\nimpacts.\nNOTE 3: Either \"maxNumberOfImpactedInstances\" or \"minNumberOfPreservedInstances\" may be provided, but not both\n"
      },
      "MaxNumberOfImpactedInstances": {
        "type": "object",
        "required": ["maxNumberOfImpactedInstances"],
        "properties": {
          "groupSize": {
            "type": "integer",
            "description": "Determines the size of the group for which the maxNumberOfImpactedInstances is specified."
          },
          "maxNumberOfImpactedInstances": {
            "type": "integer",
            "description": "The maximum number of instances that can be impacted simultaneously within the group of the specified size."
          }
        },
        "description": "NOTE 1: Each groupSize value specified for a group of virtual resources shall be unique, and it shall be possible to form an ascending ordered list of groupSizes. \nNOTE 2: The number of instances in the group for which the maxNumberOfImpactedInstances is specified may be equal to groupSize or less. When the number of instances is less than   \n            the groupSize, it shall be at least 1 if this is the first groupSize in the ordered list of groupSizes, or it shall be greater by at least 1 than the previous groupSize in the ordered list of groupSizes.\n"
      },
      "CommunicationInterface": {
        "type": "object",
        "properties": {
          "ipAddresses": {
            "type": "array",
            "description": "Entry point information of the service as one or more pairs of IP address and port.",
            "items": {
              "$ref": "#/components/schemas/ipAddresses"
            }
          }
        }
      },
      "ipAddresses": {
        "type": "object",
        "required": ["host", "port"],
        "properties": {
          "host": {
            "type": "string",
            "description": "Host portion of the address."
          },
          "port": {
            "type": "integer",
            "description": "Port portion of the address."
          }
        }
      },
      "MinNumberOfPreservedInstances": {
        "type": "object",
        "required": ["minNumberOfPreservedInstances"],
        "properties": {
          "groupSize": {
            "type": "integer",
            "description": "When present, determines the size of the group for which the minNumberOfPreservedInstances is specified. Otherwise, the size is not limited."
          },
          "minNumberOfPreservedInstances": {
            "type": "integer",
            "description": "The minimum number of instances which need to be preserved simultaneously within the group of the specified size."
          }
        },
        "description": "NOTE 1: Each groupSize value specified for a group of virtual resources shall be unique, and it shall be possible to form \n            an ascending ordered list of groupSizes. \nNOTE 2: The number of instances in the group for which the minNumberOfPreservedInstances is specified may be equal \n        to groupSize or less.\n"
      },
      "FileStorageData": {
        "type": "object",
        "required": [
          "sizeOfStorage",
          "fileSystemProtocol",
          "intVirtualLinkDesc"
        "properties": {
          "sizeOfStorage": {
            "type": "number",
            "description": "Size of virtualised storage resource in GB."
          },
          "fileSystemProtocol": {
            "type": "string",
            "description": "The shared file system protocol (e.g. NFS, CIFS)."
          },
          "intVirtualLinkDesc": {
            "type": "object",
            "$ref": "#/components/schemas/VnfVirtualLinkDesc",
            "description": "Reference of the internal VLD which this file storage connects to."
          }
        }
      },
      "VnfVirtualLinkDesc": {
        "type": "object",
        "required": [
          "virtualLinkDescId",
          "virtualLinkDescFlavour",
          "connectivityType"
        ],
        "properties": {
          "virtualLinkDescId": {
            "type": "string",
            "description": "Unique identifier of this internal VLD in VNFD."
          },
          "virtualLinkDescFlavour": {
            "type": "array",
            "description": "Describes a specific flavour of the VL with specific bitrate requirements.",
            "items": {
              "$ref": "#/components/schemas/VirtualLinkDescFlavour"
            }
          },
          "connectivityType": {
            "type": "object",
            "description": "See clause 7.1.7.3.",
            "$ref": "#/components/schemas/ConnectivityType"
          },
          "testAccess": {
            "type": "array",
            "description": "Specifies test access facilities expected on the VL.",
            "items": {
              "type": "string",
              "example": "passive monitoring"
            }
          },
          "description": {
            "type": "string",
            "description": "Provides human-readable information on the purpose of the VL.",
            "example": "control plane traffic"
          },
          "monitoringParameter": {
            "type": "array",
            "description": "Specifies the virtualised resource related performance metrics on VLD level to be tracked by the VNFM.",
            "items": {
              "$ref": "#/components/schemas/MonitoringParameter"
            }
          },
          "nfviMaintenanceInfo": {
            "type": "object",
            "description": "When present, provides information on the rules to be observed when an instance based on this VnfVirtualLinkDesc is impacted during NFVI operation and maintenance (e.g. NFVI resource upgrades). NfviMaintenanceInfo is defined in clause 7.1.8.17.",
            "$ref": "#/components/schemas/NfviMaintenanceInfo"
          },
          "externallyManaged": {
            "type": "string",
            "description": "Specifies the intent of the VNF designer with respect to the internal VL instances created from this descriptor being externally managed.",
            "enum": ["REQUIRED", "ALLOWED"],
            "default": "ALLOWED"
          }
        }
      },
      "ConnectivityType": {
        "type": "object",
        "required": ["layerProtocol"],
        "properties": {
          "layerProtocol": {
            "type": "array",
            "description": "Specifies the protocols that the VL uses See note 1 and note 2.\n",
            "items": {
              "type": "string",
              "enum": [
                "Ethernet",
                "MPLS",
                "ODU2",
                "IPV4",
                "IPV6",
                "Pseudo-Wire",
                "Etc"
              ]
            },
            "minItems": 1
          },
          "flowPattern": {
            "type": "string",
            "description": "Specifies the flow pattern of the connectivity (Line, Tree, Mesh, etc.)."
          }
        },
        "description": "NOTE 1 The top layer protocol of the VL protocol stack shall always be provided. The lower layer protocols may be included when there are specific requirements on these layers. \nNOTE 2  If more than 1 values are present, the first value represents the highest layer protocol data, and the last value represents the lowest layer protocol data. \n"
      },
      "VirtualLinkDescFlavour": {
        "type": "object",
        "required": ["flavourId"],
        "properties": {
          "flavourId": {
            "type": "string",
            "description": "Identifies a flavour within a VnfVirtualLinkDesc."
          },
          "qos": {
            "type": "object",
            "$ref": "#/components/schemas/QoS",
            "description": "QoS of the VL."
          }
        }
      },
      "QoS": {
        "type": "object",
        "required": ["latency", "packetDelayVariation"],
        "properties": {
          "latency": {
            "type": "number",
            "description": "Latency of the VL in milliseconds."
          },
          "packetDelayVariation": {
            "type": "number",
            "description": "Packet delay variation of the VL in milliseconds."
          },
          "packetLossRatio": {
            "type": "number",
            "description": "Packet loss ratio of the VL in percentage."
          }
        }
      },
      "ObjectStorageData": {
        "type": "object",
        "properties": {
          "maxSizeOfStorage": {
            "type": "number",
            "description": "Max size of virtualised storage resource in GB."
          }
        }
      },
      "AppTermCandsForCoord.terminationOptions": {
        "type": "object",
        "required": ["appInstIdTerminationCands"],
        "properties": {
          "appInstIdTerminationCands": {
            "type": "array",
            "description": "List of application instance identifiers, constituting a candidate set for termination.",
            "items": {
              "type": "string"
            }
        }
      },
      "LinkType": {
        "title": "LinkType",
        "required": ["href"],
        "type": "object",
        "properties": {
          "href": {
            "type": "string",
            "description": "URI referring to a resource"
      "OsContainerDescriptor": {
        "title": "OsContainerDescriptor",
        "type": "object",
        "required": ["osContainerDescId", "name", "description", "swImageDesc"],
        "properties": {
          "osContainerDescId": {
            "type": "string",
            "description": "Unique identifier of this OsContainerDesc in the VNFD."
          },
          "name": {
            "type": "string",
            "description": "Human readable name of this OS container."
          },
          "description": {
            "type": "string",
            "description": "Human readable description of this OS container."
          },
          "requestedCpuResources": {
            "type": "integer",
            "description": "Number of CPU resources requested for the container (e.g. in milli-CPU-s)."
          },
          "requestedMemoryResources": {
            "type": "number",
            "description": "Amount of memory resources requested for the container (e.g. in MB)."
          },
          "requestedEphemeralStorageResources": {
            "type": "number",
            "description": "Size of ephemeral storage resources requested for the container (e.g. in GB)."
          },
          "extendedResourceRequests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyValuePairs"
            },
            "description": "An array of key-value pairs of extended resources required by the container see note."
          },
          "cpuResourceLimit": {
            "type": "integer",
            "description": "Number of CPU resources the container can maximally use (e.g. in milli-CPU)."
          },
          "memoryResourceLimit": {
            "type": "number",
            "description": "Amount of memory resources the container can maximally use (e.g. in MB)."
          },
          "ephemeralStorageResourceLimit": {
            "type": "number",
            "description": "Size of ephemeral storage resources the container can maximally use (e.g. in GB)."
          },
          "hugePageResources": {
            "type": "object",
            "description": "Specifies HugePages resources requested for the container, which the container can maximally use.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "cpuPinningRequirements": {
            "type": "object",
            "$ref": "#/components/schemas/VirtualCpuPinningData",
            "description": "Requirements for CPU pinning configuration for this OS container."
          },
          "swImageDesc": {
            "type": "object",
            "$ref": "#/components/schemas/SwImageDesc",
            "description": "Describes the software image realizing this OS container."
          },
          "bootData": {
            "type": "string",
            "description": "Contains a string or a URL to a file contained in the VNF package used to customize a container resource at boot time. The bootData may contain variable parts that are replaced by deployment specific values before being sent."
          },
          "monitoringParameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringParameter"
            },
            "description": "Specifies the virtualized resource related performance metrics on the OsContainerDesc level to be tracked by the VNFM."
          }
        }
      },
      "MonitoringParameter": {
        "type": "object",
        "required": ["monitoringParameterId", "performanceMetric"],
        "properties": {
          "monitoringParameterId": {
            "type": "string",
            "description": "Unique identifier of the monitoring parameter."
          },
          "name": {
            "type": "string",
            "description": "Human readable name of the monitoring parameter."
          },
          "performanceMetric": {
            "type": "string",
            "description": "Specifies the virtualised resource performance metric."
          },
          "collectionPeriod": {
            "type": "string",
            "description": "An attribute that describes the periodicity at which to collect the performance information."
          }
        }
      },
      "VirtualComputeDescriptor": {
        "title": "VirtualComputeDescriptor",
        "type": "object",
        "required": ["virtualComputeDescId", "virtualMemory", "virtualCpu"],
        "properties": {
          "virtualComputeDescId": {
            "type": "string",
            "description": "Unique identifier of this VirtualComputeDesc in the VNFD."
          },
          "logicalNode": {
            "type": "array",
            "description": "The logical node requirements.",
            "items": {
              "$ref": "#/components/schemas/LogicalNodeRequirements"
            }
          },
          "requestAdditionalCapabilities": {
            "type": "array",
            "description": "Specifies requirements for additional capabilities. These may be for a range of purposes. One example is acceleration related capabilities. See clause 7.1.9.5.",
            "items": {
              "$ref": "#/components/schemas/RequestedAdditionalCapabilityData"
            }
          },
          "computeRequirements": {
            "description": "Specifies compute requirements.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "not-specified"
            }
          },
          "virtualMemory": {
            "type": "object",
            "description": "The virtual memory of the virtualised compute. See clause 7.1.9.3.2.",
            "$ref": "#/components/schemas/VirtualMemoryData"
          },
          "virtualCpu": {
            "type": "object",
            "description": "The virtual CPU(s) of the virtualised compute. See clause 7.1.9.2.3.",
            "$ref": "#/components/schemas/VirtualCpuData"
          },
          "virtualDisk": {
            "type": "array",
            "description": "The local or ephemeral disk(s) of the virtualised compute. See clause 7.1.9.4.3.",
            "items": {
              "$ref": "#/components/schemas/BlockStorageData"
            }
          }
        }
      },
      "BlockStorageData": {
        "type": "object",
        "required": ["sizeOfStorage"],
        "properties": {
          "sizeOfStorage": {
            "type": "number",
            "description": "Size of virtualised storage resource in GB."
          },
          "vduStorageRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyValuePairs"
            "description": "An array of key-value pairs that articulate the storage deployment requirements."
          },
          "rdmaEnabled": {
            "type": "boolean",
            "description": "Indicate if the storage support RDMA."
          },
          "swImageDesc": {
            "type": "object",
            "$ref": "#/components/schemas/SwImageDesc",
            "description": "References the software image to be loaded on the VirtualStorage resource created\nbased on this VirtualStorageDesc. Shall be absent when used for virtual disks. See note.\n"
          }
        }
      },
      "SwImageDesc": {
        "type": "object",
        "required": ["id", "name", "version", "containerFormat", "swImage"],
        "properties": {
          "id": {
            "type": "string",
            "description": "The identifier of this software image."
          },
          "name": {
            "type": "string",
            "description": "The name of this software image."
          },
          "version": {
            "type": "string",
            "description": "The version of this software image."
          },
          "checksum": {
            "$ref": "#/components/schemas/ChecksumData",
            "description": "The checksum of the software image file. See note 3."
          },
          "containerFormat": {
            "type": "string",
            "description": "The container format describes the container file format in which software image is provided."
          },
          "diskFormat": {
            "type": "string",
            "description": "The disk format of a software image is the format of the underlying disk image. See note 1."
          },
          "minDisk": {
            "type": "number",
            "description": "The minimal disk size requirement for this software image. The value of the \"size of storage\" attribute of the VirtualStorageDesc referencing this SwImageDesc shall not be smaller than the value of minDisk. See note 1."
          },
          "minRam": {
            "type": "number",
            "description": "The minimal RAM requirement for this software image. The value of the \"size\" attribute of VirtualMemoryData of the Vdu referencing this SwImageDesc shall not be smaller than the value of minRam. See note 2."
          },
          "size": {
            "type": "number",
            "description": "The size of this software image file. See note 3."
          },
          "swImage": {
            "type": "object",
            "$ref": "#/components/schemas/SwImageDesc",
            "description": "This is a reference to the actual software image. The reference can be relative to the root of the VNF Package or can be a URL."
          },
          "operatingSystem": {
            "type": "string",
            "description": "Specifies the operating system used in the software image. This attribute may also identify if a 32 bit or 64 bit software image is used."
          },
          "supportedVirtualisationEnvironment": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Specifies the virtualisation environments (e.g. hypervisor) compatible with this software image."
          }
        },
        "description": "NOTE 1: The attribute shall be present for VM-based software images referenced from a Vdu or from a VirtualStorageDesc, and shall be absent otherwise.\nNOTE 2: The attribute may be present for VM-based software images referenced from a Vdu or from a VirtualStorageDesc, and shall be absent otherwise.\nNOTE 3: The attribute shall be present for VM-based software images referenced from a Vdu or from a VirtualStorageDesc, and may be present otherwise. \n"
      },
      "ChecksumData": {
        "type": "object",
        "required": ["algorithm", "hash"],
        "properties": {
          "algorithm": {
            "type": "string",
            "description": "Specifies the algorithm used to obtain the checksum value. See note."
          },
          "hash": {
            "type": "string",
            "description": "Contains the result of applying the algorithm indicated by the algorithm attribute to the data to which this ChecksumData refers.\n"
          }
        },
        "description": "NOTE: The algorithm attribute value shall be one of the Hash Function Textual Names present in [2].\n"
      },
      "LogicalNodeRequirements": {
        "type": "object",
        "required": ["id", "logicalNodeRequirementDetail"],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Identifies this set of logical node requirements"
          },
          "logicalNodeRequirementDetail": {
            "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.\n",
            "type": "array",
            "items": {
              "type": "string",
              "format": "not-specified"
            }
          }
        }
      },
      "RequestedAdditionalCapabilityData": {
        "type": "object",
        "required": [
          "requestedAdditionalCapabilityName",
          "supportMandatory",
          "targetPerformanceParameters"
        ],
        "properties": {
          "requestedAdditionalCapabilityName": {
            "type": "string",
            "description": "Specifies a requested additional capability for the VDU"
          },
          "supportMandatory": {
            "type": "boolean",
            "description": "Indicates whether the requested additional capability is mandatory for successful operation"
          },
          "minRequestedAdditionalCapabilityVersion": {
            "type": "string",
            "description": "Specifies the minimum version of the requested additional capability"
          },
          "preferredRequestedAdditionalCapabilityVersion": {
            "type": "string",
            "description": "Specifies the preferred version of the requested additional capability"
          },
          "targetPerformanceParameters": {
            "type": "array",
            "description": "Specifies specific attributes, dependent on the requested additional capability type.",
            "items": {
              "$ref": "#/components/schemas/KeyValuePairs"
      "KeyValuePairs": {
        "description": "This data type represents a list of key-value pairs. The order of the pairs in the list is not\nsignificant. In JSON, a set of key-value pairs is represented as an object. It shall comply with\nthe provisions defined in clause 4 of IETF RFC 8259.\n",
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      },
      "VirtualMemoryData": {
        "type": "object",
        "required": ["virtualMemSize"],
        "properties": {
          "virtualMemSize": {
            "type": "number",
            "description": "Amount of virtual memory in MB."
          },
          "virtualMemOversubscriptionPolicy": {
            "type": "string",
            "description": "The memory core oversubscription policy in terms of virtual memory to physical memory\non the platform. The cardinality can be 0 during the allocation request, if no particular\nvalue is requested.\n"
          },
          "vduMemRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyValuePairs"
            },
            "description": "Array of key-value pair requirements on the memory for the VDU."
          },
          "numaEnabled": {
            "type": "boolean",
            "description": "Specifies the memory allocation to be cognisant of the relevant process/core allocation."
          },
          "hugePagesRequirements": {
            "type": "string",
            "description": "Specifies requirements on the huge pages resources for the virtual memory."
          }
        }
      },
      "VirtualCpuData": {
        "type": "object",
        "required": ["numVirtualCpu"],
        "properties": {
          "cpuArchitecture": {
            "type": "string",
            "description": "CPU architecture type. Examples are x86, ARM."
          },
          "numVirtualCpu": {
            "type": "integer",
            "description": "Number of virtual CPUs."
          },
          "virtualCpuClock": {
            "type": "number",
            "description": "Minimum virtual CPU clock rate (e.g. in MHz)."
          },
          "virtualCpuOversubscriptionPolicy": {
            "type": "string",
            "description": "The CPU core oversubscription policy, e.g. the relation of virtual CPU cores to physical CPU cores/threads."
          },
          "vduCpuRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyValuePairs"
            },
            "description": "Array of key-value pair requirements on the Compute (CPU) for the VDU."
          },
          "virtualCpuPinning": {
            "$ref": "#/components/schemas/VirtualCpuPinningData"
          }
        }
      },
      "VirtualCpuPinningData": {
        "type": "object",
        "properties": {
          "virtualCpuPinningPolicy": {
            "type": "string",
            "description": "Indicates the policy for CPU pinning.",
            "enum": ["STATIC", "DYNAMIC"]
          },