{
  "id": "@itentialopensource/adapter-etsi_sol003",
  "type": "Adapter",
  "export": "EtsiSol003",
  "title": "Etsi_sol003",
  "src": "adapter.js",
  "roles": [
    "admin"
  ],
  "methods": [
    {
      "name": "iapUpdateAdapterConfiguration",
      "summary": "Updates the adapter configuration",
      "description": "Updates the adapter configuration file with the provided changes",
      "input": [
        {
          "name": "configFile",
          "type": "string",
          "info": "The name of the file to change",
          "required": true,
          "schema": {
            "title": "configFile",
            "type": "string"
          }
        },
        {
          "name": "changes",
          "type": "object",
          "info": "JSON object containing the configuration changes",
          "required": true,
          "schema": {
            "title": "changes",
            "type": "object"
          }
        },
        {
          "name": "entity",
          "type": "string",
          "info": "The entity in which the changes are being made",
          "required": false,
          "schema": {
            "title": "entity",
            "type": "string"
          }
        },
        {
          "name": "type",
          "type": "string",
          "info": "The type of file to change - action, schema, or mock",
          "required": false,
          "schema": {
            "title": "type",
            "type": "string"
          }
        },
        {
          "name": "action",
          "type": "string",
          "info": "The action to be changed",
          "required": false,
          "schema": {
            "title": "action",
            "type": "string"
          }
        },
        {
          "name" : "replace",
          "type": "boolean",
          "info": "True to replace entire mock data, false to merge/append",
          "required": false,
          "schema": {
            "title": "replace",
            "type" : "boolean"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapUpdateAdapterConfiguration"
      },
      "task": true
    },
    {
      "name": "iapSuspendAdapter",
      "summary": "Suspends the adapter",
      "description": "Suspends the adapter",
      "input": [
        {
          "name": "mode",
          "type": "enum",
          "enumerals": [
            "pause",
            "error"
          ],
          "info": "How incoming requests are handled. Defaults to 'pause'",
          "description": "How incoming requests are handled. Defaults to 'pause'",
          "schema": {
            "title": "mode",
            "type": "string"
          },
          "required": false
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the adapter suspended status",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapSuspendAdapter"
      },
      "task": true
    },
    {
      "name": "iapUnsuspendAdapter",
      "summary": "Unsuspends the adapter",
      "description": "Unsuspends the adapter",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the adapter suspended status",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapUnsuspendAdapter"
      },
      "task": true
    },
    {
      "name": "iapGetAdapterQueue",
      "summary": "Return the requests that are waiting in the queue if throttling is enabled",
      "description": "Return the requests that are waiting in the queue if throttling is enabled",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the adapter queue",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapGetAdapterQueue"
      },
      "task": true
    },
    {
      "name": "iapFindAdapterPath",
      "summary": "Provides the ability to see if a particular API path is supported by the adapter",
      "description": "Provides the ability to see if a particular API path is supported by the adapter",
      "input": [
        {
          "name": "apiPath",
          "type": "string",
          "info": "The API Path you want to check - make sure to not include base path and version",
          "description": "The API Path you want to check - make sure to not include base path and version",
          "schema": {
            "title": "apiPath",
            "type": "string"
          },
          "required": true
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapFindAdapterPath"
      },
      "task": true
    },
    {
      "name": "iapTroubleshootAdapter",
      "summary": "Runs troubleshoot script for adapter",
      "description": "Runs troubleshoot script for adapter",
      "input": [
        {
          "name": "props",
          "type": "object",
          "info": "Object containing configuration, healthcheck and auth properties {'connProps':{'host': 'api.service.com', 'base_path': '/', 'protocol': 'http', 'port': 443, 'version': 'v1'},'healthCheckEndpoint': '/healthcheck', 'auth': {'auth_method': 'no authentication', 'username': 'username', 'password': 'password'}}",
          "required": true,
          "schema": {
            "title": "props",
            "type": "object"
          }
        },
        {
          "name": "persistFlag",
          "type": "boolean",
          "info": "Whether the input properties should be saved",
          "required": true,
          "schema": {
            "title": "persistFlag",
            "type": "boolean"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the test results",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapTroubleshootAdapter"
      },
      "task": true
    },
    {
      "name": "iapRunAdapterHealthcheck",
      "summary": "Runs healthcheck script for adapter",
      "description": "Runs healthcheck script for adapter",
      "input": [],
      "output": {
        "name": "result",
        "type": "boolean",
        "description": "Whether healthcheck passed or failed",
        "schema": {
          "title": "result",
          "type": "boolean"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapRunAdapterHealthcheck"
      },
      "task": true
    },
    {
      "name": "iapRunAdapterConnectivity",
      "summary": "Runs connectivity check script for adapter",
      "description": "Runs connectivity check script for adapter",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the test results",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapRunAdapterConnectivity"
      },
      "task": true
    },
    {
      "name": "iapRunAdapterBasicGet",
      "summary": "Runs basicGet script for adapter",
      "description": "Runs basicGet script for adapter",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing the test results",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapRunAdapterBasicGet"
      },
      "task": true
    },
    {
      "name": "iapMoveAdapterEntitiesToDB",
      "summary": "Moves entities from an adapter into the IAP database",
      "description": "Moves entities from an adapter into the IAP database",
      "input": [],
      "output": {
        "name": "res",
        "type": "object",
        "description": "A JSON Object containing status, code and the response from the mongo transaction",
        "schema": {
          "title": "res",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapMoveAdapterEntitiesToDB"
      },
      "task": true
    },
    {
      "name": "iapDeactivateTasks",
      "summary": "Deactivate the inputted tasks",
      "description": "Deactivate the inputted tasks",
      "input": [
        {
          "name": "tasks",
          "type": "array",
          "description": "Tasks to deactivate",
          "schema": {
            "title": "tasks",
            "type": "array"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing success status",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapDeactivateTasks"
      },
      "task": true
    },
    {
      "name": "iapActivateTasks",
      "summary": "Activate the inputted tasks",
      "description": "activate the inputted tasks",
      "input": [
        {
          "name": "tasks",
          "type": "array",
          "description": "Tasks to activate",
          "schema": {
            "title": "tasks",
            "type": "array"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing success status",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapActivateTasks"
      },
      "task": true
    },
    {
      "name": "iapPopulateEntityCache",
      "summary": "Populate the cache for the given entities",
      "description": "Populate the cache for the given entities",
      "input": [
        {
          "name": "entityTypes",
          "type": "array",
          "info": "the entity type(s) to populate",
          "required": true,
          "schema": {
            "title": "entityTypes",
            "type": "array"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapPopulateEntityCache"
      },
      "task": true
    },
    {
      "name": "iapRetrieveEntitiesCache",
      "summary": "Retrieves data from cache for specified entity type",
      "description": "Retrieves data from cache for specified entity type",
      "input": [
        {
          "name": "entityType",
          "type": "string",
          "info": "entity of which to retrieve",
          "required": true,
          "schema": {
            "title": "entityType",
            "type": "string"
          }
        },
        {
          "name": "options",
          "type": "object",
          "info": "settings of which data to return and how to return it",
          "required": false,
          "schema": {
            "title": "options",
            "type": "object"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapRetrieveEntitiesCache"
      },
      "task": true
    },
    {
      "name": "getDevice",
      "summary": "Get the Appliance",
      "description": "Get the Appliance",
      "input": [
        {
          "name": "deviceName",
          "type": "string",
          "info": "An Appliance Device Name",
          "required": true,
          "schema": {
            "title": "deviceName",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getDevice"
      },
      "task": false
    },
    {
      "name": "getDevicesFiltered",
      "summary": "Get Appliances that match the filter",
      "description": "Get Appliances that match the filter",
      "input": [
        {
          "name": "options",
          "type": "object",
          "info": "options - e.g. { 'start': 1, 'limit': 20, 'filter': { 'name': 'abc123' } }",
          "required": true,
          "schema": {
            "title": "options",
            "type": "object"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "array",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "array"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getDevicesFiltered"
      },
      "task": false
    },
    {
      "name": "isAlive",
      "summary": "Checks the status for the provided Appliance",
      "description": "Checks the status for the provided Appliance",
      "input": [
        {
          "name": "deviceName",
          "type": "string",
          "info": "An Appliance Device Name",
          "required": true,
          "schema": {
            "title": "deviceName",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "boolean",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "boolean"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/isAlive"
      },
      "task": false
    },
    {
      "name": "getConfig",
      "summary": "Gets a config for the provided Appliance",
      "description": "Gets a config for the provided Appliance",
      "input": [
        {
          "name": "deviceName",
          "type": "string",
          "info": "An Appliance Device Name",
          "required": true,
          "schema": {
            "title": "deviceName",
            "type": "string"
          }
        },
        {
          "name": "format",
          "type": "string",
          "info": "The format to be returned - this is ignored as we always return json",
          "required": false,
          "schema": {
            "title": "format",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getConfig"
      },
      "task": false
    },
    {
      "name": "iapGetDeviceCount",
      "summary": "Gets a device count from the system",
      "description": "Gets a device count from the system",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapGetDeviceCount"
      },
      "task": false
    },
    {
      "name": "iapExpandedGenericAdapterRequest",
      "summary": "Makes the requested generic call with additional options",
      "description": "Makes the requested generic call with additional options via metadata",
      "input": [
        {
          "name": "metadata",
          "type": "object",
          "info": "metadata for the call (optional)",
          "description": "metadata for the call - allows for many enhancements (optional)",
          "schema": {
            "title": "metadata",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "uriPath",
          "type": "string",
          "info": "the path of the api call - do not include the host, port, base path or version",
          "description": "the path of the api call",
          "schema": {
            "title": "uriPath",
            "type": "string"
          },
          "required": false
        },
        {
          "name": "restMethod",
          "type": "string",
          "info": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "description": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "schema": {
            "title": "restMethod",
            "type": "string"
          },
          "required": false
        },
        {
          "name": "pathVars",
          "type": "object",
          "info": "the parameters to be put within the url path (optional)",
          "description": "the parameters to be put within the url path (optional)",
          "schema": {
            "title": "pathVars",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "queryData",
          "type": "object",
          "info": "the query parameters to be put on the url (optional)",
          "description": "the query parameters to be put on the url (optional)",
          "schema": {
            "title": "queryData",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "requestBody",
          "type": "object",
          "info": "the payload to be sent with the request (optional)",
          "description": "the payload to be sent with the request (optional)",
          "schema": {
            "title": "requestBody",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "addlHeaders",
          "type": "object",
          "info": "additional headers to be put on the call (optional)",
          "description": "additional headers to be put on the call (optional)",
          "schema": {
            "title": "addlHeaders",
            "type": "object"
          },
          "required": false
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/iapExpandedGenericAdapterRequest"
      },
      "task": true
    },
    {
      "name": "genericAdapterRequest",
      "summary": "Makes the requested generic call",
      "description": "Makes the requested generic call",
      "input": [
        {
          "name": "uriPath",
          "type": "string",
          "info": "the path of the api call - do not include the host, port, base path or version",
          "description": "the path of the api call",
          "schema": {
            "title": "uriPath",
            "type": "string"
          },
          "required": true
        },
        {
          "name": "restMethod",
          "type": "string",
          "info": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "description": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "schema": {
            "title": "restMethod",
            "type": "string"
          },
          "required": true
        },
        {
          "name": "queryData",
          "type": "object",
          "info": "the query parameters to be put on the url (optional)",
          "description": "the query parameters to be put on the url (optional)",
          "schema": {
            "title": "queryData",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "requestBody",
          "type": "object",
          "info": "the payload to be sent with the request (optional)",
          "description": "the payload to be sent with the request (optional)",
          "schema": {
            "title": "requestBody",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "addlHeaders",
          "type": "object",
          "info": "additional headers to be put on the call (optional)",
          "description": "additional headers to be put on the call (optional)",
          "schema": {
            "title": "addlHeaders",
            "type": "object"
          },
          "required": false
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/genericAdapterRequest"
      },
      "task": true
    },
    {
      "name": "genericAdapterRequestNoBasePath",
      "summary": "Makes the requested generic call",
      "description": "Makes the requested generic call",
      "input": [
        {
          "name": "uriPath",
          "type": "string",
          "info": "the path of the api call - do not include the host, port, base path or version",
          "description": "the path of the api call",
          "schema": {
            "title": "uriPath",
            "type": "string"
          },
          "required": true
        },
        {
          "name": "restMethod",
          "type": "string",
          "info": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "description": "the rest method (GET, POST, PUT, PATCH, DELETE)",
          "schema": {
            "title": "restMethod",
            "type": "string"
          },
          "required": true
        },
        {
          "name": "queryData",
          "type": "object",
          "info": "the query parameters to be put on the url (optional)",
          "description": "the query parameters to be put on the url (optional)",
          "schema": {
            "title": "queryData",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "requestBody",
          "type": "object",
          "info": "the payload to be sent with the request (optional)",
          "description": "the payload to be sent with the request (optional)",
          "schema": {
            "title": "requestBody",
            "type": "object"
          },
          "required": false
        },
        {
          "name": "addlHeaders",
          "type": "object",
          "info": "additional headers to be put on the call (optional)",
          "description": "additional headers to be put on the call (optional)",
          "schema": {
            "title": "addlHeaders",
            "type": "object"
          },
          "required": false
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/genericAdapterRequestNoBasePath"
      },
      "task": true
    },
    {
      "name": "iapRunAdapterLint",
      "summary": "Run the adapter lint script to return the results",
      "description": "Run the adapter lint script to return the results",
      "input": [],
      "output": {
        "name": "result",
        "type": "string",
        "description": "A string containing the run results",
        "schema": {
          "title": "result",
          "type": "string"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "GET",
        "path": "/iapRunAdapterLint"
      },
      "task": true
    },
    {
      "name": "iapRunAdapterTests",
      "summary": "Run the adapter test scripts (baseunit and unit) to return the results",
      "description": "Run the adapter test scripts (baseunit and unit) to return the results",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "GET",
        "path": "/iapRunAdapterTests"
      },
      "task": true
    },
    {
      "name": "iapGetAdapterInventory",
      "summary": "Provide inventory information abbout the adapter",
      "description": "Provide inventory information abbout the adapter",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "GET",
        "path": "/iapGetAdapterInventory"
      },
      "task": true
    },
    {
      "name": "getApiVersions",
      "summary": "Retrieve API version information",
      "description": "The GET method reads API version information. This method shall follow the provisions specified in table 4.6.3.3.3.2-1 for request and response data structures, and response codes. URI query parameters are not supported.",
      "input": [],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents API version information.\n",
          "type": "object",
          "required": [
            "uriPrefix",
            "apiVersions"
          ],
          "properties": {
            "uriPrefix": {
              "description": "Specifies the URI prefix for the API, in the following form {apiRoot}/{apiName}/{apiMajorVersion}/.\n",
              "type": "string"
            },
            "apiVersions": {
              "description": "Version(s) supported for the API signaled by the uriPrefix attribute.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "description": "Identifies a supported version. The value of the version attribute shall be a version identifier as specified in clause 9.1 (SOL013).\n",
                    "type": "string"
                  },
                  "isDeprecated": {
                    "description": "If such information is available, this attribute indicates whether use of the version signaled by the version attribute is deprecated (true) or not (false).\nA deprecated version is still supported by the API producer but is recommended not to be used any longer. When a version is no longer supported, it does not appear in the response body.\n",
                    "type": "boolean"
                  },
                  "retirementDate": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "GET",
        "path": "/getApiVersions"
      },
      "task": true
    },
    {
      "name": "postSubscriptions",
      "summary": "Subscribe.\nThe POST method creates a new subscription.\nThis method shall follow the provisions spec",
      "description": "Subscribe.\nThe POST method creates a new subscription.\nThis method shall follow the provisions specified in the tables 11.4.2.3.1-1 and 11.4.2.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, a new \"Individual subscription\"\nresource as defined in clause 11.4.3 shall have been created. This method shall not\ntrigger any notification.\nCreation of two \"Individual subscription\" resources with the same callba...(description truncated)",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": "Details of the subscription to be created.: {\"filter\": {\"vimIds\": \"array\", \"resourceProviderIds\": \"array\", \"resourceTypes\": \"array\", \"resourceGroupIds\": \"array\"}, \"callbackUri\": \"string\", \"authentication\": {\"authType\": \"array\", \"paramsBasic\": {\"userName\": \"string\", \"password\": \"string\"}, \"paramsOauth2ClientCredentials\": {\"clientId\": \"string\", \"clientPassword\": \"string\", \"tokenEndpoint\": \"string\"}}}",
          "required": true,
          "schema": {
            "description": "This type represents a subscription request related to notifications related to the availability of the virtualised resources quotas.\n",
            "type": "object",
            "required": [
              "callbackUri"
            ],
            "properties": {
              "filter": {
                "description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
                "type": "object",
                "properties": {
                  "vimIds": {
                    "description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  },
                  "resourceProviderIds": {
                    "description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  },
                  "resourceTypes": {
                    "description": "Match particular resource types.\n",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "STORAGE",
                        "NETWORK"
                      ]
                    }
                  },
                  "resourceGroupIds": {
                    "description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "authentication": {
                "type": "object",
                "required": [
                  "authType"
                ],
                "properties": {
                  "authType": {
                    "description": "Defines the types of Authentication / Authorization which the API consumer is willing to accept when receiving a notification. Permitted values: * BASIC: In every HTTP request to the notification endpoint, use\n  HTTP Basic authentication with the client credentials. \n* OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the\n  notification endpoint, use an OAuth 2.0 Bearer token, obtained\n  using the client credentials grant type.\n* TLS_CERT: Every HTTP request to the notification endpoint is sent\n  over a mutually authenticated TLS session, i.e. not only the\n  server is authenticated, but also the client is authenticated\n  during the TLS tunnel setup.\n",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "BASIC",
                        "OAUTH2_CLIENT_CREDENTIALS",
                        "TLS_CERT"
                      ]
                    }
                  },
                  "paramsBasic": {
                    "description": "Parameters for authentication/authorization using BASIC. Shall be present if authType is \"BASIC\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "userName": {
                        "description": "Username to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      },
                      "password": {
                        "description": "Password to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      }
                    }
                  },
                  "paramsOauth2ClientCredentials": {
                    "description": "Parameters for authentication/authorization using OAUTH2_CLIENT_CREDENTIALS. Shall be present if authType is \"OAUTH2_CLIENT_CREDENTIALS\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "clientId": {
                        "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "clientPassword": {
                        "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "tokenEndpoint": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a subscription related to notifications related to the availability of the virtualised resources quotas.\n",
          "type": "object",
          "required": [
            "id",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "filter": {
              "description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
              "type": "object",
              "properties": {
                "vimIds": {
                  "description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                },
                "resourceProviderIds": {
                  "description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                },
                "resourceTypes": {
                  "description": "Match particular resource types.\n",
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "COMPUTE",
                      "STORAGE",
                      "NETWORK"
                    ]
                  }
                },
                "resourceGroupIds": {
                  "description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postSubscriptions"
      },
      "task": true
    },
    {
      "name": "getSubscriptions",
      "summary": "Query Subscription Information.\nThe GET method queries the list of active subscriptions of the func",
      "description": "Query Subscription Information.\nThe GET method queries the list of active subscriptions of the functional block that invokes the method.\nIt can be used e.g. for resynchronization after error situations.\nThis method shall follow the provisions specified in the tables 11.4.2.3.2-1 and 11.4.2.3.2-2\nfor URI query parameters, request and response data structures, and response codes.",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a subscription related to notifications related to the availability of the virtualised resources quotas.\n",
            "type": "object",
            "required": [
              "id",
              "callbackUri",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "filter": {
                "description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
                "type": "object",
                "properties": {
                  "vimIds": {
                    "description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  },
                  "resourceProviderIds": {
                    "description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  },
                  "resourceTypes": {
                    "description": "Match particular resource types.\n",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "STORAGE",
                        "NETWORK"
                      ]
                    }
                  },
                  "resourceGroupIds": {
                    "description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "_links": {
                "description": "Links for this resource\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getSubscriptions"
      },
      "task": true
    },
    {
      "name": "getSubscriptionsSubscriptionId",
      "summary": "Query Subscription Information.\nThe GET method reads an individual subscription.\nThis method shall",
      "description": "Query Subscription Information.\nThe GET method reads an individual subscription.\nThis method shall follow the provisions specified in the tables 11.4.3.3.2-1 and 11.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.",
      "input": [
        {
          "name": "subscriptionId",
          "type": "string",
          "info": "Identifier of this subscription.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\n...(description truncated): string",
          "required": true,
          "schema": {
            "title": "subscriptionId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a subscription related to notifications related to the availability of the virtualised resources quotas.\n",
          "type": "object",
          "required": [
            "id",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "filter": {
              "description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
              "type": "object",
              "properties": {
                "vimIds": {
                  "description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                },
                "resourceProviderIds": {
                  "description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                },
                "resourceTypes": {
                  "description": "Match particular resource types.\n",
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "COMPUTE",
                      "STORAGE",
                      "NETWORK"
                    ]
                  }
                },
                "resourceGroupIds": {
                  "description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getSubscriptionsSubscriptionId"
      },
      "task": true
    },
    {
      "name": "deleteSubscriptionsSubscriptionId",
      "summary": "Terminate subscription.\nThe DELETE method terminates an individual subscription.\nThis method shall",
      "description": "Terminate subscription.\nThe DELETE method terminates an individual subscription.\nThis method shall follow the provisions specified in the tables 11.4.3.3.5-1 and 11.4.3.3.5-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, the \"Individual subscription\" resource\nshall not exist any longer. This means that no notifications for that subscription shall be\nsent to the formerly-subscribed API consumer.\nNOTE:\tDue t...(description truncated)",
      "input": [
        {
          "name": "subscriptionId",
          "type": "string",
          "info": "Identifier of this subscription.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\n...(description truncated): string",
          "required": true,
          "schema": {
            "title": "subscriptionId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deleteSubscriptionsSubscriptionId"
      },
      "task": true
    },
    {
      "name": "getAlarms",
      "summary": "Get Alarm List.\nThe API consumer can use this method to retrieve information about the alarm list.\n",
      "description": "Get Alarm List.\nThe API consumer can use this method to retrieve information about the alarm list.\nThis method shall follow the provisions specified in the tables 7.4.2.3.2-1 and 7.4.2.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "The alarm data type encapsulates information about an alarm.\n",
          "type": "object",
          "required": [
            "id",
            "managedObjectId",
            "alarmRaisedTime",
            "ackState",
            "perceivedSeverity",
            "eventTime",
            "eventType",
            "probableCause",
            "isRootCause",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "managedObjectId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "rootCauseFaultyResource": {
              "description": "This type represents the faulty virtual resources that have a negative impact on a VNF.\n",
              "type": "object",
              "required": [
                "faultyResource",
                "faultyResourceType"
              ],
              "properties": {
                "faultyResource": {
                  "required": [
                    "resourceId"
                  ],
                  "type": "object",
                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                  "properties": {
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "vimLevelResourceType": {
                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                      "type": "string"
                    }
                  }
                },
                "faultyResourceType": {
                  "description": "The enumeration FaultyResourceType represents those types of faulty resource.\n",
                  "type": "string",
                  "enum": [
                    "COMPUTE",
                    "STORAGE",
                    "NETWORK"
                  ]
                }
              }
            },
            "alarmRaisedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmChangedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmClearedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmAcknowledgedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "ackState": {
              "description": "Acknowledgement state of the alarm. Permitted values: * UNACKNOWLEDGED * ACKNOWLEDGED.\n",
              "type": "string",
              "enum": [
                "UNACKNOWLEDGED",
                "ACKNOWLEDGED"
              ]
            },
            "perceivedSeverity": {
              "description": "Indicates the relative level of urgency for operator attention. * CRITICAL: The Critical severity level indicates that a service\n  affecting condition has occurred and an immediate corrective action\n  is required. Such a severity can be reported, for example, when a\n  managed object becomes totally out of service and its capability needs\n  to be restored (ITU-T Recommendation X.733).\n* MAJOR: The Major severity level indicates that a service affecting\n  condition has developed and an urgent corrective action is required.\n  Such a severity can be reported, for example, when there is a severe\n  degradation in the capability of the managed object and its full\n  capability needs to be restored (ITU-T Recommendation X.733).\n* MINOR: The Minor severity level indicates the existence of a\n  non-service affecting fault condition and that corrective action\n  should be taken in order to prevent a more serious (for example,\n  service affecting) fault. Such a severity can be reported, for\n  example, when the detected alarm condition is not currently degrading\n  the capacity of the managed object (ITU-T Recommendation X.733).\n* WARNING: The Warning severity level indicates the detection of a\n  potential or impending service affecting fault, before any significant\n  effects have been felt. Action should be taken to further diagnose (if\n  necessary) and correct the problem in order to prevent it from\n  becoming a more serious service affecting fault (ITU-T Recommendation\n  X.733).\n* INDETERMINATE: The Indeterminate severity level indicates that the\n  severity level cannot be determined (ITU-T Recommendation X.733).\n* CLEARED: The Cleared severity level indicates the clearing of one or\n  more previously reported alarms. This alarm clears all alarms for this\n  managed object that have the same Alarm type, Probable cause and\n  Specific problems (if given) (ITU-T Recommendation X.733).\n",
              "type": "string",
              "enum": [
                "CRITICAL",
                "MAJOR",
                "MINOR",
                "WARNING",
                "INDETERMINATE",
                "CLEARED"
              ]
            },
            "eventTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "eventType": {
              "description": "The enumeration EventType represents those types of events that trigger an alarm. * COMMUNICATIONS_ALARM: An alarm of this type is associated with the\n  procedure and/or process required conveying information from one point\n  to another (ITU-T Recommendation X.733).\n* PROCESSING_ERROR_ALARM: An alarm of this type is associated with a\n  software or processing fault (ITU-T Recommendation X.733).\n* ENVIRONMENTAL_ALARM: An alarm of this type is associated with a\n  condition related to an enclosure in which the equipment resides\n  (ITU-T Recommendation X.733).\n* QOS_ALARM: An alarm of this type is associated with degradation in the\n  quality of a service (ITU-T Recommendation X.733).\n* EQUIPMENT_ALARM: An alarm of this type is associated with an equipment\n  fault (ITU-T Recommendation X.733).\n",
              "type": "string",
              "enum": [
                "COMMUNICATIONS_ALARM",
                "PROCESSING_ERROR_ALARM",
                "ENVIRONMENTAL_ALARM",
                "QOS_ALARM",
                "EQUIPMENT_ALARM"
              ]
            },
            "faultType": {
              "description": "Additional information to clarify the type of the fault.\n",
              "type": "string"
            },
            "probableCause": {
              "description": "Information about the probable cause of the fault.\n",
              "type": "string"
            },
            "isRootCause": {
              "description": "Attribute indicating if this fault is the root for other correlated alarms. If true, then the alarms listed in the attribute \"correlatedAlarmIds\" are caused by this fault.\n",
              "type": "boolean"
            },
            "correlatedAlarmIds": {
              "description": "List of identifiers of other alarms correlated to this fault.\n",
              "type": "array",
              "items": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              }
            },
            "faultDetails": {
              "description": "Provides additional information about the fault.\n",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "objectInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getAlarms"
      },
      "task": true
    },
    {
      "name": "getAlarmsAlarmId",
      "summary": "The API consumer can use this method to read an individual alarm.\nThis method shall follow the prov",
      "description": "The API consumer can use this method to read an individual alarm.\nThis method shall follow the provisions specified in the tables 7.4.3.3.2-1 and 7.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "alarmId",
          "type": "string",
          "info": "Identifier of the alarm.\nThis identifier can be retrieved from the \"id\" attribute of the \"alarm\" attribute in the AlarmNotification or\nAlarmClearedNotification. It can al...(description truncated): string",
          "required": true,
          "schema": {
            "title": "alarmId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "The alarm data type encapsulates information about an alarm.\n",
          "type": "object",
          "required": [
            "id",
            "managedObjectId",
            "alarmRaisedTime",
            "ackState",
            "perceivedSeverity",
            "eventTime",
            "eventType",
            "probableCause",
            "isRootCause",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "managedObjectId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "rootCauseFaultyResource": {
              "description": "This type represents the faulty virtual resources that have a negative impact on a VNF.\n",
              "type": "object",
              "required": [
                "faultyResource",
                "faultyResourceType"
              ],
              "properties": {
                "faultyResource": {
                  "required": [
                    "resourceId"
                  ],
                  "type": "object",
                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                  "properties": {
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "vimLevelResourceType": {
                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                      "type": "string"
                    }
                  }
                },
                "faultyResourceType": {
                  "description": "The enumeration FaultyResourceType represents those types of faulty resource.\n",
                  "type": "string",
                  "enum": [
                    "COMPUTE",
                    "STORAGE",
                    "NETWORK"
                  ]
                }
              }
            },
            "alarmRaisedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmChangedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmClearedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "alarmAcknowledgedTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "ackState": {
              "description": "Acknowledgement state of the alarm. Permitted values: * UNACKNOWLEDGED * ACKNOWLEDGED.\n",
              "type": "string",
              "enum": [
                "UNACKNOWLEDGED",
                "ACKNOWLEDGED"
              ]
            },
            "perceivedSeverity": {
              "description": "Indicates the relative level of urgency for operator attention. * CRITICAL: The Critical severity level indicates that a service\n  affecting condition has occurred and an immediate corrective action\n  is required. Such a severity can be reported, for example, when a\n  managed object becomes totally out of service and its capability needs\n  to be restored (ITU-T Recommendation X.733).\n* MAJOR: The Major severity level indicates that a service affecting\n  condition has developed and an urgent corrective action is required.\n  Such a severity can be reported, for example, when there is a severe\n  degradation in the capability of the managed object and its full\n  capability needs to be restored (ITU-T Recommendation X.733).\n* MINOR: The Minor severity level indicates the existence of a\n  non-service affecting fault condition and that corrective action\n  should be taken in order to prevent a more serious (for example,\n  service affecting) fault. Such a severity can be reported, for\n  example, when the detected alarm condition is not currently degrading\n  the capacity of the managed object (ITU-T Recommendation X.733).\n* WARNING: The Warning severity level indicates the detection of a\n  potential or impending service affecting fault, before any significant\n  effects have been felt. Action should be taken to further diagnose (if\n  necessary) and correct the problem in order to prevent it from\n  becoming a more serious service affecting fault (ITU-T Recommendation\n  X.733).\n* INDETERMINATE: The Indeterminate severity level indicates that the\n  severity level cannot be determined (ITU-T Recommendation X.733).\n* CLEARED: The Cleared severity level indicates the clearing of one or\n  more previously reported alarms. This alarm clears all alarms for this\n  managed object that have the same Alarm type, Probable cause and\n  Specific problems (if given) (ITU-T Recommendation X.733).\n",
              "type": "string",
              "enum": [
                "CRITICAL",
                "MAJOR",
                "MINOR",
                "WARNING",
                "INDETERMINATE",
                "CLEARED"
              ]
            },
            "eventTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "eventType": {
              "description": "The enumeration EventType represents those types of events that trigger an alarm. * COMMUNICATIONS_ALARM: An alarm of this type is associated with the\n  procedure and/or process required conveying information from one point\n  to another (ITU-T Recommendation X.733).\n* PROCESSING_ERROR_ALARM: An alarm of this type is associated with a\n  software or processing fault (ITU-T Recommendation X.733).\n* ENVIRONMENTAL_ALARM: An alarm of this type is associated with a\n  condition related to an enclosure in which the equipment resides\n  (ITU-T Recommendation X.733).\n* QOS_ALARM: An alarm of this type is associated with degradation in the\n  quality of a service (ITU-T Recommendation X.733).\n* EQUIPMENT_ALARM: An alarm of this type is associated with an equipment\n  fault (ITU-T Recommendation X.733).\n",
              "type": "string",
              "enum": [
                "COMMUNICATIONS_ALARM",
                "PROCESSING_ERROR_ALARM",
                "ENVIRONMENTAL_ALARM",
                "QOS_ALARM",
                "EQUIPMENT_ALARM"
              ]
            },
            "faultType": {
              "description": "Additional information to clarify the type of the fault.\n",
              "type": "string"
            },
            "probableCause": {
              "description": "Information about the probable cause of the fault.\n",
              "type": "string"
            },
            "isRootCause": {
              "description": "Attribute indicating if this fault is the root for other correlated alarms. If true, then the alarms listed in the attribute \"correlatedAlarmIds\" are caused by this fault.\n",
              "type": "boolean"
            },
            "correlatedAlarmIds": {
              "description": "List of identifiers of other alarms correlated to this fault.\n",
              "type": "array",
              "items": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              }
            },
            "faultDetails": {
              "description": "Provides additional information about the fault.\n",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "objectInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getAlarmsAlarmId"
      },
      "task": true
    },
    {
      "name": "patchAlarmsAlarmId",
      "summary": "Acknowledge Alarm.\nThis method modifies an \"Individual alarm\" resource.\nThis method shall follow th",
      "description": "Acknowledge Alarm.\nThis method modifies an \"Individual alarm\" resource.\nThis method shall follow the provisions specified in the tables 7.4.3.3.4-1 and 7.4.3.3.4-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "alarmId",
          "type": "string",
          "info": "Identifier of the alarm.\nThis identifier can be retrieved from the \"id\" attribute of the \"alarm\" attribute in the AlarmNotification or\nAlarmClearedNotification. It can al...(description truncated): string",
          "required": true,
          "schema": {
            "title": "alarmId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "The VNF creation parameters: {\"ackState\": \"Must be one of [ACKNOWLEDGED, UNACKNOWLEDGED]\"}",
          "required": true,
          "schema": {
            "description": "This type represents attribute modifications for an \"Individual alarm\" resource, i.e. modifications to a resource representation based on the \"Alarm\" data type. The attributes of \"Alarm\" that can be modified are included in the \"AlarmModifications\" data type.\n",
            "type": "object",
            "required": [
              "ackState"
            ],
            "properties": {
              "ackState": {
                "description": "New value of the \"ackState\" attribute in \"Alarm\". Permitted values: * ACKNOWLEDGED * UNACKNOWLEDGED\n",
                "type": "string",
                "enum": [
                  "ACKNOWLEDGED",
                  "UNACKNOWLEDGED"
                ]
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents attribute modifications for an \"Individual alarm\" resource, i.e. modifications to a resource representation based on the \"Alarm\" data type. The attributes of \"Alarm\" that can be modified are included in the \"AlarmModifications\" data type.\n",
          "type": "object",
          "required": [
            "ackState"
          ],
          "properties": {
            "ackState": {
              "description": "New value of the \"ackState\" attribute in \"Alarm\". Permitted values: * ACKNOWLEDGED * UNACKNOWLEDGED\n",
              "type": "string",
              "enum": [
                "ACKNOWLEDGED",
                "UNACKNOWLEDGED"
              ]
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/patchAlarmsAlarmId"
      },
      "task": true
    },
    {
      "name": "getIndicators",
      "summary": "Get Indicator Value.\nThe GET method queries multiple VNF indicators.\nThis method shall follow the p",
      "description": "Get Indicator Value.\nThe GET method queries multiple VNF indicators.\nThis method shall follow the provisions specified in the tables 8.4.2.3.2-1 and 8.4.2.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a VNF indicator value.\n",
            "type": "object",
            "required": [
              "id",
              "value",
              "vnfInstanceId",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "name": {
                "description": "Human readable name of the indicator. Shall be present if defined in the VNFD.\n",
                "type": "string"
              },
              "value": {
                "description": "Provides the value of the indicator. The value format is defined in the VNFD. ETSI GS NFV-SOL 001 specifies the structure and format of the  VNFD based on TOSCA specifications.\n",
                "type": "object"
              },
              "vnfInstanceId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "_links": {
                "description": "Links for this resource.\n",
                "type": "object",
                "required": [
                  "self",
                  "vnfInstance"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "vnfInstance": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getIndicators"
      },
      "task": true
    },
    {
      "name": "getIndicatorsVnfInstanceId",
      "summary": "Get Indicator Value.\nThe GET method queries multiple VNF indicators related to a VNF instance.\nThis",
      "description": "Get Indicator Value.\nThe GET method queries multiple VNF indicators related to a VNF instance.\nThis method shall follow the provisions specified in the tables 8.4.3.3.2-1 and 8.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance to which the VNF indicator applies.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the resp...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a VNF indicator value.\n",
            "type": "object",
            "required": [
              "id",
              "value",
              "vnfInstanceId",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "name": {
                "description": "Human readable name of the indicator. Shall be present if defined in the VNFD.\n",
                "type": "string"
              },
              "value": {
                "description": "Provides the value of the indicator. The value format is defined in the VNFD. ETSI GS NFV-SOL 001 specifies the structure and format of the  VNFD based on TOSCA specifications.\n",
                "type": "object"
              },
              "vnfInstanceId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "_links": {
                "description": "Links for this resource.\n",
                "type": "object",
                "required": [
                  "self",
                  "vnfInstance"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "vnfInstance": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getIndicatorsVnfInstanceId"
      },
      "task": true
    },
    {
      "name": "getIndicatorsVnfInstanceIdIndicatorId",
      "summary": "Get Indicator Value.\nThe GET method reads a VNF indicator.\nThis method shall follow the provisions",
      "description": "Get Indicator Value.\nThe GET method reads a VNF indicator.\nThis method shall follow the provisions specified in the tables 8.4.4.3.2-1 and 8.4.4.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "indicatorId",
          "type": "string",
          "info": "Identifier of the VNF indicator.\nThis identifier can be retrieved from the resource referenced by the\npayload body in the response to a POST request creating a new \"Indiv...(description truncated): string",
          "required": true,
          "schema": {
            "title": "indicatorId",
            "type": "string"
          }
        },
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance to which the VNF indicator applies.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the resp...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF indicator value.\n",
          "type": "object",
          "required": [
            "id",
            "value",
            "vnfInstanceId",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier that is unique within a VNF descriptor.\n",
              "type": "string"
            },
            "name": {
              "description": "Human readable name of the indicator. Shall be present if defined in the VNFD.\n",
              "type": "string"
            },
            "value": {
              "description": "Provides the value of the indicator. The value format is defined in the VNFD. ETSI GS NFV-SOL 001 specifies the structure and format of the  VNFD based on TOSCA specifications.\n",
              "type": "object"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getIndicatorsVnfInstanceIdIndicatorId"
      },
      "task": true
    },
    {
      "name": "getIndicatorsSubscriptionsSubscriptionId",
      "summary": "Query Subscription Information.\nThe GET method reads an individual subscription.\nThis method shall",
      "description": "Query Subscription Information.\nThe GET method reads an individual subscription.\nThis method shall follow the provisions specified in the tables 8.4.6.3.2-1 and 8.4.6.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "subscriptionId",
          "type": "string",
          "info": "Identifier of this subscription.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\n...(description truncated): string",
          "required": true,
          "schema": {
            "title": "subscriptionId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a subscription related to notifications about VNF indicator value changes.\n",
          "type": "object",
          "required": [
            "id",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "filter": {
              "description": "This type represents a subscription filter for notifications related to VNF indicators. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
              "type": "object",
              "properties": {
                "vnfInstanceSubscriptionFilter": {
                  "description": "This type represents subscription filter criteria to match VNF instances.\n",
                  "type": "object",
                  "properties": {
                    "vnfdIds": {
                      "description": "If present, match VNF instances that were created based on a VNFD identified by one of the vnfdId values listed in this attribute. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
                      "type": "array",
                      "items": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    },
                    "vnfProductsFromProviders": {
                      "description": "If present, match VNF instances that belong to VNF products from certain providers. The attributes \"vnfdIds\" and \"vnfProductsFromProviders\" are alternatives to reference to VNF instances that are based on certain VNFDs in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "vnfProvider"
                        ],
                        "properties": {
                          "vnfProvider": {
                            "description": "Name of the VNF provider to match.\n",
                            "type": "string"
                          },
                          "vnfProducts": {
                            "description": "If present, match VNF instances that belong to VNF products with certain product names, from one particular provider.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "vnfProductName"
                              ],
                              "properties": {
                                "vnfProductName": {
                                  "description": "Name of the VNF product to match.\n",
                                  "type": "string"
                                },
                                "versions": {
                                  "description": "If present, match VNF instances that belong to VNF products with certain versions and a certain product name, from one particular provider.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "vnfSoftwareVersion"
                                    ],
                                    "properties": {
                                      "vnfSoftwareVersion": {
                                        "description": "A version.\n",
                                        "type": "string"
                                      },
                                      "vnfdVersions": {
                                        "description": "If present, match VNF instances that belong to VNF products with certain VNFD versions, a certain software version and a certain product name, from one particular provider.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "A version.\n",
                                          "type": "string"
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "vnfInstanceIds": {
                      "description": "If present, match VNF instances with an instance identifier listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
                      "type": "array",
                      "items": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    },
                    "vnfInstanceNames": {
                      "description": "If present, match VNF instances with a VNF Instance Name listed in this attribute. The attributes \"vnfInstanceIds\" and \"vnfInstanceNames\" are alternatives to reference to particular VNF Instances in a filter. They should not be used both in the same filter instance, but one alternative should be chosen.\n",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "notificationTypes": {
                  "description": "Match particular notification types. Permitted values: *\tVnfIndicatorValueChangeNotification *\tSupportedIndicatorsChangeNotification The permitted values of the \"notificationTypes\" attribute are spelled exactly as the names of the notification types to facilitate automated code generation systems.\n",
                  "type": "string",
                  "enum": [
                    "VnfIndicatorValueChangeNotification",
                    "SupportedIndicatorsChangeNotification"
                  ]
                },
                "indicatorIds": {
                  "description": "Match particular VNF indicator identifiers.\n",
                  "type": "array",
                  "items": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  }
                }
              }
            },
            "callbackUri": {
              "description": "The URI of the endpoint to send the notification to.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getIndicatorsSubscriptionsSubscriptionId"
      },
      "task": true
    },
    {
      "name": "deleteIndicatorsSubscriptionsSubscriptionId",
      "summary": "Terminate Subscription.\nThe DELETE method terminates an individual subscription.\nThis method shall",
      "description": "Terminate Subscription.\nThe DELETE method terminates an individual subscription.\nThis method shall follow the provisions specified in the tables 8.4.6.3.5-1 and 8.4.6.3.5-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, the \"Individual subscription\" resource\nshall not exist any longer. This means that no notifications for that subscription shall be\nsent to the formerly-subscribed API consumer.\n\n  NOTE: Due ...(description truncated)",
      "input": [
        {
          "name": "subscriptionId",
          "type": "string",
          "info": "Identifier of this subscription.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\n...(description truncated): string",
          "required": true,
          "schema": {
            "title": "subscriptionId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deleteIndicatorsSubscriptionsSubscriptionId"
      },
      "task": true
    },
    {
      "name": "postVnfInstances",
      "summary": "The POST method creates a new VNF instance resource based on a VNF package that is onboarded and in",
      "description": "The POST method creates a new VNF instance resource based on a VNF package that is onboarded and in\n\"ENABLED\" state.\nThis method shall follow the provisions specified in the tables 5.4.2.3.1-1 and 5.4.2.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, a new \"Individual VNF instance\"\nresource as defined in clause 5.4.3 shall have been created, and the value of the\n\"instantiationState\" attribute in the re...(description truncated)",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": "The VNF creation parameters: {\"vnfdId\": \"string\", \"vnfInstanceName\": \"string\", \"vnfInstanceDescription\": \"string\", \"metadata\": \"object\"}",
          "required": true,
          "schema": {
            "type": "object",
            "required": [
              "vnfdId"
            ],
            "properties": {
              "vnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfInstanceName": {
                "description": "Human-readable name of the VNF instance to be created.\n",
                "type": "string"
              },
              "vnfInstanceDescription": {
                "description": "Human-readable description of the VNF instance to be created.\n",
                "type": "string"
              },
              "metadata": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF instance.\n",
          "type": "object",
          "required": [
            "id",
            "vnfdId",
            "vnfProvider",
            "vnfProductName",
            "vnfSoftwareVersion",
            "vnfdVersion",
            "instantiationState"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfInstanceName": {
              "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfInstanceDescription": {
              "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfdId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfProvider": {
              "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfProductName": {
              "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfSoftwareVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfdVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfConfigurableProperties": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "vimConnectionInfo": {
              "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
              "type": "object",
              "additionalProperties": {
                "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                "type": "object",
                "required": [
                  "vimType"
                ],
                "properties": {
                  "vimId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimType": {
                    "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                    "type": "string"
                  },
                  "interfaceInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "accessInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "extra": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "instantiationState": {
              "description": "The instantiation state of the VNF.\n",
              "type": "string",
              "enum": [
                "NOT_INSTANTIATED",
                "INSTANTIATED"
              ]
            },
            "instantiatedVnfInfo": {
              "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
              "type": "object",
              "required": [
                "flavourId",
                "vnfState"
              ],
              "properties": {
                "flavourId": {
                  "description": "An identifier that is unique within a VNF descriptor.\n",
                  "type": "string"
                },
                "vnfState": {
                  "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                  "type": "string",
                  "enum": [
                    "STARTED",
                    "STOPPED"
                  ]
                },
                "scaleStatus": {
                  "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "maxScaleLevels": {
                  "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "extCpInfo": {
                  "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "cpdId",
                      "cpConfigId",
                      "cpProtocolInfo"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "cpdId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "cpConfigId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "cpProtocolInfo": {
                        "description": "Network protocol information for this CP.\n",
                        "type": "array",
                        "items": {
                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                          "type": "object",
                          "required": [
                            "layerProtocol"
                          ],
                          "properties": {
                            "layerProtocol": {
                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                              "type": "string",
                              "enum": [
                                "IP_OVER_ETHERNET"
                              ]
                            },
                            "ipOverEthernet": {
                              "description": "This type represents information about a network address that has been assigned.\n",
                              "type": "object",
                              "properties": {
                                "macAddress": {
                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                  "type": "string"
                                },
                                "segmentationId": {
                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                  "type": "string"
                                },
                                "ipAddresses": {
                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "type"
                                    ],
                                    "properties": {
                                      "type": {
                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                        "type": "string",
                                        "enum": [
                                          "IPV4",
                                          "IPV6"
                                        ]
                                      },
                                      "addresses": {
                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                          "type": "string"
                                        }
                                      },
                                      "isDynamic": {
                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                        "type": "boolean"
                                      },
                                      "addressRange": {
                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "object",
                                        "required": [
                                          "minAddress",
                                          "maxAddress"
                                        ],
                                        "properties": {
                                          "minAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          },
                                          "maxAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "subnetId": {
                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "extLinkPortId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "associatedVnfcCpId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "associatedVnfVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "extVirtualLinkInfo": {
                  "description": "Information about the external VLs the VNF instance is connected to.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "resourceHandle",
                      "currentVnfExtCpData"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "extLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            }
                          }
                        }
                      },
                      "currentVnfExtCpData": {
                        "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents configuration information for external CPs created from a CPD.\n",
                          "type": "object",
                          "required": [
                            "cpdId"
                          ],
                          "properties": {
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "cpConfig": {
                              "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                              "type": "object",
                              "additionalProperties": {
                                "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                "anyOf": [
                                  {
                                    "required": [
                                      "linkPortId"
                                    ]
                                  },
                                  {
                                    "required": [
                                      "cpProtocolData"
                                    ]
                                  }
                                ],
                                "type": "object",
                                "properties": {
                                  "parentCpConfigId": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  },
                                  "linkPortId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "cpProtocolData": {
                                    "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                    "type": "array",
                                    "items": {
                                      "description": "This type represents network protocol data.\n",
                                      "type": "object",
                                      "required": [
                                        "layerProtocol"
                                      ],
                                      "properties": {
                                        "layerProtocol": {
                                          "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                          "type": "string",
                                          "enum": [
                                            "IP_OVER_ETHERNET"
                                          ]
                                        },
                                        "ipOverEthernet": {
                                          "description": "This type represents network address data for IP over Ethernet.\n",
                                          "type": "object",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "macAddress"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddresses"
                                              ]
                                            }
                                          ],
                                          "oneOf": [
                                            {
                                              "required": [
                                                "fixedAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "numDynamicAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddressRange"
                                              ]
                                            }
                                          ],
                                          "properties": {
                                            "macAddress": {
                                              "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                              "type": "string"
                                            },
                                            "segmentationId": {
                                              "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                              "type": "string"
                                            },
                                            "ipAddresses": {
                                              "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "required": [
                                                  "type"
                                                ],
                                                "properties": {
                                                  "type": {
                                                    "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IPV4",
                                                      "IPV6"
                                                    ]
                                                  },
                                                  "fixedAddresses": {
                                                    "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "array",
                                                    "items": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  },
                                                  "numDynamicAddresses": {
                                                    "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "integer"
                                                  },
                                                  "addressRange": {
                                                    "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                    "type": "object",
                                                    "required": [
                                                      "minAddress",
                                                      "maxAddress"
                                                    ],
                                                    "properties": {
                                                      "minAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      },
                                                      "maxAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  },
                                                  "subnetId": {
                                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "extManagedVirtualLinkInfo": {
                  "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "extManagedMultisiteVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "monitoringParameters": {
                  "description": "Active monitoring parameters.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "performanceMetric"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "name": {
                        "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                        "type": "string"
                      },
                      "performanceMetric": {
                        "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "localizationLanguage": {
                  "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                  "type": "string"
                },
                "vnfcResourceInfo": {
                  "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResourceIds": {
                        "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfcCpInfo": {
                        "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "cpdId"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "vnfExtCpId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpProtocolInfo": {
                              "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                              "type": "array",
                              "items": {
                                "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                "type": "object",
                                "required": [
                                  "layerProtocol"
                                ],
                                "properties": {
                                  "layerProtocol": {
                                    "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                    "type": "string",
                                    "enum": [
                                      "IP_OVER_ETHERNET"
                                    ]
                                  },
                                  "ipOverEthernet": {
                                    "description": "This type represents information about a network address that has been assigned.\n",
                                    "type": "object",
                                    "properties": {
                                      "macAddress": {
                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                        "type": "string"
                                      },
                                      "segmentationId": {
                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                        "type": "string"
                                      },
                                      "ipAddresses": {
                                        "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "required": [
                                            "type"
                                          ],
                                          "properties": {
                                            "type": {
                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                              "type": "string",
                                              "enum": [
                                                "IPV4",
                                                "IPV6"
                                              ]
                                            },
                                            "addresses": {
                                              "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "array",
                                              "items": {
                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                "type": "string"
                                              }
                                            },
                                            "isDynamic": {
                                              "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                              "type": "boolean"
                                            },
                                            "addressRange": {
                                              "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "object",
                                              "required": [
                                                "minAddress",
                                                "maxAddress"
                                              ],
                                              "properties": {
                                                "minAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                },
                                                "maxAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            "subnetId": {
                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                              "type": "string"
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            },
                            "vnfLinkPortId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "metadata": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualLinkResourceInfo": {
                  "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfLinkPorts": {
                        "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualStorageResourceInfo": {
                  "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "metadata": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "extensions": {
              "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "indicators": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "instantiate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "terminate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scale": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scaleToLevel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeFlavour": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "heal": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "operate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeExtConn": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "createSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "revertToSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstances"
      },
      "task": true
    },
    {
      "name": "getVnfInstances",
      "summary": "Query VNF.\nThe GET method queries information about multiple VNF instances.\n",
      "description": "Query VNF.\nThe GET method queries information about multiple VNF instances.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "allFields",
          "type": "string",
          "info": "Include all complex attributes in the response. See clause 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "allFields",
            "type": "string"
          }
        },
        {
          "name": "fields",
          "type": "string",
          "info": "Complex attributes to be included into the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "fields",
            "type": "string"
          }
        },
        {
          "name": "excludeFields",
          "type": "string",
          "info": "Complex attributes to be excluded from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "excludeFields",
            "type": "string"
          }
        },
        {
          "name": "excludeDefault",
          "type": "string",
          "info": "Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity shall support t...(description truncated): string",
          "required": false,
          "schema": {
            "title": "excludeDefault",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a VNF instance.\n",
            "type": "object",
            "required": [
              "id",
              "vnfdId",
              "vnfProvider",
              "vnfProductName",
              "vnfSoftwareVersion",
              "vnfdVersion",
              "instantiationState"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfInstanceName": {
                "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                "type": "string"
              },
              "vnfInstanceDescription": {
                "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                "type": "string"
              },
              "vnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfProvider": {
                "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                "type": "string"
              },
              "vnfProductName": {
                "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                "type": "string"
              },
              "vnfSoftwareVersion": {
                "description": "A version.\n",
                "type": "string"
              },
              "vnfdVersion": {
                "description": "A version.\n",
                "type": "string"
              },
              "vnfConfigurableProperties": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "vimConnectionInfo": {
                "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "instantiationState": {
                "description": "The instantiation state of the VNF.\n",
                "type": "string",
                "enum": [
                  "NOT_INSTANTIATED",
                  "INSTANTIATED"
                ]
              },
              "instantiatedVnfInfo": {
                "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                "type": "object",
                "required": [
                  "flavourId",
                  "vnfState"
                ],
                "properties": {
                  "flavourId": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  },
                  "vnfState": {
                    "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                    "type": "string",
                    "enum": [
                      "STARTED",
                      "STOPPED"
                    ]
                  },
                  "scaleStatus": {
                    "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                    "type": "array",
                    "items": {
                      "required": [
                        "aspectId",
                        "scaleLevel"
                      ],
                      "type": "object",
                      "properties": {
                        "aspectId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "scaleLevel": {
                          "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "maxScaleLevels": {
                    "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                    "type": "array",
                    "items": {
                      "required": [
                        "aspectId",
                        "scaleLevel"
                      ],
                      "type": "object",
                      "properties": {
                        "aspectId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "scaleLevel": {
                          "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "extCpInfo": {
                    "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                    "type": "array",
                    "minItems": 1,
                    "items": {
                      "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "cpdId",
                        "cpConfigId",
                        "cpProtocolInfo"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfigId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "cpProtocolInfo": {
                          "description": "Network protocol information for this CP.\n",
                          "type": "array",
                          "items": {
                            "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                            "type": "object",
                            "required": [
                              "layerProtocol"
                            ],
                            "properties": {
                              "layerProtocol": {
                                "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                "type": "string",
                                "enum": [
                                  "IP_OVER_ETHERNET"
                                ]
                              },
                              "ipOverEthernet": {
                                "description": "This type represents information about a network address that has been assigned.\n",
                                "type": "object",
                                "properties": {
                                  "macAddress": {
                                    "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                    "type": "string"
                                  },
                                  "segmentationId": {
                                    "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                    "type": "string"
                                  },
                                  "ipAddresses": {
                                    "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "required": [
                                        "type"
                                      ],
                                      "properties": {
                                        "type": {
                                          "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                          "type": "string",
                                          "enum": [
                                            "IPV4",
                                            "IPV6"
                                          ]
                                        },
                                        "addresses": {
                                          "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                          "type": "array",
                                          "items": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          }
                                        },
                                        "isDynamic": {
                                          "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                          "type": "boolean"
                                        },
                                        "addressRange": {
                                          "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                          "type": "object",
                                          "required": [
                                            "minAddress",
                                            "maxAddress"
                                          ],
                                          "properties": {
                                            "minAddress": {
                                              "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                              "type": "string"
                                            },
                                            "maxAddress": {
                                              "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                              "type": "string"
                                            }
                                          }
                                        },
                                        "subnetId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "extLinkPortId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "metadata": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        },
                        "associatedVnfcCpId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "associatedVnfVirtualLinkId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "extVirtualLinkInfo": {
                    "description": "Information about the external VLs the VNF instance is connected to.\n",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle",
                        "currentVnfExtCpData"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "extLinkPorts": {
                          "description": "Link ports of this VL.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "resourceHandle"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceHandle": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "cpInstanceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "currentVnfExtCpData": {
                          "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents configuration information for external CPs created from a CPD.\n",
                            "type": "object",
                            "required": [
                              "cpdId"
                            ],
                            "properties": {
                              "cpdId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "cpConfig": {
                                "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                "type": "object",
                                "additionalProperties": {
                                  "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                  "anyOf": [
                                    {
                                      "required": [
                                        "linkPortId"
                                      ]
                                    },
                                    {
                                      "required": [
                                        "cpProtocolData"
                                      ]
                                    }
                                  ],
                                  "type": "object",
                                  "properties": {
                                    "parentCpConfigId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "linkPortId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpProtocolData": {
                                      "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                      "type": "array",
                                      "items": {
                                        "description": "This type represents network protocol data.\n",
                                        "type": "object",
                                        "required": [
                                          "layerProtocol"
                                        ],
                                        "properties": {
                                          "layerProtocol": {
                                            "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                            "type": "string",
                                            "enum": [
                                              "IP_OVER_ETHERNET"
                                            ]
                                          },
                                          "ipOverEthernet": {
                                            "description": "This type represents network address data for IP over Ethernet.\n",
                                            "type": "object",
                                            "anyOf": [
                                              {
                                                "required": [
                                                  "macAddress"
                                                ]
                                              },
                                              {
                                                "required": [
                                                  "ipAddresses"
                                                ]
                                              }
                                            ],
                                            "oneOf": [
                                              {
                                                "required": [
                                                  "fixedAddresses"
                                                ]
                                              },
                                              {
                                                "required": [
                                                  "numDynamicAddresses"
                                                ]
                                              },
                                              {
                                                "required": [
                                                  "ipAddressRange"
                                                ]
                                              }
                                            ],
                                            "properties": {
                                              "macAddress": {
                                                "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                "type": "string"
                                              },
                                              "segmentationId": {
                                                "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                "type": "string"
                                              },
                                              "ipAddresses": {
                                                "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                "type": "array",
                                                "items": {
                                                  "type": "object",
                                                  "required": [
                                                    "type"
                                                  ],
                                                  "properties": {
                                                    "type": {
                                                      "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                      "type": "string",
                                                      "enum": [
                                                        "IPV4",
                                                        "IPV6"
                                                      ]
                                                    },
                                                    "fixedAddresses": {
                                                      "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                      "type": "array",
                                                      "items": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    },
                                                    "numDynamicAddresses": {
                                                      "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                      "type": "integer"
                                                    },
                                                    "addressRange": {
                                                      "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                      "type": "object",
                                                      "required": [
                                                        "minAddress",
                                                        "maxAddress"
                                                      ],
                                                      "properties": {
                                                        "minAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        },
                                                        "maxAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      }
                                                    },
                                                    "subnetId": {
                                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "extManagedVirtualLinkInfo": {
                    "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "id",
                        "vnfVirtualLinkDescId",
                        "networkResource"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfVirtualLinkDescId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "networkResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "vnfLinkPorts": {
                          "description": "Link ports of this VL.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "resourceHandle"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "resourceHandle": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "cpInstanceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpInstanceType": {
                                "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                "type": "string",
                                "enum": [
                                  "VNFC_CP",
                                  "EXT_CP"
                                ]
                              }
                            }
                          }
                        },
                        "extManagedMultisiteVirtualLinkId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "monitoringParameters": {
                    "description": "Active monitoring parameters.\n",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "id",
                        "performanceMetric"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "name": {
                          "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                          "type": "string"
                        },
                        "performanceMetric": {
                          "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "localizationLanguage": {
                    "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                    "type": "string"
                  },
                  "vnfcResourceInfo": {
                    "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vduId",
                        "computeResource"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "vduId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "computeResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "zoneId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "storageResourceIds": {
                          "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                          "type": "array",
                          "items": {
                            "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                            "type": "string"
                          }
                        },
                        "reservationId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfcCpInfo": {
                          "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "cpdId"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpdId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfExtCpId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolInfo": {
                                "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents information about a network address that has been assigned.\n",
                                      "type": "object",
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "addresses": {
                                                "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "isDynamic": {
                                                "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                "type": "boolean"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              },
                              "vnfLinkPortId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "metadata": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "virtualLinkResourceInfo": {
                    "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vnfVirtualLinkDescId",
                        "networkResource"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "vnfVirtualLinkDescId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "networkResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "zoneId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "reservationId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfLinkPorts": {
                          "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "resourceHandle"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "resourceHandle": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "cpInstanceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpInstanceType": {
                                "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                "type": "string",
                                "enum": [
                                  "VNFC_CP",
                                  "EXT_CP"
                                ]
                              }
                            }
                          }
                        },
                        "metadata": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "virtualStorageResourceInfo": {
                    "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "virtualStorageDescId",
                        "storageResource"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "virtualStorageDescId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfdId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "storageResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "zoneId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "reservationId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "metadata": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  }
                }
              },
              "metadata": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "extensions": {
                "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
              },
              "_links": {
                "description": "Links to resources related to this resource.\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "indicators": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "instantiate": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "terminate": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "scale": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "scaleToLevel": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "changeFlavour": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "heal": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "operate": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "changeExtConn": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "createSnapshot": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "revertToSnapshot": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfInstances"
      },
      "task": true
    },
    {
      "name": "getVnfInstancesVnfInstanceId",
      "summary": "Query VNF.\n\nThe GET method retrieves information about a VNF instance by reading an \"Individual VNF",
      "description": "Query VNF.\n\nThe GET method retrieves information about a VNF instance by reading an \"Individual VNF instance\" resource.\nThis method shall follow the provisions specified in the tables 5.4.3.3.2-1 and 5.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF instance.\n",
          "type": "object",
          "required": [
            "id",
            "vnfdId",
            "vnfProvider",
            "vnfProductName",
            "vnfSoftwareVersion",
            "vnfdVersion",
            "instantiationState"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfInstanceName": {
              "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfInstanceDescription": {
              "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfdId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfProvider": {
              "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfProductName": {
              "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfSoftwareVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfdVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfConfigurableProperties": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "vimConnectionInfo": {
              "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
              "type": "object",
              "additionalProperties": {
                "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                "type": "object",
                "required": [
                  "vimType"
                ],
                "properties": {
                  "vimId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimType": {
                    "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                    "type": "string"
                  },
                  "interfaceInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "accessInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "extra": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "instantiationState": {
              "description": "The instantiation state of the VNF.\n",
              "type": "string",
              "enum": [
                "NOT_INSTANTIATED",
                "INSTANTIATED"
              ]
            },
            "instantiatedVnfInfo": {
              "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
              "type": "object",
              "required": [
                "flavourId",
                "vnfState"
              ],
              "properties": {
                "flavourId": {
                  "description": "An identifier that is unique within a VNF descriptor.\n",
                  "type": "string"
                },
                "vnfState": {
                  "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                  "type": "string",
                  "enum": [
                    "STARTED",
                    "STOPPED"
                  ]
                },
                "scaleStatus": {
                  "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "maxScaleLevels": {
                  "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "extCpInfo": {
                  "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "cpdId",
                      "cpConfigId",
                      "cpProtocolInfo"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "cpdId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "cpConfigId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "cpProtocolInfo": {
                        "description": "Network protocol information for this CP.\n",
                        "type": "array",
                        "items": {
                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                          "type": "object",
                          "required": [
                            "layerProtocol"
                          ],
                          "properties": {
                            "layerProtocol": {
                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                              "type": "string",
                              "enum": [
                                "IP_OVER_ETHERNET"
                              ]
                            },
                            "ipOverEthernet": {
                              "description": "This type represents information about a network address that has been assigned.\n",
                              "type": "object",
                              "properties": {
                                "macAddress": {
                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                  "type": "string"
                                },
                                "segmentationId": {
                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                  "type": "string"
                                },
                                "ipAddresses": {
                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "type"
                                    ],
                                    "properties": {
                                      "type": {
                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                        "type": "string",
                                        "enum": [
                                          "IPV4",
                                          "IPV6"
                                        ]
                                      },
                                      "addresses": {
                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                          "type": "string"
                                        }
                                      },
                                      "isDynamic": {
                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                        "type": "boolean"
                                      },
                                      "addressRange": {
                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "object",
                                        "required": [
                                          "minAddress",
                                          "maxAddress"
                                        ],
                                        "properties": {
                                          "minAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          },
                                          "maxAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "subnetId": {
                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "extLinkPortId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "associatedVnfcCpId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "associatedVnfVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "extVirtualLinkInfo": {
                  "description": "Information about the external VLs the VNF instance is connected to.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "resourceHandle",
                      "currentVnfExtCpData"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "extLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            }
                          }
                        }
                      },
                      "currentVnfExtCpData": {
                        "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents configuration information for external CPs created from a CPD.\n",
                          "type": "object",
                          "required": [
                            "cpdId"
                          ],
                          "properties": {
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "cpConfig": {
                              "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                              "type": "object",
                              "additionalProperties": {
                                "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                "anyOf": [
                                  {
                                    "required": [
                                      "linkPortId"
                                    ]
                                  },
                                  {
                                    "required": [
                                      "cpProtocolData"
                                    ]
                                  }
                                ],
                                "type": "object",
                                "properties": {
                                  "parentCpConfigId": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  },
                                  "linkPortId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "cpProtocolData": {
                                    "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                    "type": "array",
                                    "items": {
                                      "description": "This type represents network protocol data.\n",
                                      "type": "object",
                                      "required": [
                                        "layerProtocol"
                                      ],
                                      "properties": {
                                        "layerProtocol": {
                                          "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                          "type": "string",
                                          "enum": [
                                            "IP_OVER_ETHERNET"
                                          ]
                                        },
                                        "ipOverEthernet": {
                                          "description": "This type represents network address data for IP over Ethernet.\n",
                                          "type": "object",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "macAddress"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddresses"
                                              ]
                                            }
                                          ],
                                          "oneOf": [
                                            {
                                              "required": [
                                                "fixedAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "numDynamicAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddressRange"
                                              ]
                                            }
                                          ],
                                          "properties": {
                                            "macAddress": {
                                              "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                              "type": "string"
                                            },
                                            "segmentationId": {
                                              "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                              "type": "string"
                                            },
                                            "ipAddresses": {
                                              "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "required": [
                                                  "type"
                                                ],
                                                "properties": {
                                                  "type": {
                                                    "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IPV4",
                                                      "IPV6"
                                                    ]
                                                  },
                                                  "fixedAddresses": {
                                                    "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "array",
                                                    "items": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  },
                                                  "numDynamicAddresses": {
                                                    "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "integer"
                                                  },
                                                  "addressRange": {
                                                    "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                    "type": "object",
                                                    "required": [
                                                      "minAddress",
                                                      "maxAddress"
                                                    ],
                                                    "properties": {
                                                      "minAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      },
                                                      "maxAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  },
                                                  "subnetId": {
                                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "extManagedVirtualLinkInfo": {
                  "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "extManagedMultisiteVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "monitoringParameters": {
                  "description": "Active monitoring parameters.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "performanceMetric"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "name": {
                        "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                        "type": "string"
                      },
                      "performanceMetric": {
                        "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "localizationLanguage": {
                  "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                  "type": "string"
                },
                "vnfcResourceInfo": {
                  "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResourceIds": {
                        "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfcCpInfo": {
                        "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "cpdId"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "vnfExtCpId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpProtocolInfo": {
                              "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                              "type": "array",
                              "items": {
                                "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                "type": "object",
                                "required": [
                                  "layerProtocol"
                                ],
                                "properties": {
                                  "layerProtocol": {
                                    "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                    "type": "string",
                                    "enum": [
                                      "IP_OVER_ETHERNET"
                                    ]
                                  },
                                  "ipOverEthernet": {
                                    "description": "This type represents information about a network address that has been assigned.\n",
                                    "type": "object",
                                    "properties": {
                                      "macAddress": {
                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                        "type": "string"
                                      },
                                      "segmentationId": {
                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                        "type": "string"
                                      },
                                      "ipAddresses": {
                                        "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "required": [
                                            "type"
                                          ],
                                          "properties": {
                                            "type": {
                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                              "type": "string",
                                              "enum": [
                                                "IPV4",
                                                "IPV6"
                                              ]
                                            },
                                            "addresses": {
                                              "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "array",
                                              "items": {
                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                "type": "string"
                                              }
                                            },
                                            "isDynamic": {
                                              "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                              "type": "boolean"
                                            },
                                            "addressRange": {
                                              "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "object",
                                              "required": [
                                                "minAddress",
                                                "maxAddress"
                                              ],
                                              "properties": {
                                                "minAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                },
                                                "maxAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            "subnetId": {
                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                              "type": "string"
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            },
                            "vnfLinkPortId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "metadata": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualLinkResourceInfo": {
                  "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfLinkPorts": {
                        "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualStorageResourceInfo": {
                  "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "metadata": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "extensions": {
              "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "indicators": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "instantiate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "terminate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scale": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scaleToLevel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeFlavour": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "heal": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "operate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeExtConn": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "createSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "revertToSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfInstancesVnfInstanceId"
      },
      "task": true
    },
    {
      "name": "patchVnfInstancesVnfInstanceId",
      "summary": "Modify VNF Information.\nThis method modifies an \"Individual VNF instance\" resource.\nChanges to the",
      "description": "Modify VNF Information.\nThis method modifies an \"Individual VNF instance\" resource.\nChanges to the VNF configurable properties are applied to the configuration in the VNF instance,\nand are reflected in the representation of this resource.\nOther changes are applied to the VNF instance information managed by the VNFM, and are reflected\nin the representation of this resource.\nThis method shall follow the provisions specified in the tables 5.4.3.3.4-1 and 5.4.3.3.4-2\nfor URI query parameters, reques...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the VNF modification, as defined in clause 5.5.2.12.\n: {\"vnfInstanceName\": \"string\", \"vnfInstanceDescription\": \"string\", \"vnfPkgId\": \"string\", \"vnfConfigurableProperties\": \"object\", \"metadata\": \"object\", \"extensions\": \"object\", \"vimConnectionInfo\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents attribute modifications for an \"Individual VNF instance\" resource, i.e. modifications to a resource representation based on the \"VnfInstance\" data type.\n",
            "type": "object",
            "properties": {
              "vnfInstanceName": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "vnfInstanceDescription": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "vnfPkgId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfConfigurableProperties": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "metadata": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "extensions": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "vimConnectionInfo": {
                "description": "Modifications of the \"vimConnectionInfo\" attribute. If present, these  modifications shall be applied according to the rules of  JSON Merge Patch (see IETF RFC 7396 ).\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF instance.\n",
          "type": "object",
          "required": [
            "id",
            "vnfdId",
            "vnfProvider",
            "vnfProductName",
            "vnfSoftwareVersion",
            "vnfdVersion",
            "instantiationState"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfInstanceName": {
              "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfInstanceDescription": {
              "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
              "type": "string"
            },
            "vnfdId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfProvider": {
              "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfProductName": {
              "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
              "type": "string"
            },
            "vnfSoftwareVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfdVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfConfigurableProperties": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "vimConnectionInfo": {
              "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
              "type": "object",
              "additionalProperties": {
                "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                "type": "object",
                "required": [
                  "vimType"
                ],
                "properties": {
                  "vimId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimType": {
                    "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                    "type": "string"
                  },
                  "interfaceInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "accessInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "extra": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "instantiationState": {
              "description": "The instantiation state of the VNF.\n",
              "type": "string",
              "enum": [
                "NOT_INSTANTIATED",
                "INSTANTIATED"
              ]
            },
            "instantiatedVnfInfo": {
              "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
              "type": "object",
              "required": [
                "flavourId",
                "vnfState"
              ],
              "properties": {
                "flavourId": {
                  "description": "An identifier that is unique within a VNF descriptor.\n",
                  "type": "string"
                },
                "vnfState": {
                  "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                  "type": "string",
                  "enum": [
                    "STARTED",
                    "STOPPED"
                  ]
                },
                "scaleStatus": {
                  "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "maxScaleLevels": {
                  "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                  "type": "array",
                  "items": {
                    "required": [
                      "aspectId",
                      "scaleLevel"
                    ],
                    "type": "object",
                    "properties": {
                      "aspectId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "scaleLevel": {
                        "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                        "type": "integer"
                      }
                    }
                  }
                },
                "extCpInfo": {
                  "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "cpdId",
                      "cpConfigId",
                      "cpProtocolInfo"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "cpdId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "cpConfigId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "cpProtocolInfo": {
                        "description": "Network protocol information for this CP.\n",
                        "type": "array",
                        "items": {
                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                          "type": "object",
                          "required": [
                            "layerProtocol"
                          ],
                          "properties": {
                            "layerProtocol": {
                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                              "type": "string",
                              "enum": [
                                "IP_OVER_ETHERNET"
                              ]
                            },
                            "ipOverEthernet": {
                              "description": "This type represents information about a network address that has been assigned.\n",
                              "type": "object",
                              "properties": {
                                "macAddress": {
                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                  "type": "string"
                                },
                                "segmentationId": {
                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                  "type": "string"
                                },
                                "ipAddresses": {
                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "type"
                                    ],
                                    "properties": {
                                      "type": {
                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                        "type": "string",
                                        "enum": [
                                          "IPV4",
                                          "IPV6"
                                        ]
                                      },
                                      "addresses": {
                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                          "type": "string"
                                        }
                                      },
                                      "isDynamic": {
                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                        "type": "boolean"
                                      },
                                      "addressRange": {
                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                        "type": "object",
                                        "required": [
                                          "minAddress",
                                          "maxAddress"
                                        ],
                                        "properties": {
                                          "minAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          },
                                          "maxAddress": {
                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "subnetId": {
                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "extLinkPortId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "associatedVnfcCpId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "associatedVnfVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "extVirtualLinkInfo": {
                  "description": "Information about the external VLs the VNF instance is connected to.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "resourceHandle",
                      "currentVnfExtCpData"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "extLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            }
                          }
                        }
                      },
                      "currentVnfExtCpData": {
                        "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                        "type": "array",
                        "items": {
                          "description": "This type represents configuration information for external CPs created from a CPD.\n",
                          "type": "object",
                          "required": [
                            "cpdId"
                          ],
                          "properties": {
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "cpConfig": {
                              "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                              "type": "object",
                              "additionalProperties": {
                                "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                "anyOf": [
                                  {
                                    "required": [
                                      "linkPortId"
                                    ]
                                  },
                                  {
                                    "required": [
                                      "cpProtocolData"
                                    ]
                                  }
                                ],
                                "type": "object",
                                "properties": {
                                  "parentCpConfigId": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  },
                                  "linkPortId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "cpProtocolData": {
                                    "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                    "type": "array",
                                    "items": {
                                      "description": "This type represents network protocol data.\n",
                                      "type": "object",
                                      "required": [
                                        "layerProtocol"
                                      ],
                                      "properties": {
                                        "layerProtocol": {
                                          "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                          "type": "string",
                                          "enum": [
                                            "IP_OVER_ETHERNET"
                                          ]
                                        },
                                        "ipOverEthernet": {
                                          "description": "This type represents network address data for IP over Ethernet.\n",
                                          "type": "object",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "macAddress"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddresses"
                                              ]
                                            }
                                          ],
                                          "oneOf": [
                                            {
                                              "required": [
                                                "fixedAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "numDynamicAddresses"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "ipAddressRange"
                                              ]
                                            }
                                          ],
                                          "properties": {
                                            "macAddress": {
                                              "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                              "type": "string"
                                            },
                                            "segmentationId": {
                                              "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                              "type": "string"
                                            },
                                            "ipAddresses": {
                                              "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "required": [
                                                  "type"
                                                ],
                                                "properties": {
                                                  "type": {
                                                    "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IPV4",
                                                      "IPV6"
                                                    ]
                                                  },
                                                  "fixedAddresses": {
                                                    "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "array",
                                                    "items": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  },
                                                  "numDynamicAddresses": {
                                                    "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                    "type": "integer"
                                                  },
                                                  "addressRange": {
                                                    "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                    "type": "object",
                                                    "required": [
                                                      "minAddress",
                                                      "maxAddress"
                                                    ],
                                                    "properties": {
                                                      "minAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      },
                                                      "maxAddress": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  },
                                                  "subnetId": {
                                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "extManagedVirtualLinkInfo": {
                  "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPorts": {
                        "description": "Link ports of this VL.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "extManagedMultisiteVirtualLinkId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "monitoringParameters": {
                  "description": "Active monitoring parameters.\n",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "id",
                      "performanceMetric"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "name": {
                        "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                        "type": "string"
                      },
                      "performanceMetric": {
                        "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "localizationLanguage": {
                  "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                  "type": "string"
                },
                "vnfcResourceInfo": {
                  "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResourceIds": {
                        "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfcCpInfo": {
                        "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "cpdId"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpdId": {
                              "description": "An identifier that is unique within a VNF descriptor.\n",
                              "type": "string"
                            },
                            "vnfExtCpId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpProtocolInfo": {
                              "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                              "type": "array",
                              "items": {
                                "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                "type": "object",
                                "required": [
                                  "layerProtocol"
                                ],
                                "properties": {
                                  "layerProtocol": {
                                    "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                    "type": "string",
                                    "enum": [
                                      "IP_OVER_ETHERNET"
                                    ]
                                  },
                                  "ipOverEthernet": {
                                    "description": "This type represents information about a network address that has been assigned.\n",
                                    "type": "object",
                                    "properties": {
                                      "macAddress": {
                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                        "type": "string"
                                      },
                                      "segmentationId": {
                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                        "type": "string"
                                      },
                                      "ipAddresses": {
                                        "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                        "type": "array",
                                        "items": {
                                          "type": "object",
                                          "required": [
                                            "type"
                                          ],
                                          "properties": {
                                            "type": {
                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                              "type": "string",
                                              "enum": [
                                                "IPV4",
                                                "IPV6"
                                              ]
                                            },
                                            "addresses": {
                                              "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "array",
                                              "items": {
                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                "type": "string"
                                              }
                                            },
                                            "isDynamic": {
                                              "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                              "type": "boolean"
                                            },
                                            "addressRange": {
                                              "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                              "type": "object",
                                              "required": [
                                                "minAddress",
                                                "maxAddress"
                                              ],
                                              "properties": {
                                                "minAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                },
                                                "maxAddress": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            "subnetId": {
                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                              "type": "string"
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            },
                            "vnfLinkPortId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "metadata": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualLinkResourceInfo": {
                  "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfLinkPorts": {
                        "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "id",
                            "resourceHandle"
                          ],
                          "properties": {
                            "id": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "resourceHandle": {
                              "required": [
                                "resourceId"
                              ],
                              "type": "object",
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                              "properties": {
                                "vimConnectionId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceProviderId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceId": {
                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                  "type": "string"
                                },
                                "vimLevelResourceType": {
                                  "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                  "type": "string"
                                }
                              }
                            },
                            "cpInstanceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "cpInstanceType": {
                              "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                              "type": "string",
                              "enum": [
                                "VNFC_CP",
                                "EXT_CP"
                              ]
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "virtualStorageResourceInfo": {
                  "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "reservationId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "metadata": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "extensions": {
              "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "indicators": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "instantiate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "terminate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scale": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "scaleToLevel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeFlavour": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "heal": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "operate": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "changeExtConn": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "createSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "revertToSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/patchVnfInstancesVnfInstanceId"
      },
      "task": true
    },
    {
      "name": "deleteVnfInstancesVnfInstanceId",
      "summary": "Delete VNF Identifier.\nThis method deletes an \"Individual VNF instance\" resource.\nThis method shall",
      "description": "Delete VNF Identifier.\nThis method deletes an \"Individual VNF instance\" resource.\nThis method shall follow the provisions specified in the tables 5.4.3.3.5-1 and 5.4.3.3.5-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, the \"Individual VNF instance\" resource\nshall not exist any longer.\nA notification of type \"VnfIdentifierDeletionNotification\" shall be triggered as part of successfully\nexecuting this metho...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deleteVnfInstancesVnfInstanceId"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdInstantiate",
      "summary": "Instantiate VNF.\nThe POST method instantiates a VNF instance.\nThis method shall follow the provisio",
      "description": "Instantiate VNF.\nThe POST method instantiates a VNF instance.\nThis method shall follow the provisions specified in the tables 5.4.4.3.1-1 and 5.4.4.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM operation occurrence,\nit shall set the \"instantiationState\" attr...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the VNF instantiation.: {\"flavourId\": \"string\", \"instantiationLevelId\": \"string\", \"extVirtualLinks\": [{\"id\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"extCps\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}], \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}]}], \"extManagedVirtualLinks\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vnfLinkPort\": [{\"vnfLinkPortId\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}], \"extManagedMultisiteVirtualLinkId\": \"string\"}], \"vimConnectionInfo\": \"object\", \"localizationLanguage\": \"string\", \"additionalParams\": \"object\", \"extensions\": \"object\", \"vnfConfigurableProperties\": \"object\"}",
          "required": true,
          "schema": {
            "type": "object",
            "required": [
              "flavourId"
            ],
            "properties": {
              "flavourId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "instantiationLevelId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "extVirtualLinks": {
                "description": "Information about external VLs to connect the VNF to.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an external VL.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "resourceId",
                    "extCps"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "extCps": {
                      "description": "External CPs of the VNF to be connected to this external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents configuration information for external CPs created from a CPD.\n",
                        "type": "object",
                        "required": [
                          "cpdId"
                        ],
                        "properties": {
                          "cpdId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "cpConfig": {
                            "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                            "type": "object",
                            "additionalProperties": {
                              "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                              "anyOf": [
                                {
                                  "required": [
                                    "linkPortId"
                                  ]
                                },
                                {
                                  "required": [
                                    "cpProtocolData"
                                  ]
                                }
                              ],
                              "type": "object",
                              "properties": {
                                "parentCpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "linkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolData": {
                                  "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents network protocol data.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents network address data for IP over Ethernet.\n",
                                        "type": "object",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "macAddress"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddresses"
                                            ]
                                          }
                                        ],
                                        "oneOf": [
                                          {
                                            "required": [
                                              "fixedAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "numDynamicAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddressRange"
                                            ]
                                          }
                                        ],
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "fixedAddresses": {
                                                  "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "numDynamicAddresses": {
                                                  "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "integer"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "extLinkPorts": {
                      "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                        "type": "object",
                        "required": [
                          "id",
                          "resourceHandle"
                        ],
                        "properties": {
                          "id": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "extManagedVirtualLinks": {
                "description": "Information about internal VLs that are managed by the NFVO.\nNOTES:  The indication of externally-managed internal VLs is needed in case networks have been pre-configured  for use with certain VNFs, for instance to ensure that these networks have certain properties such as  security or acceleration features, or to address particular network topologies. The present document  assumes that externally-managed internal VLs are managed by the NFVO and created towards the VIM.\nIt is possible to have several ExtManagedVirtualLinkData for the same VNF internal VL in case of a  multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkData corresponding to the same  VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed  multi-site VL instance (refer to clause 4.4.1.12).\n",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "vnfVirtualLinkDescId",
                    "resourceId"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfVirtualLinkDescId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "vnfLinkPort": {
                      "description": "Externally provided link ports to be used to connect VNFC connection points to this externally-managed VL on this network resource. If this attribute is not present, the VNFM shall create the link ports on the externally-managed VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect a VNFC connection point  to an exernally managed VL.\n",
                        "type": "object",
                        "required": [
                          "vnfLinkPortId",
                          "resourceHandle"
                        ],
                        "properties": {
                          "vnfLinkPortId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "extManagedMultisiteVirtualLinkId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "vimConnectionInfo": {
                "description": "Information about VIM connections to be used for managing the resources for the VNF instance, or refer to external / externally-managed virtual links. This attribute shall only be supported and may be present if  VNF-related resource management in direct mode is applicable. The VNFM shall apply the content of this  attribute to the \"vimConnectionInfo\" attribute of \"VnfInstance\" according to the rules of JSON Merge Patch  (see IETF RFC 7396).\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "localizationLanguage": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "extensions": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "vnfConfigurableProperties": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdInstantiate"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdScale",
      "summary": "Scale VNF.\nThe POST method requests to scale a VNF instance resource incrementally.\nThis method sha",
      "description": "Scale VNF.\nThe POST method requests to scale a VNF instance resource incrementally.\nThis method shall follow the provisions specified in the tables 5.4.5.3.1-1 and 5.4.5.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method are\nspecified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM operation occurrence,\nit shall reflect the...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the scale VNF operation.: {\"type\": \"Must be one of [SCALE_OUT, SCALE_IN]\", \"aspectId\": \"string\", \"numberOfSteps\": 123, \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "type": "object",
            "required": [
              "type",
              "aspectId"
            ],
            "properties": {
              "type": {
                "description": "Indicates the type of the scale operation requested. Permitted values: * SCALE_OUT: adding additional VNFC instances to the VNF to increase\n  capacity\n* SCALE_IN: removing VNFC instances from the VNF in order to release\n  unused capacity.\n",
                "type": "string",
                "enum": [
                  "SCALE_OUT",
                  "SCALE_IN"
                ]
              },
              "aspectId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "numberOfSteps": {
                "description": "Number of scaling steps to be executed as part of this Scale VNF operation. It shall be a positive number and the default value shall be 1.\n",
                "type": "integer",
                "default": 1
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdScale"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdScaleToLevel",
      "summary": "Scale VNF to Level.\nThe POST method requests to scale a VNF instance resource to a target level.\nTh",
      "description": "Scale VNF to Level.\nThe POST method requests to scale a VNF instance resource to a target level.\nThis method shall follow the provisions specified in the tables 5.4.6.3.1-1 and 5.4.6.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method are\nspecified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM operation occurrence,\nit shal...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the scale VNF to Level operation.: {\"instantiationLevelId\": \"string\", \"scaleInfo\": [{\"aspectId\": \"string\", \"vnfdId\": \"string\", \"scaleLevel\": 123}], \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Scale VNF to Level\" operation.\n",
            "type": "object",
            "properties": {
              "instantiationLevelId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "scaleInfo": {
                "description": "For each scaling aspect of the current deployment flavour, indicates the target scale level to which the VNF is to be scaled. Either the instantiationLevelId attribute or the scaleInfo attribute shall be included.\n",
                "type": "array",
                "items": {
                  "required": [
                    "aspectId",
                    "scaleLevel"
                  ],
                  "type": "object",
                  "properties": {
                    "aspectId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "scaleLevel": {
                      "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                      "type": "integer"
                    }
                  }
                }
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdScaleToLevel"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdChangeFlavour",
      "summary": "Change VNF Flavour.\nThis method shall follow the provisions specified in the tables 5.4.7.3.1-1 and",
      "description": "Change VNF Flavour.\nThis method shall follow the provisions specified in the tables 5.4.7.3.1-1 and 5.4.7.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM operation occurrence,\nit shall set the \"flavourId\" attribute in the representation of the \"Individual VNF ...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Change VNF Flavour operation.: {\"newFlavourId\": \"string\", \"instantiationLevelId\": \"string\", \"extVirtualLinks\": [{\"id\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"extCps\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}], \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}]}], \"extManagedVirtualLinks\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vnfLinkPort\": [{\"vnfLinkPortId\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}], \"extManagedMultisiteVirtualLinkId\": \"string\"}], \"vimConnectionInfo\": \"object\", \"additionalParams\": \"object\", \"extensions\": \"object\", \"vnfConfigurableProperties\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Change VNF flavour\" operation.\n",
            "type": "object",
            "required": [
              "newFlavourId"
            ],
            "properties": {
              "newFlavourId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "instantiationLevelId": {
                "description": "An identifier that is unique within a VNF descriptor.\n",
                "type": "string"
              },
              "extVirtualLinks": {
                "description": "Information about external VLs to connect the VNF to. Entries in the list of external VLs that are unchanged need not be supplied as part of this request.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an external VL.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "resourceId",
                    "extCps"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "extCps": {
                      "description": "External CPs of the VNF to be connected to this external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents configuration information for external CPs created from a CPD.\n",
                        "type": "object",
                        "required": [
                          "cpdId"
                        ],
                        "properties": {
                          "cpdId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "cpConfig": {
                            "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                            "type": "object",
                            "additionalProperties": {
                              "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                              "anyOf": [
                                {
                                  "required": [
                                    "linkPortId"
                                  ]
                                },
                                {
                                  "required": [
                                    "cpProtocolData"
                                  ]
                                }
                              ],
                              "type": "object",
                              "properties": {
                                "parentCpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "linkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolData": {
                                  "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents network protocol data.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents network address data for IP over Ethernet.\n",
                                        "type": "object",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "macAddress"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddresses"
                                            ]
                                          }
                                        ],
                                        "oneOf": [
                                          {
                                            "required": [
                                              "fixedAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "numDynamicAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddressRange"
                                            ]
                                          }
                                        ],
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "fixedAddresses": {
                                                  "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "numDynamicAddresses": {
                                                  "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "integer"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "extLinkPorts": {
                      "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                        "type": "object",
                        "required": [
                          "id",
                          "resourceHandle"
                        ],
                        "properties": {
                          "id": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "extManagedVirtualLinks": {
                "description": "Information about internal VLs that are managed by the NFVO.\nNOTES:  The indication of externally-managed internal VLs is needed in case networks have been pre-configured  for use with certain VNFs, for instance to ensure that these networks have certain properties such as  security or acceleration features, or to address particular network topologies. The present document  assumes that externally-managed internal VLs are managed by the NFVO and created towards the VIM.\nIt is possible to have several ExtManagedVirtualLinkData for the same VNF internal VL in case of a  multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkData corresponding to the same  VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed  multi-site VL instance (refer to clause 4.4.1.12).\n",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "vnfVirtualLinkDescId",
                    "resourceId"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfVirtualLinkDescId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "vnfLinkPort": {
                      "description": "Externally provided link ports to be used to connect VNFC connection points to this externally-managed VL on this network resource. If this attribute is not present, the VNFM shall create the link ports on the externally-managed VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect a VNFC connection point  to an exernally managed VL.\n",
                        "type": "object",
                        "required": [
                          "vnfLinkPortId",
                          "resourceHandle"
                        ],
                        "properties": {
                          "vnfLinkPortId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "extManagedMultisiteVirtualLinkId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "vimConnectionInfo": {
                "description": "Information about VIM connections to be used for managing the resources for the VNF instance, or refer to external / externally-managed virtual links. This attribute shall only be supported and may be present if  VNF-related resource management in direct mode is applicable. The VNFM shall apply the content of this  attribute to the \"vimConnectionInfo\" attribute of \"VnfInstance\" according to the rules of JSON Merge Patch  (see IETF RFC 7396).\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "extensions": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "vnfConfigurableProperties": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdChangeFlavour"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdTerminate",
      "summary": "Terminate VNF.\nThe POST method triggers the VNFM to terminate a VNF instance and to request to the",
      "description": "Terminate VNF.\nThe POST method triggers the VNFM to terminate a VNF instance and to request to the VIM\nthe release of its used virtualised resources.\nThis method shall follow the provisions specified in the tables 5.4.8.3.1-1 and 5.4.8.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the VNF termination.: {\"terminationType\": \"Must be one of [FORCEFUL, GRACEFUL]\", \"gracefulTerminationTimeout\": 123, \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "type": "object",
            "required": [
              "terminationType"
            ],
            "properties": {
              "terminationType": {
                "description": "Indicates whether forceful or graceful termination is requested. Permitted values: * FORCEFUL: The VNFM will shut down the VNF and release the\n  resources immediately after accepting the request.\n* GRACEFUL: The VNFM will first arrange to take the VNF out of service after accepting the request. Once the operation of taking the VNF out of service finishes (irrespective of whether it has succeeded or failed) or once the timer value specified in the \"gracefulTerminationTimeout\" attribute expires, the VNFM will shut down the VNF and release the resources.\n",
                "type": "string",
                "enum": [
                  "FORCEFUL",
                  "GRACEFUL"
                ]
              },
              "gracefulTerminationTimeout": {
                "description": "This attribute is only applicable in case of graceful termination. It defines the time to wait for the VNF to be taken out of service before shutting down the VNF and releasing the resources. The unit is seconds. If not given and the \"terminationType\" attribute is set to \"GRACEFUL\", it is expected that the VNFM waits for the successful taking out of service of the VNF, no matter how long it takes, before shutting down the VNF and releasing the resources.\n",
                "type": "integer"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdTerminate"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdHeal",
      "summary": "Heal VNF.\nThe POST method requests to heal a VNF instance.\nThis method shall follow the provisions",
      "description": "Heal VNF.\nThe POST method requests to heal a VNF instance.\nThis method shall follow the provisions specified in the tables 5.4.9.3.1-1 and 5.4.9.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\n",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Heal VNF operation.: {\"cause\": \"string\", \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "type": "object",
            "properties": {
              "cause": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdHeal"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdOperate",
      "summary": "Operate VNF.\nThe POST method changes the operational state of a VNF instance resource.\nThis method",
      "description": "Operate VNF.\nThe POST method changes the operational state of a VNF instance resource.\nThis method shall follow the provisions specified in the tables 5.4.10.3.1-1 and 5.4.10.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM operation occurrence,\nit shall set th...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Operate VNF operation.: {\"changeStateTo\": \"Must be one of [STARTED, STOPPED]\", \"stopType\": \"Must be one of [FORCEFUL, GRACEFUL]\", \"gracefulStopTimeout\": 123, \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Operate VNF\" operation.\n",
            "type": "object",
            "required": [
              "changeStateTo"
            ],
            "properties": {
              "changeStateTo": {
                "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                "type": "string",
                "enum": [
                  "STARTED",
                  "STOPPED"
                ]
              },
              "stopType": {
                "description": "* FORCEFUL: The VNFM will stop the VNF instance immediately after accepting \n  the request.\n* GRACEFUL: The VNFM instance will first arrange to take the VNF out of \n  service after accepting the request. Once that operation is successful \n  or once the timer value specified in the \"gracefulStopTimeout\" attribute\n  expires, the VNFM will stop the VNF instance.\n",
                "type": "string",
                "enum": [
                  "FORCEFUL",
                  "GRACEFUL"
                ]
              },
              "gracefulStopTimeout": {
                "description": "The time interval (in seconds) to wait for the VNF to be taken out of service during graceful stop, before stopping the VNF. The “stopType” and “gracefulStopTimeout” attributes shall be absent, when the “changeStateTo” attribute is equal to “STARTED”. The “gracefulStopTimeout” attribute shall be present, when the “changeStateTo” is equal to “STOPPED” and the “stopType” attribute is equal to “GRACEFUL”. The “gracefulStopTimeout” attribute shall be absent, when the “changeStateTo” attribute is equal to “STOPPED” and the “stopType” attribute is equal to “FORCEFUL”. The request shall be treated as if the “stopType” attribute was set to ”FORCEFUL”, when the “changeStateTo” attribute is equal to “STOPPED” and the “stopType” attribute is absent.\n",
                "type": "integer"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdOperate"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdChangeExtConn",
      "summary": "Change External VNF Connectivity.\nThe POST method changes the external connectivity of a VNF instan",
      "description": "Change External VNF Connectivity.\nThe POST method changes the external connectivity of a VNF instance.\nThis method shall follow the provisions specified in the tables 5.4.11.3.1-1 and 5.4.11.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nThe steps and conditions that apply as the result of successfully executing this method\nare specified in clause 5.4.1.2.\n",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Change external VNF connectivity operation.\n: {\"extVirtualLinks\": [{\"id\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"extCps\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}], \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}]}], \"vimConnectionInfo\": \"object\", \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Change external VNF connectivity\" operation to modify the external connectivity of a VNF instance.\n",
            "type": "object",
            "required": [
              "extVirtualLinks"
            ],
            "properties": {
              "extVirtualLinks": {
                "description": "Information about external VLs to change (e.g. connect the VNF to). Entries in the list of external VLs that are unchanged need not be supplied as part of this request.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an external VL.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "resourceId",
                    "extCps"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "extCps": {
                      "description": "External CPs of the VNF to be connected to this external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents configuration information for external CPs created from a CPD.\n",
                        "type": "object",
                        "required": [
                          "cpdId"
                        ],
                        "properties": {
                          "cpdId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "cpConfig": {
                            "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                            "type": "object",
                            "additionalProperties": {
                              "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                              "anyOf": [
                                {
                                  "required": [
                                    "linkPortId"
                                  ]
                                },
                                {
                                  "required": [
                                    "cpProtocolData"
                                  ]
                                }
                              ],
                              "type": "object",
                              "properties": {
                                "parentCpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "linkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolData": {
                                  "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents network protocol data.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents network address data for IP over Ethernet.\n",
                                        "type": "object",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "macAddress"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddresses"
                                            ]
                                          }
                                        ],
                                        "oneOf": [
                                          {
                                            "required": [
                                              "fixedAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "numDynamicAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddressRange"
                                            ]
                                          }
                                        ],
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "fixedAddresses": {
                                                  "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "numDynamicAddresses": {
                                                  "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "integer"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "extLinkPorts": {
                      "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                        "type": "object",
                        "required": [
                          "id",
                          "resourceHandle"
                        ],
                        "properties": {
                          "id": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "vimConnectionInfo": {
                "description": "Information about VIM connections to be used for managing the resources for the VNF instance, or refer to  external virtual links. This attribute shall only be supported and may be present if VNF-related resource  management in direct mode is applicable. The VNFM shall apply the content of this attribute to the  \"vimConnectionInfo\" attribute of \"VnfInstance\" according to the rules of JSON Merge Patch (see IETF RFC 7396).\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdChangeExtConn"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdChangeVnfpkg",
      "summary": "The POST method changes the current VNF package on which the VNF instance is based.\nThis method sha",
      "description": "The POST method changes the current VNF package on which the VNF instance is based.\nThis method shall follow the provisions specified in the tables 5.4.11a.3.1-1 and \n5.4.11a.3.1-2 for URI query parameters, request and response data structures, and \nresponse codes.\nThe steps and conditions that apply as the result of successfully executing this method \nare specified in clause 5.4.1.2.\nDuring a change of the current VNF package, the allowed and required extensions and/or \nVNF configurable propert...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Change current VNF package operation, as defined in clause 5.5.2.11a.\n: {\"vnfdId\": \"string\", \"extVirtualLinks\": [{\"id\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"extCps\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}], \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}]}], \"extManagedVirtualLinks\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vnfLinkPort\": [{\"vnfLinkPortId\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}], \"extManagedMultisiteVirtualLinkId\": \"string\"}], \"vimConnectionInfo\": \"object\", \"additionalParams\": \"object\", \"extensions\": \"object\", \"vnfConfigurableProperties\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Change current VNF package\"  operation to replace the VNF package on which a VNF instance is based.\n",
            "type": "object",
            "required": [
              "vnfdId"
            ],
            "properties": {
              "vnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "extVirtualLinks": {
                "description": "Information about external VLs to connect the VNF to. Entries in the list  that are unchanged need not be supplied as part of this request.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an external VL.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "resourceId",
                    "extCps"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "extCps": {
                      "description": "External CPs of the VNF to be connected to this external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents configuration information for external CPs created from a CPD.\n",
                        "type": "object",
                        "required": [
                          "cpdId"
                        ],
                        "properties": {
                          "cpdId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "cpConfig": {
                            "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                            "type": "object",
                            "additionalProperties": {
                              "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                              "anyOf": [
                                {
                                  "required": [
                                    "linkPortId"
                                  ]
                                },
                                {
                                  "required": [
                                    "cpProtocolData"
                                  ]
                                }
                              ],
                              "type": "object",
                              "properties": {
                                "parentCpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "linkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolData": {
                                  "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents network protocol data.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents network address data for IP over Ethernet.\n",
                                        "type": "object",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "macAddress"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddresses"
                                            ]
                                          }
                                        ],
                                        "oneOf": [
                                          {
                                            "required": [
                                              "fixedAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "numDynamicAddresses"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "ipAddressRange"
                                            ]
                                          }
                                        ],
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "fixedAddresses": {
                                                  "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "numDynamicAddresses": {
                                                  "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                  "type": "integer"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "extLinkPorts": {
                      "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                        "type": "object",
                        "required": [
                          "id",
                          "resourceHandle"
                        ],
                        "properties": {
                          "id": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "extManagedVirtualLinks": {
                "description": "Information about internal VLs that are managed by the NFVO.\nNOTES: The indication of externally-managed internal VLs is needed in case networks have been pre-configured for use with certain VNFs, for instance to ensure that these networks have certain properties such as security or acceleration features, or to address particular network topologies. The present document assumes that externally-managed internal VLs are managed by the NFVO and created towards the VIM. It is possible to have several ExtManagedVirtualLinkData for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkData corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 4.4.1.12).\n",
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "vnfVirtualLinkDescId",
                    "resourceId"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfVirtualLinkDescId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vimConnectionId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceProviderId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceId": {
                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                      "type": "string"
                    },
                    "vnfLinkPort": {
                      "description": "Externally provided link ports to be used to connect VNFC connection points to this externally-managed VL on this network resource. If this attribute is not present, the VNFM shall create the link ports on the externally-managed VL.\n",
                      "type": "array",
                      "items": {
                        "description": "This type represents an externally provided link port to be used to connect a VNFC connection point  to an exernally managed VL.\n",
                        "type": "object",
                        "required": [
                          "vnfLinkPortId",
                          "resourceHandle"
                        ],
                        "properties": {
                          "vnfLinkPortId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceHandle": {
                            "required": [
                              "resourceId"
                            ],
                            "type": "object",
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                            "properties": {
                              "vimConnectionId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceProviderId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceId": {
                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                "type": "string"
                              },
                              "vimLevelResourceType": {
                                "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "extManagedMultisiteVirtualLinkId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "vimConnectionInfo": {
                "description": "Information about VIM connections to be used for managing the resources for the VNF instance, or refer to  external virtual links. This attribute shall only be supported and may be present if VNF-related resource  management in direct mode is applicable. The VNFM shall apply the content of this attribute to the  \"vimConnectionInfo\" attribute of \"VnfInstance\" according to the rules of JSON Merge Patch (see IETF RFC 7396).\n",
                "type": "object",
                "additionalProperties": {
                  "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                  "type": "object",
                  "required": [
                    "vimType"
                  ],
                  "properties": {
                    "vimId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vimType": {
                      "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                      "type": "string"
                    },
                    "interfaceInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "accessInfo": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extra": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "extensions": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "vnfConfigurableProperties": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdChangeVnfpkg"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdCreateSnapshot",
      "summary": "The POST method requests taking a snapshot a VNF instance and populating a \npreviously created VNF",
      "description": "The POST method requests taking a snapshot a VNF instance and populating a \npreviously created VNF snapshot resource (refer to clause 5.4.23.3.1) with \nthe snapshot content.\nThe steps and conditions that apply as the result of successfully executing \nthis method are specified in clause 5.4.1.2.\nIn addition, once the VNFM has successfully completed the underlying VNF LCM \noperation occurrence, it shall reflect the result of the VNF snapshot creation \nby updating the corresponding \"Individual VNF ...(description truncated)",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the \"Create VNF Snapshot\" operation, as defined in clause 5.5.2.21.\n: {\"vnfSnapshotInfoId\": \"string\", \"additionalParams\": \"object\", \"userDefinedData\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Create VNF Snapshot\"  LCM operation which takes a snapshot of a VNF instance and populates  a previously-created \"Individual VNF snapshot\" resource with the content  of the snapshot. It shall comply with the provisions defined in table 5.5.2.21-1.\n",
            "type": "object",
            "required": [
              "vnfSnapshotResId"
            ],
            "properties": {
              "vnfSnapshotInfoId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "userDefinedData": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdCreateSnapshot"
      },
      "task": true
    },
    {
      "name": "postVnfInstancesVnfInstanceIdRevertToSnapshot",
      "summary": "The POST method requests reverting a VNF instance to a VNF snapshot.\nThis method shall follow the p",
      "description": "The POST method requests reverting a VNF instance to a VNF snapshot.\nThis method shall follow the provisions specified in the tables 5.4.22.3.1-1 \nand 5.4.22.3.1-2 for URI query parameters, request and response data structures, \nand response codes.\n",
      "input": [
        {
          "name": "vnfInstanceId",
          "type": "string",
          "info": "Identifier of the VNF instance for the VNF snapshot to be reverted to. This identifier can be retrieved from the resource \nreferenced by the \"Location\" HTTP header in the...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfInstanceId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the Revert to VNF snapshot operation, as defined in clause 5.5.2.26.\n: {\"vnfSnapshotInfoId\": \"string\", \"additionalParams\": \"object\"}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the \"Revert to VNF Snapshot\" operation.\n",
            "type": "object",
            "required": [
              "vnfSnapshotInfoId"
            ],
            "properties": {
              "vnfSnapshotInfoId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfInstancesVnfInstanceIdRevertToSnapshot"
      },
      "task": true
    },
    {
      "name": "getVnfLcmOpOccs",
      "summary": "Get Operation Status.\nThe API consumer can use this method to query status information about multip",
      "description": "Get Operation Status.\nThe API consumer can use this method to query status information about multiple\nVNF lifecycle management operation occurrences.\nThis method shall follow the provisions specified in the tables 5.4.12.3.2-1 and 5.4.12.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "allFields",
          "type": "string",
          "info": "Include all complex attributes in the response. See clause 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "allFields",
            "type": "string"
          }
        },
        {
          "name": "fields",
          "type": "string",
          "info": "Complex attributes to be included into the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "fields",
            "type": "string"
          }
        },
        {
          "name": "excludeFields",
          "type": "string",
          "info": "Complex attributes to be excluded from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "excludeFields",
            "type": "string"
          }
        },
        {
          "name": "excludeDefault",
          "type": "string",
          "info": "Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity shall support t...(description truncated): string",
          "required": false,
          "schema": {
            "title": "excludeDefault",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF lifecycle management operation occurrence. Shall be set to the value of the \"id\" attribute in the \"Grant\" representing the associated \"Individual Grant\", if such grant exists.\n",
          "type": "object",
          "required": [
            "id",
            "operationState",
            "stateEnteredTime",
            "startTime",
            "vnfInstanceId",
            "operation",
            "isAutomaticInvocation",
            "isCancelPending"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operationState": {
              "description": "STARTING: The LCM operation is starting. PROCESSING: The LCM operation is currently in execution. COMPLETED: The LCM operation has been completed successfully. FAILED_TEMP: The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED: The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK: The LCM operation is currently being rolled back. ROLLED_BACK: The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n",
              "type": "string",
              "enum": [
                "STARTING",
                "PROCESSING",
                "COMPLETED",
                "FAILED_TEMP",
                "FAILED",
                "ROLLING_BACK",
                "ROLLED_BACK"
              ]
            },
            "stateEnteredTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "startTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "grantId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operation": {
              "description": "Value | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation.    SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF Snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the “Revert-To VNF Snapshot\" LCM operation. CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation.\n",
              "type": "string",
              "enum": [
                "INSTANTIATE",
                "SCALE",
                "SCALE_TO_LEVEL",
                "CHANGE_FLAVOUR",
                "TERMINATE",
                "HEAL",
                "OPERATE",
                "CHANGE_EXT_CONN",
                "MODIFY_INFO",
                "CREATE_SNAPSHOT",
                "REVERT_TO_SNAPSHOT",
                "CHANGE_VNFPKG"
              ]
            },
            "isAutomaticInvocation": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "operationParams": {
              "description": "Input parameters of the LCM operation. This attribute shall be formatted according to the request data type of the related LCM operation. The following mapping between operationType and the data type of this attribute shall apply: * INSTANTIATE: InstantiateVnfRequest * SCALE: ScaleVnfRequest * SCALE_TO_LEVEL: ScaleVnfToLevelRequest * CHANGE_FLAVOUR: ChangeVnfFlavourRequest * OPERATE: OperateVnfRequest * HEAL: HealVnfRequest * CHANGE_EXT_CONN: ChangeExtVnfConnectivityRequest * TERMINATE: TerminateVnfRequest * MODIFY_INFO: VnfInfoModifications * CREATE_SNAPSHOT: CreateVnfSnapshotRequest * REVERT_TO_SNAPSHOT: RevertToVnfSnapshotRequest * CHANGE_VNFPKG: ChangeCurrentVnfPkgRequest\n",
              "type": "object"
            },
            "isCancelPending": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "cancelMode": {
              "description": "Cancellation mode. GRACEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation and shall wait for the ongoing resource management operations in the underlying system, typically the VIM, to finish execution or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and shall wait for the granting request to finish execution or time out. After that, the VNFM shall put the operation occurrence into the ROLLED_BACK state. FORCEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation, shall cancel the ongoing resource management operations in the underlying system, typically the VIM, and shall wait for the cancellation to finish or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and put the operation occurrence into the ROLLED_BACK state.\n",
              "type": "string",
              "enum": [
                "GRACEFUL",
                "FORCEFUL"
              ]
            },
            "error": {
              "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
              "type": "object",
              "required": [
                "status",
                "detail"
              ],
              "properties": {
                "type": {
                  "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                  "type": "string"
                },
                "title": {
                  "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                  "type": "string"
                },
                "status": {
                  "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                  "type": "integer"
                },
                "detail": {
                  "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                  "type": "string"
                },
                "instance": {
                  "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                  "type": "string"
                }
              }
            },
            "resourceChanges": {
              "description": "This attribute contains information about the cumulative changes to virtualised resources that were performed so far by the LCM operation since its start, if applicable.\n",
              "type": "object",
              "properties": {
                "affectedVnfcs": {
                  "description": "Information about VNFC instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VNFCs.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "changeType",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVnfc structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "affectedVnfcCpIds": {
                        "description": "Identifiers of CP(s) of the VNFC instance that were affected by the change. Shall be present for those affected CPs of the VNFC instance that are associated to an external CP of the VNF instance. May be present for further affected CPs of the VNFC instance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "addedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been added. Each value refers to a VirtualStorageResourceInfo item in the VnfInstance that was added to the VNFC. It shall be provided if at least one storage resource was added to the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "removedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been removed. The value contains the identifier of a VirtualStorageResourceInfo item that has been removed from the VNFC, and might no longer exist in the VnfInstance. It shall be provided if at least one storage resource was removed from the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "affectedVirtualLinks": {
                  "description": "Information about VL instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter. For a particular affected VL, there shall be as many \"AffectedVirtualLink\" entries as needed for signalling the different types of changes, i.e., one per virtual link and change type. For instance, in the case of signaling affected VL instances involving the addition of a particular VL instance with links ports, one \"AffectedVirtualLink\" entry signals the addition of the VL by using the \"changeType\" attribute of \"AffectedVirtualLink\" structure equal to \"ADDED\", and another \"AffectedVirtualLink\" entry signals the addition of VNF link ports of the VL by using the \"changeType\" equal to \"LINK_PORT_ADDED\".\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VLs, and added or removed VNF link ports.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "changeType",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY * LINK_PORT_ADDED * LINK_PORT_REMOVED For a temporary resource, an AffectedVirtualLink structure exists as long as the temporary resource exists. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY",
                          "LINK_PORT_ADDED",
                          "LINK_PORT_REMOVED"
                        ]
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPortIds": {
                        "description": "Identifiers of the link ports of the affected VL (reference to the vnfLinkPortInfo) related to the change. Each identifier references a \"VnfLinkPortInfo\" structure. Shall be set when changeType is equal to \"LINK_PORT_ADDED\" or \"LINK_PORT_REMOVED\", and the related “VnfLinkPortInfo” structures are present (case \"added\") or have been present (case \"removed\") in the “VnfVirtualLinkResourceInfo” or \"ExtManagedVirtualLinkInfo\" structures that are represented by the \"vnfVirtualLinkResourceInfo\" or \"extManagedVirtualLinkInfo\" attribute in the \"VnfInstance\" structure. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "affectedExtLinkPorts": {
                  "description": "Information about external VNF link ports that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added and deleted external link ports (link ports attached to external virtual links).\n",
                    "type": "object",
                    "required": [
                      "id",
                      "changeType",
                      "extCpInstanceId",
                      "resourceHandle"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: -\tADDED -\tREMOVED\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED"
                        ]
                      },
                      "extCpInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "affectedVirtualStorages": {
                  "description": "Information about virtualised storage instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary virtual storage resources.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "changeType",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVirtualStorage structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "changedInfo": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource. The attributes that can be included consist of those requested to be modified explicitly in the \"VnfInfoModificationRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly e.g. when modifying the referenced VNF package.\n",
              "type": "object",
              "properties": {
                "vnfInstanceName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfInstanceDescription": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vimConnectionInfo": {
                  "description": "If present, this attribute signals modifications the \"vimConnectionInfo\"  attribute array in \"VnfInstance\".\n",
                  "type": "object",
                  "additionalProperties": {
                    "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                    "type": "object",
                    "required": [
                      "vimType"
                    ],
                    "properties": {
                      "vimId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vimType": {
                        "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                        "type": "string"
                      },
                      "interfaceInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "accessInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extra": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "changedExtConnectivity": {
              "description": "Information about changed external connectivity, if applicable. This allows the NFVO to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "resourceHandle",
                  "currentVnfExtCpData"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceHandle": {
                    "required": [
                      "resourceId"
                    ],
                    "type": "object",
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      },
                      "vimLevelResourceType": {
                        "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                        "type": "string"
                      }
                    }
                  },
                  "extLinkPorts": {
                    "description": "Link ports of this VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "cpInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "currentVnfExtCpData": {
                    "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents configuration information for external CPs created from a CPD.\n",
                      "type": "object",
                      "required": [
                        "cpdId"
                      ],
                      "properties": {
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfig": {
                          "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                          "type": "object",
                          "additionalProperties": {
                            "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                            "anyOf": [
                              {
                                "required": [
                                  "linkPortId"
                                ]
                              },
                              {
                                "required": [
                                  "cpProtocolData"
                                ]
                              }
                            ],
                            "type": "object",
                            "properties": {
                              "parentCpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "linkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolData": {
                                "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents network protocol data.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents network address data for IP over Ethernet.\n",
                                      "type": "object",
                                      "anyOf": [
                                        {
                                          "required": [
                                            "macAddress"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddresses"
                                          ]
                                        }
                                      ],
                                      "oneOf": [
                                        {
                                          "required": [
                                            "fixedAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "numDynamicAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddressRange"
                                          ]
                                        }
                                      ],
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "fixedAddresses": {
                                                "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "numDynamicAddresses": {
                                                "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "integer"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "modificationsTriggeredByVnfPkgChange": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource when changing the current VNF package. The attributes that can be included consist of those requested to be modified explicitly in the \"ChangeCurrentVnfPkgRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly during the operation.\n",
              "type": "object",
              "properties": {
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "If present, this attribute signals the new value of the \"vnfProvider\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "If present, this attribute signals the new value of the \"vnfProductName\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "vnfSnapshotInfoId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "grant": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "cancel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "retry": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "rollback": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "fail": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfLcmOpOccs"
      },
      "task": true
    },
    {
      "name": "getVnfLcmOpOccsVnfLcmOpOccId",
      "summary": "Get Operation Status.\nThe API consumer can use this method to retrieve status information about a V",
      "description": "Get Operation Status.\nThe API consumer can use this method to retrieve status information about a VNF lifecycle\nmanagement operation occurrence by reading an \"Individual VNF LCM operation occurrence\" resource.\nThis method shall follow the provisions specified in the tables 5.4.13.3.2-1 and 5.4.13.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfLcmOpOccId",
          "type": "string",
          "info": "Identifier of a VNF lifecycle management operation occurrence. This identifier can be retrieved from the resource\nreferenced by the \"Location\" HTTP header in the response...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfLcmOpOccId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF lifecycle management operation occurrence. Shall be set to the value of the \"id\" attribute in the \"Grant\" representing the associated \"Individual Grant\", if such grant exists.\n",
          "type": "object",
          "required": [
            "id",
            "operationState",
            "stateEnteredTime",
            "startTime",
            "vnfInstanceId",
            "operation",
            "isAutomaticInvocation",
            "isCancelPending"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operationState": {
              "description": "STARTING: The LCM operation is starting. PROCESSING: The LCM operation is currently in execution. COMPLETED: The LCM operation has been completed successfully. FAILED_TEMP: The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED: The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK: The LCM operation is currently being rolled back. ROLLED_BACK: The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n",
              "type": "string",
              "enum": [
                "STARTING",
                "PROCESSING",
                "COMPLETED",
                "FAILED_TEMP",
                "FAILED",
                "ROLLING_BACK",
                "ROLLED_BACK"
              ]
            },
            "stateEnteredTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "startTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "grantId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operation": {
              "description": "Value | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation.    SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF Snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the “Revert-To VNF Snapshot\" LCM operation. CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation.\n",
              "type": "string",
              "enum": [
                "INSTANTIATE",
                "SCALE",
                "SCALE_TO_LEVEL",
                "CHANGE_FLAVOUR",
                "TERMINATE",
                "HEAL",
                "OPERATE",
                "CHANGE_EXT_CONN",
                "MODIFY_INFO",
                "CREATE_SNAPSHOT",
                "REVERT_TO_SNAPSHOT",
                "CHANGE_VNFPKG"
              ]
            },
            "isAutomaticInvocation": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "operationParams": {
              "description": "Input parameters of the LCM operation. This attribute shall be formatted according to the request data type of the related LCM operation. The following mapping between operationType and the data type of this attribute shall apply: * INSTANTIATE: InstantiateVnfRequest * SCALE: ScaleVnfRequest * SCALE_TO_LEVEL: ScaleVnfToLevelRequest * CHANGE_FLAVOUR: ChangeVnfFlavourRequest * OPERATE: OperateVnfRequest * HEAL: HealVnfRequest * CHANGE_EXT_CONN: ChangeExtVnfConnectivityRequest * TERMINATE: TerminateVnfRequest * MODIFY_INFO: VnfInfoModifications * CREATE_SNAPSHOT: CreateVnfSnapshotRequest * REVERT_TO_SNAPSHOT: RevertToVnfSnapshotRequest * CHANGE_VNFPKG: ChangeCurrentVnfPkgRequest\n",
              "type": "object"
            },
            "isCancelPending": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "cancelMode": {
              "description": "Cancellation mode. GRACEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation and shall wait for the ongoing resource management operations in the underlying system, typically the VIM, to finish execution or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and shall wait for the granting request to finish execution or time out. After that, the VNFM shall put the operation occurrence into the ROLLED_BACK state. FORCEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation, shall cancel the ongoing resource management operations in the underlying system, typically the VIM, and shall wait for the cancellation to finish or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and put the operation occurrence into the ROLLED_BACK state.\n",
              "type": "string",
              "enum": [
                "GRACEFUL",
                "FORCEFUL"
              ]
            },
            "error": {
              "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
              "type": "object",
              "required": [
                "status",
                "detail"
              ],
              "properties": {
                "type": {
                  "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                  "type": "string"
                },
                "title": {
                  "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                  "type": "string"
                },
                "status": {
                  "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                  "type": "integer"
                },
                "detail": {
                  "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                  "type": "string"
                },
                "instance": {
                  "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                  "type": "string"
                }
              }
            },
            "resourceChanges": {
              "description": "This attribute contains information about the cumulative changes to virtualised resources that were performed so far by the LCM operation since its start, if applicable.\n",
              "type": "object",
              "properties": {
                "affectedVnfcs": {
                  "description": "Information about VNFC instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VNFCs.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "changeType",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVnfc structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "affectedVnfcCpIds": {
                        "description": "Identifiers of CP(s) of the VNFC instance that were affected by the change. Shall be present for those affected CPs of the VNFC instance that are associated to an external CP of the VNF instance. May be present for further affected CPs of the VNFC instance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "addedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been added. Each value refers to a VirtualStorageResourceInfo item in the VnfInstance that was added to the VNFC. It shall be provided if at least one storage resource was added to the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "removedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been removed. The value contains the identifier of a VirtualStorageResourceInfo item that has been removed from the VNFC, and might no longer exist in the VnfInstance. It shall be provided if at least one storage resource was removed from the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "affectedVirtualLinks": {
                  "description": "Information about VL instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter. For a particular affected VL, there shall be as many \"AffectedVirtualLink\" entries as needed for signalling the different types of changes, i.e., one per virtual link and change type. For instance, in the case of signaling affected VL instances involving the addition of a particular VL instance with links ports, one \"AffectedVirtualLink\" entry signals the addition of the VL by using the \"changeType\" attribute of \"AffectedVirtualLink\" structure equal to \"ADDED\", and another \"AffectedVirtualLink\" entry signals the addition of VNF link ports of the VL by using the \"changeType\" equal to \"LINK_PORT_ADDED\".\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VLs, and added or removed VNF link ports.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "changeType",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY * LINK_PORT_ADDED * LINK_PORT_REMOVED For a temporary resource, an AffectedVirtualLink structure exists as long as the temporary resource exists. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY",
                          "LINK_PORT_ADDED",
                          "LINK_PORT_REMOVED"
                        ]
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPortIds": {
                        "description": "Identifiers of the link ports of the affected VL (reference to the vnfLinkPortInfo) related to the change. Each identifier references a \"VnfLinkPortInfo\" structure. Shall be set when changeType is equal to \"LINK_PORT_ADDED\" or \"LINK_PORT_REMOVED\", and the related “VnfLinkPortInfo” structures are present (case \"added\") or have been present (case \"removed\") in the “VnfVirtualLinkResourceInfo” or \"ExtManagedVirtualLinkInfo\" structures that are represented by the \"vnfVirtualLinkResourceInfo\" or \"extManagedVirtualLinkInfo\" attribute in the \"VnfInstance\" structure. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "affectedExtLinkPorts": {
                  "description": "Information about external VNF link ports that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added and deleted external link ports (link ports attached to external virtual links).\n",
                    "type": "object",
                    "required": [
                      "id",
                      "changeType",
                      "extCpInstanceId",
                      "resourceHandle"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: -\tADDED -\tREMOVED\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED"
                        ]
                      },
                      "extCpInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "affectedVirtualStorages": {
                  "description": "Information about virtualised storage instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary virtual storage resources.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "changeType",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVirtualStorage structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "changedInfo": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource. The attributes that can be included consist of those requested to be modified explicitly in the \"VnfInfoModificationRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly e.g. when modifying the referenced VNF package.\n",
              "type": "object",
              "properties": {
                "vnfInstanceName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfInstanceDescription": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vimConnectionInfo": {
                  "description": "If present, this attribute signals modifications the \"vimConnectionInfo\"  attribute array in \"VnfInstance\".\n",
                  "type": "object",
                  "additionalProperties": {
                    "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                    "type": "object",
                    "required": [
                      "vimType"
                    ],
                    "properties": {
                      "vimId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vimType": {
                        "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                        "type": "string"
                      },
                      "interfaceInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "accessInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extra": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "changedExtConnectivity": {
              "description": "Information about changed external connectivity, if applicable. This allows the NFVO to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "resourceHandle",
                  "currentVnfExtCpData"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceHandle": {
                    "required": [
                      "resourceId"
                    ],
                    "type": "object",
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      },
                      "vimLevelResourceType": {
                        "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                        "type": "string"
                      }
                    }
                  },
                  "extLinkPorts": {
                    "description": "Link ports of this VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "cpInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "currentVnfExtCpData": {
                    "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents configuration information for external CPs created from a CPD.\n",
                      "type": "object",
                      "required": [
                        "cpdId"
                      ],
                      "properties": {
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfig": {
                          "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                          "type": "object",
                          "additionalProperties": {
                            "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                            "anyOf": [
                              {
                                "required": [
                                  "linkPortId"
                                ]
                              },
                              {
                                "required": [
                                  "cpProtocolData"
                                ]
                              }
                            ],
                            "type": "object",
                            "properties": {
                              "parentCpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "linkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolData": {
                                "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents network protocol data.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents network address data for IP over Ethernet.\n",
                                      "type": "object",
                                      "anyOf": [
                                        {
                                          "required": [
                                            "macAddress"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddresses"
                                          ]
                                        }
                                      ],
                                      "oneOf": [
                                        {
                                          "required": [
                                            "fixedAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "numDynamicAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddressRange"
                                          ]
                                        }
                                      ],
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "fixedAddresses": {
                                                "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "numDynamicAddresses": {
                                                "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "integer"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "modificationsTriggeredByVnfPkgChange": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource when changing the current VNF package. The attributes that can be included consist of those requested to be modified explicitly in the \"ChangeCurrentVnfPkgRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly during the operation.\n",
              "type": "object",
              "properties": {
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "If present, this attribute signals the new value of the \"vnfProvider\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "If present, this attribute signals the new value of the \"vnfProductName\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "vnfSnapshotInfoId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "grant": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "cancel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "retry": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "rollback": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "fail": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfLcmOpOccsVnfLcmOpOccId"
      },
      "task": true
    },
    {
      "name": "postVnfLcmOpOccsVnfLcmOpOccIdRetry",
      "summary": "The POST method initiates retrying a VNF lifecycle operation if that operation\nhas experienced a te",
      "description": "The POST method initiates retrying a VNF lifecycle operation if that operation\nhas experienced a temporary failure, i.e. the related \"Individual VNF LCM operation occurrence\"\nresource is in \"FAILED_TEMP\" state.\nThis method shall follow the provisions specified in the tables 5.4.14.3.1-1 and 5.4.14.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nIn case of success of processing the asynchronous request, the \"operationState\" attribute\nin the representation...(description truncated)",
      "input": [
        {
          "name": "vnfLcmOpOccId",
          "type": "string",
          "info": "Identifier of a VNF lifecycle management operation occurrence. This identifier can be retrieved from the resource\nreferenced by the \"Location\" HTTP header in the response...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfLcmOpOccId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfLcmOpOccsVnfLcmOpOccIdRetry"
      },
      "task": true
    },
    {
      "name": "postVnfLcmOpOccsVnfLcmOpOccIdRollback",
      "summary": "The POST method initiates rolling back a VNF lifecycle operation if that operation\nhas experienced",
      "description": "The POST method initiates rolling back a VNF lifecycle operation if that operation\nhas experienced a temporary failure, i.e. the related \"Individual VNF LCM operation occurrence\"\nresource is in \"FAILED_TEMP\" state.\nIn case of rolling back an occurrence of the \"InstantiateVnf\" operation, the VNFM shall\nrequest to the VIM the release of the virtualised resources that were allocated for the related VNF instance.\nThe \"rollback\" task shall be supported by the VNFM for any VNF LCM operation occurrence...(description truncated)",
      "input": [
        {
          "name": "vnfLcmOpOccId",
          "type": "string",
          "info": "Identifier of a VNF lifecycle management operation occurrence. This identifier can be retrieved from the resource\nreferenced by the \"Location\" HTTP header in the response...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfLcmOpOccId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfLcmOpOccsVnfLcmOpOccIdRollback"
      },
      "task": true
    },
    {
      "name": "postVnfLcmOpOccsVnfLcmOpOccIdFail",
      "summary": "The POST method marks a VNF lifecycle management operation occurrence as \"finally failed\"\nif that o",
      "description": "The POST method marks a VNF lifecycle management operation occurrence as \"finally failed\"\nif that operation occurrence is in \"FAILED_TEMP\" state.\nThis method shall follow the provisions specified in the tables 5.4.16.3.1-1 and 5.4.16.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nIn case of success, the \"operationState\" attribute in the representation of the parent resource\nshall be changed to \"FAILED\" and the applicable \"result\" notification according ...(description truncated)",
      "input": [
        {
          "name": "vnfLcmOpOccId",
          "type": "string",
          "info": "Identifier of a VNF lifecycle management operation occurrence. This identifier can be retrieved from the resource\nreferenced by the \"Location\" HTTP header in the response...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfLcmOpOccId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a VNF lifecycle management operation occurrence. Shall be set to the value of the \"id\" attribute in the \"Grant\" representing the associated \"Individual Grant\", if such grant exists.\n",
          "type": "object",
          "required": [
            "id",
            "operationState",
            "stateEnteredTime",
            "startTime",
            "vnfInstanceId",
            "operation",
            "isAutomaticInvocation",
            "isCancelPending"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operationState": {
              "description": "STARTING: The LCM operation is starting. PROCESSING: The LCM operation is currently in execution. COMPLETED: The LCM operation has been completed successfully. FAILED_TEMP: The LCM operation has failed and execution has stopped, but the execution of the operation is not considered to be closed. FAILED: The LCM operation has failed and it cannot be retried or rolled back, as it is determined that such action won't succeed. ROLLING_BACK: The LCM operation is currently being rolled back. ROLLED_BACK: The LCM operation has been successfully rolled back, i.e. The state of the VNF prior to the original operation invocation has been restored as closely as possible.\n",
              "type": "string",
              "enum": [
                "STARTING",
                "PROCESSING",
                "COMPLETED",
                "FAILED_TEMP",
                "FAILED",
                "ROLLING_BACK",
                "ROLLED_BACK"
              ]
            },
            "stateEnteredTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "startTime": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "grantId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "operation": {
              "description": "Value | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation.    SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation. MODIFY_INFO | Represents the \"Modify VNF Information\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF Snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the “Revert-To VNF Snapshot\" LCM operation. CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation.\n",
              "type": "string",
              "enum": [
                "INSTANTIATE",
                "SCALE",
                "SCALE_TO_LEVEL",
                "CHANGE_FLAVOUR",
                "TERMINATE",
                "HEAL",
                "OPERATE",
                "CHANGE_EXT_CONN",
                "MODIFY_INFO",
                "CREATE_SNAPSHOT",
                "REVERT_TO_SNAPSHOT",
                "CHANGE_VNFPKG"
              ]
            },
            "isAutomaticInvocation": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "operationParams": {
              "description": "Input parameters of the LCM operation. This attribute shall be formatted according to the request data type of the related LCM operation. The following mapping between operationType and the data type of this attribute shall apply: * INSTANTIATE: InstantiateVnfRequest * SCALE: ScaleVnfRequest * SCALE_TO_LEVEL: ScaleVnfToLevelRequest * CHANGE_FLAVOUR: ChangeVnfFlavourRequest * OPERATE: OperateVnfRequest * HEAL: HealVnfRequest * CHANGE_EXT_CONN: ChangeExtVnfConnectivityRequest * TERMINATE: TerminateVnfRequest * MODIFY_INFO: VnfInfoModifications * CREATE_SNAPSHOT: CreateVnfSnapshotRequest * REVERT_TO_SNAPSHOT: RevertToVnfSnapshotRequest * CHANGE_VNFPKG: ChangeCurrentVnfPkgRequest\n",
              "type": "object"
            },
            "isCancelPending": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "cancelMode": {
              "description": "Cancellation mode. GRACEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation and shall wait for the ongoing resource management operations in the underlying system, typically the VIM, to finish execution or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and shall wait for the granting request to finish execution or time out. After that, the VNFM shall put the operation occurrence into the ROLLED_BACK state. FORCEFUL: If the VNF LCM operation occurrence is in \"PROCESSING\" or \"ROLLING_BACK\" state, the VNFM shall not start any new resource management operation, shall cancel the ongoing resource management operations in the underlying system, typically the VIM, and shall wait for the cancellation to finish or to time out. After that, the VNFM shall put the operation occurrence into the FAILED_TEMP state. If the VNF LCM operation occurrence is in \"STARTING\" state, the VNFM shall not start any resource management operation and put the operation occurrence into the ROLLED_BACK state.\n",
              "type": "string",
              "enum": [
                "GRACEFUL",
                "FORCEFUL"
              ]
            },
            "error": {
              "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
              "type": "object",
              "required": [
                "status",
                "detail"
              ],
              "properties": {
                "type": {
                  "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                  "type": "string"
                },
                "title": {
                  "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                  "type": "string"
                },
                "status": {
                  "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                  "type": "integer"
                },
                "detail": {
                  "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                  "type": "string"
                },
                "instance": {
                  "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                  "type": "string"
                }
              }
            },
            "resourceChanges": {
              "description": "This attribute contains information about the cumulative changes to virtualised resources that were performed so far by the LCM operation since its start, if applicable.\n",
              "type": "object",
              "properties": {
                "affectedVnfcs": {
                  "description": "Information about VNFC instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VNFCs.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vduId",
                      "changeType",
                      "computeResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vduId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVnfc structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "computeResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "affectedVnfcCpIds": {
                        "description": "Identifiers of CP(s) of the VNFC instance that were affected by the change. Shall be present for those affected CPs of the VNFC instance that are associated to an external CP of the VNF instance. May be present for further affected CPs of the VNFC instance.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "addedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been added. Each value refers to a VirtualStorageResourceInfo item in the VnfInstance that was added to the VNFC. It shall be provided if at least one storage resource was added to the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      },
                      "removedStorageResourceIds": {
                        "description": "References to VirtualStorage resources that have been removed. The value contains the identifier of a VirtualStorageResourceInfo item that has been removed from the VNFC, and might no longer exist in the VnfInstance. It shall be provided if at least one storage resource was removed from the VNFC.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "affectedVirtualLinks": {
                  "description": "Information about VL instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter. For a particular affected VL, there shall be as many \"AffectedVirtualLink\" entries as needed for signalling the different types of changes, i.e., one per virtual link and change type. For instance, in the case of signaling affected VL instances involving the addition of a particular VL instance with links ports, one \"AffectedVirtualLink\" entry signals the addition of the VL by using the \"changeType\" attribute of \"AffectedVirtualLink\" structure equal to \"ADDED\", and another \"AffectedVirtualLink\" entry signals the addition of VNF link ports of the VL by using the \"changeType\" equal to \"LINK_PORT_ADDED\".\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary VLs, and added or removed VNF link ports.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfVirtualLinkDescId",
                      "changeType",
                      "networkResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "vnfVirtualLinkDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY * LINK_PORT_ADDED * LINK_PORT_REMOVED For a temporary resource, an AffectedVirtualLink structure exists as long as the temporary resource exists. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY",
                          "LINK_PORT_ADDED",
                          "LINK_PORT_REMOVED"
                        ]
                      },
                      "networkResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfLinkPortIds": {
                        "description": "Identifiers of the link ports of the affected VL (reference to the vnfLinkPortInfo) related to the change. Each identifier references a \"VnfLinkPortInfo\" structure. Shall be set when changeType is equal to \"LINK_PORT_ADDED\" or \"LINK_PORT_REMOVED\", and the related “VnfLinkPortInfo” structures are present (case \"added\") or have been present (case \"removed\") in the “VnfVirtualLinkResourceInfo” or \"ExtManagedVirtualLinkInfo\" structures that are represented by the \"vnfVirtualLinkResourceInfo\" or \"extManagedVirtualLinkInfo\" attribute in the \"VnfInstance\" structure. When signalling the addition (LINK_PORT_ADDED) or removal (LINK_PORT_REMOVED) of VNF link ports, the \"networkResource\" attribute refers to the affected virtual link instance, not the link port instance. The resource handles of the affected VNF link ports can be found by dereferencing the identifiers in the \"vnfLinkPortIds\" attribute.\n",
                        "type": "array",
                        "items": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "affectedExtLinkPorts": {
                  "description": "Information about external VNF link ports that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added and deleted external link ports (link ports attached to external virtual links).\n",
                    "type": "object",
                    "required": [
                      "id",
                      "changeType",
                      "extCpInstanceId",
                      "resourceHandle"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: -\tADDED -\tREMOVED\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED"
                        ]
                      },
                      "extCpInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "resourceHandle": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "affectedVirtualStorages": {
                  "description": "Information about virtualised storage instances that were affected during the lifecycle operation. This allows the API consumer to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
                  "type": "array",
                  "items": {
                    "description": "This type provides information about added, deleted, modified and temporary virtual storage resources.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "virtualStorageDescId",
                      "changeType",
                      "storageResource"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "virtualStorageDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "changeType": {
                        "description": "Signals the type of change. Permitted values: * ADDED * REMOVED * MODIFIED * TEMPORARY For a temporary resource, an AffectedVirtualStorage structure exists as long as the temporary resource exists.\n",
                        "type": "string",
                        "enum": [
                          "ADDED",
                          "REMOVED",
                          "MODIFIED",
                          "TEMPORARY"
                        ]
                      },
                      "storageResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "resourceDefinitionId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "zoneId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                }
              }
            },
            "changedInfo": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource. The attributes that can be included consist of those requested to be modified explicitly in the \"VnfInfoModificationRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly e.g. when modifying the referenced VNF package.\n",
              "type": "object",
              "properties": {
                "vnfInstanceName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfInstanceDescription": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vimConnectionInfo": {
                  "description": "If present, this attribute signals modifications the \"vimConnectionInfo\"  attribute array in \"VnfInstance\".\n",
                  "type": "object",
                  "additionalProperties": {
                    "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                    "type": "object",
                    "required": [
                      "vimType"
                    ],
                    "properties": {
                      "vimId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vimType": {
                        "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                        "type": "string"
                      },
                      "interfaceInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "accessInfo": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extra": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "changedExtConnectivity": {
              "description": "Information about changed external connectivity, if applicable. This allows the NFVO to obtain the information contained in the latest \"result\" notification if it has not received it due to an error or a wrongly configured subscription filter.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "resourceHandle",
                  "currentVnfExtCpData"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceHandle": {
                    "required": [
                      "resourceId"
                    ],
                    "type": "object",
                    "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      },
                      "vimLevelResourceType": {
                        "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                        "type": "string"
                      }
                    }
                  },
                  "extLinkPorts": {
                    "description": "Link ports of this VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "cpInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        }
                      }
                    }
                  },
                  "currentVnfExtCpData": {
                    "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents configuration information for external CPs created from a CPD.\n",
                      "type": "object",
                      "required": [
                        "cpdId"
                      ],
                      "properties": {
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfig": {
                          "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                          "type": "object",
                          "additionalProperties": {
                            "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                            "anyOf": [
                              {
                                "required": [
                                  "linkPortId"
                                ]
                              },
                              {
                                "required": [
                                  "cpProtocolData"
                                ]
                              }
                            ],
                            "type": "object",
                            "properties": {
                              "parentCpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "linkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolData": {
                                "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents network protocol data.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents network address data for IP over Ethernet.\n",
                                      "type": "object",
                                      "anyOf": [
                                        {
                                          "required": [
                                            "macAddress"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddresses"
                                          ]
                                        }
                                      ],
                                      "oneOf": [
                                        {
                                          "required": [
                                            "fixedAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "numDynamicAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddressRange"
                                          ]
                                        }
                                      ],
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "fixedAddresses": {
                                                "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "numDynamicAddresses": {
                                                "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "integer"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "modificationsTriggeredByVnfPkgChange": {
              "description": "This type represents attribute modifications that were performed on an \"Individual VNF instance\" resource when changing the current VNF package. The attributes that can be included consist of those requested to be modified explicitly in the \"ChangeCurrentVnfPkgRequest\" data structure, and additional attributes of the \"VnfInstance\" data structure that were modified implicitly during the operation.\n",
              "type": "object",
              "properties": {
                "vnfConfigurableProperties": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "metadata": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "extensions": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfProvider": {
                  "description": "If present, this attribute signals the new value of the \"vnfProvider\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfProductName": {
                  "description": "If present, this attribute signals the new value of the \"vnfProductName\" attribute in \"VnfInstance\". If present, this attribute (which depends on the value of the \"vnfdId\" attribute) was modified implicitly during the related operation, and contains a copy of  the value of he related attribute from the VNFD in the VNF Package identified by the \"vnfdId\" attribute.\n",
                  "type": "string"
                },
                "vnfSoftwareVersion": {
                  "description": "A version.\n",
                  "type": "string"
                },
                "vnfdVersion": {
                  "description": "A version.\n",
                  "type": "string"
                }
              }
            },
            "vnfSnapshotInfoId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "grant": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "cancel": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "retry": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "rollback": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "fail": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfSnapshot": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfLcmOpOccsVnfLcmOpOccIdFail"
      },
      "task": true
    },
    {
      "name": "postVnfLcmOpOccsVnfLcmOpOccIdCancel",
      "summary": "The POST method initiates cancelling an ongoing VNF lifecycle operation while\nit is being executed",
      "description": "The POST method initiates cancelling an ongoing VNF lifecycle operation while\nit is being executed or rolled back, i.e. the related \"Individual VNF LCM operation occurrence\"\nresource is either in \"STARTING\" or \"PROCESSING\" or \"ROLLING_BACK\" state.\nThis method shall follow the provisions specified in the tables 5.4.17.3.1-1 and 5.4.17.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nBefore returning the \"202 Accepted\" response, the VNFM shall update the \"i...(description truncated)",
      "input": [
        {
          "name": "vnfLcmOpOccId",
          "type": "string",
          "info": "Identifier of a VNF lifecycle management operation occurrence. This identifier can be retrieved from the resource\nreferenced by the \"Location\" HTTP header in the response...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfLcmOpOccId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfLcmOpOccsVnfLcmOpOccIdCancel"
      },
      "task": true
    },
    {
      "name": "postVnfSnapshots",
      "summary": "The POST method creates a new \"Individual VNF snapshot\" resource.\n\nAs a result of successfully exec",
      "description": "The POST method creates a new \"Individual VNF snapshot\" resource.\n\nAs a result of successfully executing this method, a new \"Individual VNF snapshot\" \nresource as defined in clause 5.4.24 shall have been created.\n\nThe creation of an \"Individual VNF snapshot\" resource can be performed for two reasons:\n- To create an \"Individual VNF snapshot\" resources that can later be populated by a \nnew VNF snapshot taken from a VNF instance (refer to clause 5.4.21.3.1).\n- To create an \"Individual VNF snapshot\"...(description truncated)",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": "The VNF snapshot resource creation parameters, as defined in clause 5.5.2.20.\n: {\"vnfSnapshotPkgId\": \"string\", \"vnfSnapshot\": {\"id\": \"string\", \"vnfInstanceId\": \"string\", \"creationStartedAt\": \"string\", \"creationFinishedAt\": \"string\", \"vnfdId\": \"string\", \"vnfInstance\": {\"id\": \"string\", \"vnfInstanceName\": \"string\", \"vnfInstanceDescription\": \"string\", \"vnfdId\": \"string\", \"vnfProvider\": \"string\", \"vnfProductName\": \"string\", \"vnfSoftwareVersion\": \"string\", \"vnfdVersion\": \"string\", \"vnfConfigurableProperties\": \"object\", \"vimConnectionInfo\": \"object\", \"instantiationState\": \"Must be one of [NOT_INSTANTIATED, INSTANTIATED]\", \"instantiatedVnfInfo\": {\"flavourId\": \"string\", \"vnfState\": \"Must be one of [STARTED, STOPPED]\", \"scaleStatus\": [{\"aspectId\": \"string\", \"vnfdId\": \"string\", \"scaleLevel\": 123}], \"maxScaleLevels\": [{\"aspectId\": \"string\", \"vnfdId\": \"string\", \"scaleLevel\": 123}], \"extCpInfo\": [{\"id\": \"string\", \"cpdId\": \"string\", \"cpConfigId\": \"string\", \"vnfdId\": \"string\", \"cpProtocolInfo\": [{\"layerProtocol\": \"Must be one of [IP_OVER_ETHERNET]\", \"ipOverEthernet\": {\"macAddress\": \"string\", \"segmentationId\": \"string\", \"ipAddresses\": [{\"type\": \"Must be one of [IPV4, IPV6]\", \"addresses\": \"array\", \"isDynamic\": \"boolean\", \"addressRange\": {\"minAddress\": \"string\", \"maxAddress\": \"string\"}, \"subnetId\": \"string\"}]}}], \"extLinkPortId\": \"string\", \"metadata\": \"object\", \"associatedVnfcCpId\": \"string\", \"associatedVnfVirtualLinkId\": \"string\"}], \"extVirtualLinkInfo\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\"}], \"currentVnfExtCpData\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}]}], \"extManagedVirtualLinkInfo\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vnfdId\": \"string\", \"networkResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"vnfLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\", \"cpInstanceType\": \"Must be one of [VNFC_CP, EXT_CP]\"}], \"extManagedMultisiteVirtualLinkId\": \"string\"}], \"monitoringParameters\": [{\"id\": \"string\", \"vnfdId\": \"string\", \"name\": \"string\", \"performanceMetric\": \"string\"}], \"localizationLanguage\": \"string\", \"vnfcResourceInfo\": [{\"id\": \"string\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"computeResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"storageResourceIds\": \"array\", \"reservationId\": \"string\", \"vnfcCpInfo\": [{\"id\": \"string\", \"cpdId\": \"string\", \"vnfExtCpId\": \"string\", \"cpProtocolInfo\": [{\"layerProtocol\": \"Must be one of [IP_OVER_ETHERNET]\", \"ipOverEthernet\": {\"macAddress\": \"string\", \"segmentationId\": \"string\", \"ipAddresses\": [{\"type\": \"Must be one of [IPV4, IPV6]\", \"addresses\": \"array\", \"isDynamic\": \"boolean\", \"addressRange\": {\"minAddress\": \"string\", \"maxAddress\": \"string\"}, \"subnetId\": \"string\"}]}}], \"vnfLinkPortId\": \"string\", \"metadata\": \"object\"}], \"metadata\": \"object\"}], \"virtualLinkResourceInfo\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vnfdId\": \"string\", \"networkResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"reservationId\": \"string\", \"vnfLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\", \"cpInstanceType\": \"Must be one of [VNFC_CP, EXT_CP]\"}], \"metadata\": \"object\"}], \"virtualStorageResourceInfo\": [{\"id\": \"string\", \"virtualStorageDescId\": \"string\", \"vnfdId\": \"string\", \"storageResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"reservationId\": \"string\", \"metadata\": \"object\"}]}, \"metadata\": \"object\", \"extensions\": \"undefined\", \"_links\": {\"self\": {\"href\": \"string\"}, \"indicators\": {\"href\": \"string\"}, \"instantiate\": {\"href\": \"string\"}, \"terminate\": {\"href\": \"string\"}, \"scale\": {\"href\": \"string\"}, \"scaleToLevel\": {\"href\": \"string\"}, \"changeFlavour\": {\"href\": \"string\"}, \"heal\": {\"href\": \"string\"}, \"operate\": {\"href\": \"string\"}, \"changeExtConn\": {\"href\": \"string\"}, \"createSnapshot\": {\"href\": \"string\"}, \"revertToSnapshot\": {\"href\": \"string\"}}}, \"vnfcSnapshots\": [{\"id\": \"string\", \"vnfcInstanceId\": \"string\", \"creationStartedAt\": \"string\", \"creationFinishedAt\": \"string\", \"vnfcResourceInfoId\": \"string\", \"computeSnapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"storageSnapshotResources\": [{\"storageResourceId\": \"string\", \"storageSnapshotResource\": \"object\"}], \"userDefinedData\": \"object\"}], \"vnfStateSnapshotInfo\": {\"checksum\": \"undefined\", \"isEncrypted\": \"undefined\", \"metadata\": \"undefined\"}, \"userDefinedData\": \"object\", \"_links\": {\"self\": {\"href\": \"string\"}, \"vnfStateSnapshot\": {\"href\": \"string\"}}}}",
          "required": true,
          "schema": {
            "description": "This type represents request parameters for the creation of an \"Individual VNF snapshot\" resource which can be\npopulated with content obtained by invoking the \"Create VNF snapshot\" LCM operation or extracted from a\nVNF snapshot package. It shall comply with the provisions defined in table 5.5.2.20-1.\n",
            "type": "object",
            "properties": {
              "vnfSnapshotPkgId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshot": {
                "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
                "type": "object",
                "required": [
                  "id",
                  "vnfInstanceId",
                  "triggeredAt",
                  "vnfdId",
                  "vnfInfo",
                  "vnfcSnapshots"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstanceId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "creationStartedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "creationFinishedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "vnfdId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstance": {
                    "description": "This type represents a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfdId",
                      "vnfProvider",
                      "vnfProductName",
                      "vnfSoftwareVersion",
                      "vnfdVersion",
                      "instantiationState"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfInstanceName": {
                        "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfInstanceDescription": {
                        "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfProvider": {
                        "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfProductName": {
                        "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfSoftwareVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfdVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfConfigurableProperties": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "vimConnectionInfo": {
                        "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                        "type": "object",
                        "additionalProperties": {
                          "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                          "type": "object",
                          "required": [
                            "vimType"
                          ],
                          "properties": {
                            "vimId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "vimType": {
                              "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                              "type": "string"
                            },
                            "interfaceInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "accessInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "extra": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "instantiationState": {
                        "description": "The instantiation state of the VNF.\n",
                        "type": "string",
                        "enum": [
                          "NOT_INSTANTIATED",
                          "INSTANTIATED"
                        ]
                      },
                      "instantiatedVnfInfo": {
                        "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                        "type": "object",
                        "required": [
                          "flavourId",
                          "vnfState"
                        ],
                        "properties": {
                          "flavourId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "vnfState": {
                            "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                            "type": "string",
                            "enum": [
                              "STARTED",
                              "STOPPED"
                            ]
                          },
                          "scaleStatus": {
                            "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "maxScaleLevels": {
                            "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "extCpInfo": {
                            "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "cpdId",
                                "cpConfigId",
                                "cpProtocolInfo"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "cpdId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "cpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolInfo": {
                                  "description": "Network protocol information for this CP.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents information about a network address that has been assigned.\n",
                                        "type": "object",
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "addresses": {
                                                  "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "isDynamic": {
                                                  "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                  "type": "boolean"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                },
                                "extLinkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                },
                                "associatedVnfcCpId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "associatedVnfVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "extVirtualLinkInfo": {
                            "description": "Information about the external VLs the VNF instance is connected to.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "resourceHandle",
                                "currentVnfExtCpData"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceHandle": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "extLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier with the intention of being globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "currentVnfExtCpData": {
                                  "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                    "type": "object",
                                    "required": [
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "cpConfig": {
                                        "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                        "type": "object",
                                        "additionalProperties": {
                                          "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "linkPortId"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "cpProtocolData"
                                              ]
                                            }
                                          ],
                                          "type": "object",
                                          "properties": {
                                            "parentCpConfigId": {
                                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                              "type": "string"
                                            },
                                            "linkPortId": {
                                              "description": "An identifier with the intention of being globally unique.\n",
                                              "type": "string"
                                            },
                                            "cpProtocolData": {
                                              "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                              "type": "array",
                                              "items": {
                                                "description": "This type represents network protocol data.\n",
                                                "type": "object",
                                                "required": [
                                                  "layerProtocol"
                                                ],
                                                "properties": {
                                                  "layerProtocol": {
                                                    "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IP_OVER_ETHERNET"
                                                    ]
                                                  },
                                                  "ipOverEthernet": {
                                                    "description": "This type represents network address data for IP over Ethernet.\n",
                                                    "type": "object",
                                                    "anyOf": [
                                                      {
                                                        "required": [
                                                          "macAddress"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddresses"
                                                        ]
                                                      }
                                                    ],
                                                    "oneOf": [
                                                      {
                                                        "required": [
                                                          "fixedAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "numDynamicAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddressRange"
                                                        ]
                                                      }
                                                    ],
                                                    "properties": {
                                                      "macAddress": {
                                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                        "type": "string"
                                                      },
                                                      "segmentationId": {
                                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                        "type": "string"
                                                      },
                                                      "ipAddresses": {
                                                        "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "type": "object",
                                                          "required": [
                                                            "type"
                                                          ],
                                                          "properties": {
                                                            "type": {
                                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                              "type": "string",
                                                              "enum": [
                                                                "IPV4",
                                                                "IPV6"
                                                              ]
                                                            },
                                                            "fixedAddresses": {
                                                              "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "array",
                                                              "items": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            },
                                                            "numDynamicAddresses": {
                                                              "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "integer"
                                                            },
                                                            "addressRange": {
                                                              "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                              "type": "object",
                                                              "required": [
                                                                "minAddress",
                                                                "maxAddress"
                                                              ],
                                                              "properties": {
                                                                "minAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                },
                                                                "maxAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                }
                                                              }
                                                            },
                                                            "subnetId": {
                                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                              "type": "string"
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "extManagedVirtualLinkInfo": {
                            "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "vnfLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "extManagedMultisiteVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "monitoringParameters": {
                            "description": "Active monitoring parameters.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "performanceMetric"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                  "type": "string"
                                },
                                "performanceMetric": {
                                  "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "localizationLanguage": {
                            "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                            "type": "string"
                          },
                          "vnfcResourceInfo": {
                            "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vduId",
                                "computeResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vduId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "computeResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResourceIds": {
                                  "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  }
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfcCpInfo": {
                                  "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "vnfExtCpId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpProtocolInfo": {
                                        "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                          "type": "object",
                                          "required": [
                                            "layerProtocol"
                                          ],
                                          "properties": {
                                            "layerProtocol": {
                                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                              "type": "string",
                                              "enum": [
                                                "IP_OVER_ETHERNET"
                                              ]
                                            },
                                            "ipOverEthernet": {
                                              "description": "This type represents information about a network address that has been assigned.\n",
                                              "type": "object",
                                              "properties": {
                                                "macAddress": {
                                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                  "type": "string"
                                                },
                                                "segmentationId": {
                                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                  "type": "string"
                                                },
                                                "ipAddresses": {
                                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "type": "object",
                                                    "required": [
                                                      "type"
                                                    ],
                                                    "properties": {
                                                      "type": {
                                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                        "type": "string",
                                                        "enum": [
                                                          "IPV4",
                                                          "IPV6"
                                                        ]
                                                      },
                                                      "addresses": {
                                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      },
                                                      "isDynamic": {
                                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                        "type": "boolean"
                                                      },
                                                      "addressRange": {
                                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "object",
                                                        "required": [
                                                          "minAddress",
                                                          "maxAddress"
                                                        ],
                                                        "properties": {
                                                          "minAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          },
                                                          "maxAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      },
                                                      "subnetId": {
                                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      },
                                      "vnfLinkPortId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "metadata": {
                                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                        "type": "object"
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualLinkResourceInfo": {
                            "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfLinkPorts": {
                                  "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualStorageResourceInfo": {
                            "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "virtualStorageDescId",
                                "storageResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "virtualStorageDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extensions": {
                        "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                      },
                      "_links": {
                        "description": "Links to resources related to this resource.\n",
                        "type": "object",
                        "required": [
                          "self"
                        ],
                        "properties": {
                          "self": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "indicators": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "instantiate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "terminate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scale": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scaleToLevel": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeFlavour": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "heal": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "operate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeExtConn": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "createSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "revertToSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "vnfcSnapshots": {
                    "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents a VNFC snapshot.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vnfcInstanceId",
                        "triggeredAt",
                        "vnfcResourceId"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "vnfcInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "creationStartedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "creationFinishedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfoId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "computeSnapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "storageSnapshotResources": {
                          "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "storageResourceId"
                            ],
                            "properties": {
                              "storageResourceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "storageSnapshotResource": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "userDefinedData": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "vnfStateSnapshotInfo": {
                    "description": "This type represents information about VNF-specific state snapshot data.\n",
                    "type": "object",
                    "required": [
                      "checksum",
                      "isEncrypted"
                    ],
                    "properties": {
                      "checksum": {
                        "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                      },
                      "isEncrypted": {
                        "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                      },
                      "metadata": {
                        "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                      }
                    }
                  },
                  "userDefinedData": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "_links": {
                    "description": "Links to resources related to this resource.\n",
                    "type": "object",
                    "required": [
                      "self"
                    ],
                    "properties": {
                      "self": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfStateSnapshot": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents an \"Individual VNF snapshot\" resource. It shall comply with the provisions defined in table 5.5.2.22-1.\n",
          "type": "object",
          "required": [
            "id",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfSnapshotPkgId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfSnapshot": {
              "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
              "type": "object",
              "required": [
                "id",
                "vnfInstanceId",
                "triggeredAt",
                "vnfdId",
                "vnfInfo",
                "vnfcSnapshots"
              ],
              "properties": {
                "id": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfInstanceId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "creationStartedAt": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "creationFinishedAt": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfInstance": {
                  "description": "This type represents a VNF instance.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "vnfdId",
                    "vnfProvider",
                    "vnfProductName",
                    "vnfSoftwareVersion",
                    "vnfdVersion",
                    "instantiationState"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfInstanceName": {
                      "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                      "type": "string"
                    },
                    "vnfInstanceDescription": {
                      "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfProvider": {
                      "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                      "type": "string"
                    },
                    "vnfProductName": {
                      "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                      "type": "string"
                    },
                    "vnfSoftwareVersion": {
                      "description": "A version.\n",
                      "type": "string"
                    },
                    "vnfdVersion": {
                      "description": "A version.\n",
                      "type": "string"
                    },
                    "vnfConfigurableProperties": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "vimConnectionInfo": {
                      "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                      "type": "object",
                      "additionalProperties": {
                        "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                        "type": "object",
                        "required": [
                          "vimType"
                        ],
                        "properties": {
                          "vimId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "vimType": {
                            "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                            "type": "string"
                          },
                          "interfaceInfo": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          },
                          "accessInfo": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          },
                          "extra": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          }
                        }
                      }
                    },
                    "instantiationState": {
                      "description": "The instantiation state of the VNF.\n",
                      "type": "string",
                      "enum": [
                        "NOT_INSTANTIATED",
                        "INSTANTIATED"
                      ]
                    },
                    "instantiatedVnfInfo": {
                      "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                      "type": "object",
                      "required": [
                        "flavourId",
                        "vnfState"
                      ],
                      "properties": {
                        "flavourId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfState": {
                          "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                          "type": "string",
                          "enum": [
                            "STARTED",
                            "STOPPED"
                          ]
                        },
                        "scaleStatus": {
                          "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                          "type": "array",
                          "items": {
                            "required": [
                              "aspectId",
                              "scaleLevel"
                            ],
                            "type": "object",
                            "properties": {
                              "aspectId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "scaleLevel": {
                                "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "maxScaleLevels": {
                          "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                          "type": "array",
                          "items": {
                            "required": [
                              "aspectId",
                              "scaleLevel"
                            ],
                            "type": "object",
                            "properties": {
                              "aspectId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "scaleLevel": {
                                "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "extCpInfo": {
                          "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                          "type": "array",
                          "minItems": 1,
                          "items": {
                            "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "cpdId",
                              "cpConfigId",
                              "cpProtocolInfo"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpdId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "cpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolInfo": {
                                "description": "Network protocol information for this CP.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents information about a network address that has been assigned.\n",
                                      "type": "object",
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "addresses": {
                                                "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "isDynamic": {
                                                "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                "type": "boolean"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              },
                              "extLinkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              },
                              "associatedVnfcCpId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "associatedVnfVirtualLinkId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "extVirtualLinkInfo": {
                          "description": "Information about the external VLs the VNF instance is connected to.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "resourceHandle",
                              "currentVnfExtCpData"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceHandle": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "extLinkPorts": {
                                "description": "Link ports of this VL.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    }
                                  }
                                }
                              },
                              "currentVnfExtCpData": {
                                "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                  "type": "object",
                                  "required": [
                                    "cpdId"
                                  ],
                                  "properties": {
                                    "cpdId": {
                                      "description": "An identifier that is unique within a VNF descriptor.\n",
                                      "type": "string"
                                    },
                                    "cpConfig": {
                                      "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                      "type": "object",
                                      "additionalProperties": {
                                        "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "linkPortId"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "cpProtocolData"
                                            ]
                                          }
                                        ],
                                        "type": "object",
                                        "properties": {
                                          "parentCpConfigId": {
                                            "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                            "type": "string"
                                          },
                                          "linkPortId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "cpProtocolData": {
                                            "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                            "type": "array",
                                            "items": {
                                              "description": "This type represents network protocol data.\n",
                                              "type": "object",
                                              "required": [
                                                "layerProtocol"
                                              ],
                                              "properties": {
                                                "layerProtocol": {
                                                  "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IP_OVER_ETHERNET"
                                                  ]
                                                },
                                                "ipOverEthernet": {
                                                  "description": "This type represents network address data for IP over Ethernet.\n",
                                                  "type": "object",
                                                  "anyOf": [
                                                    {
                                                      "required": [
                                                        "macAddress"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "ipAddresses"
                                                      ]
                                                    }
                                                  ],
                                                  "oneOf": [
                                                    {
                                                      "required": [
                                                        "fixedAddresses"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "numDynamicAddresses"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "ipAddressRange"
                                                      ]
                                                    }
                                                  ],
                                                  "properties": {
                                                    "macAddress": {
                                                      "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                      "type": "string"
                                                    },
                                                    "segmentationId": {
                                                      "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                      "type": "string"
                                                    },
                                                    "ipAddresses": {
                                                      "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                      "type": "array",
                                                      "items": {
                                                        "type": "object",
                                                        "required": [
                                                          "type"
                                                        ],
                                                        "properties": {
                                                          "type": {
                                                            "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                            "type": "string",
                                                            "enum": [
                                                              "IPV4",
                                                              "IPV6"
                                                            ]
                                                          },
                                                          "fixedAddresses": {
                                                            "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                            "type": "array",
                                                            "items": {
                                                              "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                              "type": "string"
                                                            }
                                                          },
                                                          "numDynamicAddresses": {
                                                            "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                            "type": "integer"
                                                          },
                                                          "addressRange": {
                                                            "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                            "type": "object",
                                                            "required": [
                                                              "minAddress",
                                                              "maxAddress"
                                                            ],
                                                            "properties": {
                                                              "minAddress": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              },
                                                              "maxAddress": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            }
                                                          },
                                                          "subnetId": {
                                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "extManagedVirtualLinkInfo": {
                          "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "vnfVirtualLinkDescId",
                              "networkResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfVirtualLinkDescId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "networkResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "vnfLinkPorts": {
                                "description": "Link ports of this VL.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpInstanceType": {
                                      "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                      "type": "string",
                                      "enum": [
                                        "VNFC_CP",
                                        "EXT_CP"
                                      ]
                                    }
                                  }
                                }
                              },
                              "extManagedMultisiteVirtualLinkId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "monitoringParameters": {
                          "description": "Active monitoring parameters.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "performanceMetric"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "name": {
                                "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                "type": "string"
                              },
                              "performanceMetric": {
                                "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "localizationLanguage": {
                          "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfo": {
                          "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "vduId",
                              "computeResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vduId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "computeResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "storageResourceIds": {
                                "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                "type": "array",
                                "items": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                }
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfcCpInfo": {
                                "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "cpdId"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpdId": {
                                      "description": "An identifier that is unique within a VNF descriptor.\n",
                                      "type": "string"
                                    },
                                    "vnfExtCpId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpProtocolInfo": {
                                      "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                      "type": "array",
                                      "items": {
                                        "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                        "type": "object",
                                        "required": [
                                          "layerProtocol"
                                        ],
                                        "properties": {
                                          "layerProtocol": {
                                            "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                            "type": "string",
                                            "enum": [
                                              "IP_OVER_ETHERNET"
                                            ]
                                          },
                                          "ipOverEthernet": {
                                            "description": "This type represents information about a network address that has been assigned.\n",
                                            "type": "object",
                                            "properties": {
                                              "macAddress": {
                                                "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                "type": "string"
                                              },
                                              "segmentationId": {
                                                "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                "type": "string"
                                              },
                                              "ipAddresses": {
                                                "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "type": "object",
                                                  "required": [
                                                    "type"
                                                  ],
                                                  "properties": {
                                                    "type": {
                                                      "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                      "type": "string",
                                                      "enum": [
                                                        "IPV4",
                                                        "IPV6"
                                                      ]
                                                    },
                                                    "addresses": {
                                                      "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                      "type": "array",
                                                      "items": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    },
                                                    "isDynamic": {
                                                      "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                      "type": "boolean"
                                                    },
                                                    "addressRange": {
                                                      "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                      "type": "object",
                                                      "required": [
                                                        "minAddress",
                                                        "maxAddress"
                                                      ],
                                                      "properties": {
                                                        "minAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        },
                                                        "maxAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      }
                                                    },
                                                    "subnetId": {
                                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    },
                                    "vnfLinkPortId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "metadata": {
                                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                      "type": "object"
                                    }
                                  }
                                }
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "virtualLinkResourceInfo": {
                          "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "vnfVirtualLinkDescId",
                              "networkResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfVirtualLinkDescId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "networkResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfLinkPorts": {
                                "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpInstanceType": {
                                      "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                      "type": "string",
                                      "enum": [
                                        "VNFC_CP",
                                        "EXT_CP"
                                      ]
                                    }
                                  }
                                }
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "virtualStorageResourceInfo": {
                          "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "virtualStorageDescId",
                              "storageResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "virtualStorageDescId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "storageResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        }
                      }
                    },
                    "metadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extensions": {
                      "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                    },
                    "_links": {
                      "description": "Links to resources related to this resource.\n",
                      "type": "object",
                      "required": [
                        "self"
                      ],
                      "properties": {
                        "self": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "indicators": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "instantiate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "terminate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "scale": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "scaleToLevel": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "changeFlavour": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "heal": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "operate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "changeExtConn": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "createSnapshot": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "revertToSnapshot": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "vnfcSnapshots": {
                  "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents a VNFC snapshot.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfcInstanceId",
                      "triggeredAt",
                      "vnfcResourceId"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "vnfcInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "creationStartedAt": {
                        "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                        "type": "string"
                      },
                      "creationFinishedAt": {
                        "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                        "type": "string"
                      },
                      "vnfcResourceInfoId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "computeSnapshotResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "storageSnapshotResources": {
                        "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "storageResourceId"
                          ],
                          "properties": {
                            "storageResourceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "storageSnapshotResource": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "userDefinedData": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "vnfStateSnapshotInfo": {
                  "description": "This type represents information about VNF-specific state snapshot data.\n",
                  "type": "object",
                  "required": [
                    "checksum",
                    "isEncrypted"
                  ],
                  "properties": {
                    "checksum": {
                      "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                    },
                    "isEncrypted": {
                      "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                    },
                    "metadata": {
                      "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                    }
                  }
                },
                "userDefinedData": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "_links": {
                  "description": "Links to resources related to this resource.\n",
                  "type": "object",
                  "required": [
                    "self"
                  ],
                  "properties": {
                    "self": {
                      "description": "This type represents a link to a resource using an absolute URI.\n",
                      "type": "object",
                      "required": [
                        "href"
                      ],
                      "properties": {
                        "href": {
                          "description": "String formatted according to IETF RFC 3986.\n",
                          "type": "string"
                        }
                      }
                    },
                    "vnfStateSnapshot": {
                      "description": "This type represents a link to a resource using an absolute URI.\n",
                      "type": "object",
                      "required": [
                        "href"
                      ],
                      "properties": {
                        "href": {
                          "description": "String formatted according to IETF RFC 3986.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "takenFrom": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postVnfSnapshots"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshots",
      "summary": "The GET method queries information about multiple VNF snapshots. This method shall follow the provi",
      "description": "The GET method queries information about multiple VNF snapshots. This method shall follow the provisions specified in the tables 5.4.23.3.2-1  and 5.4.23.3.2-2 for URI query parameters, request and response data structures,  and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "allFields",
          "type": "string",
          "info": "Include all complex attributes in the response. See clause 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "allFields",
            "type": "string"
          }
        },
        {
          "name": "fields",
          "type": "string",
          "info": "Complex attributes to be included into the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "fields",
            "type": "string"
          }
        },
        {
          "name": "excludeFields",
          "type": "string",
          "info": "Complex attributes to be excluded from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "excludeFields",
            "type": "string"
          }
        },
        {
          "name": "excludeDefault",
          "type": "string",
          "info": "Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity shall support t...(description truncated): string",
          "required": false,
          "schema": {
            "title": "excludeDefault",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents an \"Individual VNF snapshot\" resource. It shall comply with the provisions defined in table 5.5.2.22-1.\n",
            "type": "object",
            "required": [
              "id",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshotPkgId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshot": {
                "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
                "type": "object",
                "required": [
                  "id",
                  "vnfInstanceId",
                  "triggeredAt",
                  "vnfdId",
                  "vnfInfo",
                  "vnfcSnapshots"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstanceId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "creationStartedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "creationFinishedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "vnfdId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstance": {
                    "description": "This type represents a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfdId",
                      "vnfProvider",
                      "vnfProductName",
                      "vnfSoftwareVersion",
                      "vnfdVersion",
                      "instantiationState"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfInstanceName": {
                        "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfInstanceDescription": {
                        "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfProvider": {
                        "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfProductName": {
                        "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfSoftwareVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfdVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfConfigurableProperties": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "vimConnectionInfo": {
                        "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                        "type": "object",
                        "additionalProperties": {
                          "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                          "type": "object",
                          "required": [
                            "vimType"
                          ],
                          "properties": {
                            "vimId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "vimType": {
                              "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                              "type": "string"
                            },
                            "interfaceInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "accessInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "extra": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "instantiationState": {
                        "description": "The instantiation state of the VNF.\n",
                        "type": "string",
                        "enum": [
                          "NOT_INSTANTIATED",
                          "INSTANTIATED"
                        ]
                      },
                      "instantiatedVnfInfo": {
                        "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                        "type": "object",
                        "required": [
                          "flavourId",
                          "vnfState"
                        ],
                        "properties": {
                          "flavourId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "vnfState": {
                            "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                            "type": "string",
                            "enum": [
                              "STARTED",
                              "STOPPED"
                            ]
                          },
                          "scaleStatus": {
                            "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "maxScaleLevels": {
                            "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "extCpInfo": {
                            "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "cpdId",
                                "cpConfigId",
                                "cpProtocolInfo"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "cpdId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "cpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolInfo": {
                                  "description": "Network protocol information for this CP.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents information about a network address that has been assigned.\n",
                                        "type": "object",
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "addresses": {
                                                  "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "isDynamic": {
                                                  "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                  "type": "boolean"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                },
                                "extLinkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                },
                                "associatedVnfcCpId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "associatedVnfVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "extVirtualLinkInfo": {
                            "description": "Information about the external VLs the VNF instance is connected to.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "resourceHandle",
                                "currentVnfExtCpData"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceHandle": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "extLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier with the intention of being globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "currentVnfExtCpData": {
                                  "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                    "type": "object",
                                    "required": [
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "cpConfig": {
                                        "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                        "type": "object",
                                        "additionalProperties": {
                                          "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "linkPortId"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "cpProtocolData"
                                              ]
                                            }
                                          ],
                                          "type": "object",
                                          "properties": {
                                            "parentCpConfigId": {
                                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                              "type": "string"
                                            },
                                            "linkPortId": {
                                              "description": "An identifier with the intention of being globally unique.\n",
                                              "type": "string"
                                            },
                                            "cpProtocolData": {
                                              "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                              "type": "array",
                                              "items": {
                                                "description": "This type represents network protocol data.\n",
                                                "type": "object",
                                                "required": [
                                                  "layerProtocol"
                                                ],
                                                "properties": {
                                                  "layerProtocol": {
                                                    "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IP_OVER_ETHERNET"
                                                    ]
                                                  },
                                                  "ipOverEthernet": {
                                                    "description": "This type represents network address data for IP over Ethernet.\n",
                                                    "type": "object",
                                                    "anyOf": [
                                                      {
                                                        "required": [
                                                          "macAddress"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddresses"
                                                        ]
                                                      }
                                                    ],
                                                    "oneOf": [
                                                      {
                                                        "required": [
                                                          "fixedAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "numDynamicAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddressRange"
                                                        ]
                                                      }
                                                    ],
                                                    "properties": {
                                                      "macAddress": {
                                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                        "type": "string"
                                                      },
                                                      "segmentationId": {
                                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                        "type": "string"
                                                      },
                                                      "ipAddresses": {
                                                        "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "type": "object",
                                                          "required": [
                                                            "type"
                                                          ],
                                                          "properties": {
                                                            "type": {
                                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                              "type": "string",
                                                              "enum": [
                                                                "IPV4",
                                                                "IPV6"
                                                              ]
                                                            },
                                                            "fixedAddresses": {
                                                              "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "array",
                                                              "items": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            },
                                                            "numDynamicAddresses": {
                                                              "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "integer"
                                                            },
                                                            "addressRange": {
                                                              "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                              "type": "object",
                                                              "required": [
                                                                "minAddress",
                                                                "maxAddress"
                                                              ],
                                                              "properties": {
                                                                "minAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                },
                                                                "maxAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                }
                                                              }
                                                            },
                                                            "subnetId": {
                                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                              "type": "string"
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "extManagedVirtualLinkInfo": {
                            "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "vnfLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "extManagedMultisiteVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "monitoringParameters": {
                            "description": "Active monitoring parameters.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "performanceMetric"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                  "type": "string"
                                },
                                "performanceMetric": {
                                  "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "localizationLanguage": {
                            "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                            "type": "string"
                          },
                          "vnfcResourceInfo": {
                            "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vduId",
                                "computeResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vduId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "computeResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResourceIds": {
                                  "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  }
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfcCpInfo": {
                                  "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "vnfExtCpId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpProtocolInfo": {
                                        "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                          "type": "object",
                                          "required": [
                                            "layerProtocol"
                                          ],
                                          "properties": {
                                            "layerProtocol": {
                                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                              "type": "string",
                                              "enum": [
                                                "IP_OVER_ETHERNET"
                                              ]
                                            },
                                            "ipOverEthernet": {
                                              "description": "This type represents information about a network address that has been assigned.\n",
                                              "type": "object",
                                              "properties": {
                                                "macAddress": {
                                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                  "type": "string"
                                                },
                                                "segmentationId": {
                                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                  "type": "string"
                                                },
                                                "ipAddresses": {
                                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "type": "object",
                                                    "required": [
                                                      "type"
                                                    ],
                                                    "properties": {
                                                      "type": {
                                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                        "type": "string",
                                                        "enum": [
                                                          "IPV4",
                                                          "IPV6"
                                                        ]
                                                      },
                                                      "addresses": {
                                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      },
                                                      "isDynamic": {
                                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                        "type": "boolean"
                                                      },
                                                      "addressRange": {
                                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "object",
                                                        "required": [
                                                          "minAddress",
                                                          "maxAddress"
                                                        ],
                                                        "properties": {
                                                          "minAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          },
                                                          "maxAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      },
                                                      "subnetId": {
                                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      },
                                      "vnfLinkPortId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "metadata": {
                                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                        "type": "object"
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualLinkResourceInfo": {
                            "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfLinkPorts": {
                                  "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualStorageResourceInfo": {
                            "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "virtualStorageDescId",
                                "storageResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "virtualStorageDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extensions": {
                        "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                      },
                      "_links": {
                        "description": "Links to resources related to this resource.\n",
                        "type": "object",
                        "required": [
                          "self"
                        ],
                        "properties": {
                          "self": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "indicators": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "instantiate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "terminate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scale": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scaleToLevel": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeFlavour": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "heal": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "operate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeExtConn": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "createSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "revertToSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "vnfcSnapshots": {
                    "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents a VNFC snapshot.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vnfcInstanceId",
                        "triggeredAt",
                        "vnfcResourceId"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "vnfcInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "creationStartedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "creationFinishedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfoId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "computeSnapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "storageSnapshotResources": {
                          "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "storageResourceId"
                            ],
                            "properties": {
                              "storageResourceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "storageSnapshotResource": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "userDefinedData": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "vnfStateSnapshotInfo": {
                    "description": "This type represents information about VNF-specific state snapshot data.\n",
                    "type": "object",
                    "required": [
                      "checksum",
                      "isEncrypted"
                    ],
                    "properties": {
                      "checksum": {
                        "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                      },
                      "isEncrypted": {
                        "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                      },
                      "metadata": {
                        "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                      }
                    }
                  },
                  "userDefinedData": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "_links": {
                    "description": "Links to resources related to this resource.\n",
                    "type": "object",
                    "required": [
                      "self"
                    ],
                    "properties": {
                      "self": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfStateSnapshot": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "_links": {
                "description": "Links to resources related to this resource.\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "takenFrom": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshots"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotsVnfSnapshotInfoId",
      "summary": "The GET method retrieves information about a VNF snapshot by reading an \"Individual VNF snapshot\" \n",
      "description": "The GET method retrieves information about a VNF snapshot by reading an \"Individual VNF snapshot\" \nresource.\nThis method shall follow the provisions specified in the tables 5.4.24.3.2-1 and 5.4.24.3.2-2 \nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfSnapshotInfoId",
          "type": "string",
          "info": "Identifier of the \"Individual VNF snapshot\" resource. This identifier can be retrieved \nfrom the resource referenced by the \"Location\" HTTP header in the response to a PO...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotInfoId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents an \"Individual VNF snapshot\" resource. It shall comply with the provisions defined in table 5.5.2.22-1.\n",
            "type": "object",
            "required": [
              "id",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshotPkgId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshot": {
                "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
                "type": "object",
                "required": [
                  "id",
                  "vnfInstanceId",
                  "triggeredAt",
                  "vnfdId",
                  "vnfInfo",
                  "vnfcSnapshots"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstanceId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "creationStartedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "creationFinishedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "vnfdId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstance": {
                    "description": "This type represents a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfdId",
                      "vnfProvider",
                      "vnfProductName",
                      "vnfSoftwareVersion",
                      "vnfdVersion",
                      "instantiationState"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfInstanceName": {
                        "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfInstanceDescription": {
                        "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfProvider": {
                        "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfProductName": {
                        "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfSoftwareVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfdVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfConfigurableProperties": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "vimConnectionInfo": {
                        "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                        "type": "object",
                        "additionalProperties": {
                          "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                          "type": "object",
                          "required": [
                            "vimType"
                          ],
                          "properties": {
                            "vimId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "vimType": {
                              "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                              "type": "string"
                            },
                            "interfaceInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "accessInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "extra": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "instantiationState": {
                        "description": "The instantiation state of the VNF.\n",
                        "type": "string",
                        "enum": [
                          "NOT_INSTANTIATED",
                          "INSTANTIATED"
                        ]
                      },
                      "instantiatedVnfInfo": {
                        "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                        "type": "object",
                        "required": [
                          "flavourId",
                          "vnfState"
                        ],
                        "properties": {
                          "flavourId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "vnfState": {
                            "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                            "type": "string",
                            "enum": [
                              "STARTED",
                              "STOPPED"
                            ]
                          },
                          "scaleStatus": {
                            "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "maxScaleLevels": {
                            "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "extCpInfo": {
                            "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "cpdId",
                                "cpConfigId",
                                "cpProtocolInfo"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "cpdId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "cpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolInfo": {
                                  "description": "Network protocol information for this CP.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents information about a network address that has been assigned.\n",
                                        "type": "object",
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "addresses": {
                                                  "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "isDynamic": {
                                                  "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                  "type": "boolean"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                },
                                "extLinkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                },
                                "associatedVnfcCpId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "associatedVnfVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "extVirtualLinkInfo": {
                            "description": "Information about the external VLs the VNF instance is connected to.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "resourceHandle",
                                "currentVnfExtCpData"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceHandle": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "extLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier with the intention of being globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "currentVnfExtCpData": {
                                  "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                    "type": "object",
                                    "required": [
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "cpConfig": {
                                        "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                        "type": "object",
                                        "additionalProperties": {
                                          "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "linkPortId"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "cpProtocolData"
                                              ]
                                            }
                                          ],
                                          "type": "object",
                                          "properties": {
                                            "parentCpConfigId": {
                                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                              "type": "string"
                                            },
                                            "linkPortId": {
                                              "description": "An identifier with the intention of being globally unique.\n",
                                              "type": "string"
                                            },
                                            "cpProtocolData": {
                                              "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                              "type": "array",
                                              "items": {
                                                "description": "This type represents network protocol data.\n",
                                                "type": "object",
                                                "required": [
                                                  "layerProtocol"
                                                ],
                                                "properties": {
                                                  "layerProtocol": {
                                                    "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IP_OVER_ETHERNET"
                                                    ]
                                                  },
                                                  "ipOverEthernet": {
                                                    "description": "This type represents network address data for IP over Ethernet.\n",
                                                    "type": "object",
                                                    "anyOf": [
                                                      {
                                                        "required": [
                                                          "macAddress"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddresses"
                                                        ]
                                                      }
                                                    ],
                                                    "oneOf": [
                                                      {
                                                        "required": [
                                                          "fixedAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "numDynamicAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddressRange"
                                                        ]
                                                      }
                                                    ],
                                                    "properties": {
                                                      "macAddress": {
                                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                        "type": "string"
                                                      },
                                                      "segmentationId": {
                                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                        "type": "string"
                                                      },
                                                      "ipAddresses": {
                                                        "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "type": "object",
                                                          "required": [
                                                            "type"
                                                          ],
                                                          "properties": {
                                                            "type": {
                                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                              "type": "string",
                                                              "enum": [
                                                                "IPV4",
                                                                "IPV6"
                                                              ]
                                                            },
                                                            "fixedAddresses": {
                                                              "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "array",
                                                              "items": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            },
                                                            "numDynamicAddresses": {
                                                              "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "integer"
                                                            },
                                                            "addressRange": {
                                                              "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                              "type": "object",
                                                              "required": [
                                                                "minAddress",
                                                                "maxAddress"
                                                              ],
                                                              "properties": {
                                                                "minAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                },
                                                                "maxAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                }
                                                              }
                                                            },
                                                            "subnetId": {
                                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                              "type": "string"
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "extManagedVirtualLinkInfo": {
                            "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "vnfLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "extManagedMultisiteVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "monitoringParameters": {
                            "description": "Active monitoring parameters.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "performanceMetric"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                  "type": "string"
                                },
                                "performanceMetric": {
                                  "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "localizationLanguage": {
                            "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                            "type": "string"
                          },
                          "vnfcResourceInfo": {
                            "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vduId",
                                "computeResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vduId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "computeResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResourceIds": {
                                  "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  }
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfcCpInfo": {
                                  "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "vnfExtCpId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpProtocolInfo": {
                                        "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                          "type": "object",
                                          "required": [
                                            "layerProtocol"
                                          ],
                                          "properties": {
                                            "layerProtocol": {
                                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                              "type": "string",
                                              "enum": [
                                                "IP_OVER_ETHERNET"
                                              ]
                                            },
                                            "ipOverEthernet": {
                                              "description": "This type represents information about a network address that has been assigned.\n",
                                              "type": "object",
                                              "properties": {
                                                "macAddress": {
                                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                  "type": "string"
                                                },
                                                "segmentationId": {
                                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                  "type": "string"
                                                },
                                                "ipAddresses": {
                                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "type": "object",
                                                    "required": [
                                                      "type"
                                                    ],
                                                    "properties": {
                                                      "type": {
                                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                        "type": "string",
                                                        "enum": [
                                                          "IPV4",
                                                          "IPV6"
                                                        ]
                                                      },
                                                      "addresses": {
                                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      },
                                                      "isDynamic": {
                                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                        "type": "boolean"
                                                      },
                                                      "addressRange": {
                                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "object",
                                                        "required": [
                                                          "minAddress",
                                                          "maxAddress"
                                                        ],
                                                        "properties": {
                                                          "minAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          },
                                                          "maxAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      },
                                                      "subnetId": {
                                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      },
                                      "vnfLinkPortId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "metadata": {
                                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                        "type": "object"
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualLinkResourceInfo": {
                            "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfLinkPorts": {
                                  "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualStorageResourceInfo": {
                            "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "virtualStorageDescId",
                                "storageResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "virtualStorageDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extensions": {
                        "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                      },
                      "_links": {
                        "description": "Links to resources related to this resource.\n",
                        "type": "object",
                        "required": [
                          "self"
                        ],
                        "properties": {
                          "self": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "indicators": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "instantiate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "terminate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scale": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scaleToLevel": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeFlavour": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "heal": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "operate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeExtConn": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "createSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "revertToSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "vnfcSnapshots": {
                    "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents a VNFC snapshot.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vnfcInstanceId",
                        "triggeredAt",
                        "vnfcResourceId"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "vnfcInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "creationStartedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "creationFinishedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfoId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "computeSnapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "storageSnapshotResources": {
                          "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "storageResourceId"
                            ],
                            "properties": {
                              "storageResourceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "storageSnapshotResource": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "userDefinedData": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "vnfStateSnapshotInfo": {
                    "description": "This type represents information about VNF-specific state snapshot data.\n",
                    "type": "object",
                    "required": [
                      "checksum",
                      "isEncrypted"
                    ],
                    "properties": {
                      "checksum": {
                        "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                      },
                      "isEncrypted": {
                        "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                      },
                      "metadata": {
                        "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                      }
                    }
                  },
                  "userDefinedData": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "_links": {
                    "description": "Links to resources related to this resource.\n",
                    "type": "object",
                    "required": [
                      "self"
                    ],
                    "properties": {
                      "self": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfStateSnapshot": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "_links": {
                "description": "Links to resources related to this resource.\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "takenFrom": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotsVnfSnapshotInfoId"
      },
      "task": true
    },
    {
      "name": "patchVnfSnapshotsVnfSnapshotInfoId",
      "summary": "This method modifies an \"Individual VNF snapshot\" resource.\n\nChanges are applied to the VNF snapsho",
      "description": "This method modifies an \"Individual VNF snapshot\" resource.\n\nChanges are applied to the VNF snapshot information managed by the VNFM and are reflected in the \nrepresentation of this resource. The VNFM shall reject the modification request if the \"vnfSnapshot\" \nattribute in the \"VnfSnapshotInfo\" structure representing the \"Individual VNF snapshot\" resource \nis not empty, or the resource is associated to an ongoing VNF snapshot operation (e.g., a VNF \nsnapshot creation process has started).\n\nThis ...(description truncated)",
      "input": [
        {
          "name": "vnfSnapshotInfoId",
          "type": "string",
          "info": "Identifier of the \"Individual VNF snapshot\" resource. This identifier can be retrieved \nfrom the resource referenced by the \"Location\" HTTP header in the response to a PO...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotInfoId",
            "type": "string"
          }
        },
        {
          "name": "body",
          "type": "object",
          "info": "Parameters for the VNF snapshot information modification, as defined in clause 5.5.2.24.\n: {\"vnfSnapshotPkgId\": \"string\", \"vnfSnapshot\": {\"id\": \"string\", \"vnfInstanceId\": \"string\", \"creationStartedAt\": \"string\", \"creationFinishedAt\": \"string\", \"vnfdId\": \"string\", \"vnfInstance\": {\"id\": \"string\", \"vnfInstanceName\": \"string\", \"vnfInstanceDescription\": \"string\", \"vnfdId\": \"string\", \"vnfProvider\": \"string\", \"vnfProductName\": \"string\", \"vnfSoftwareVersion\": \"string\", \"vnfdVersion\": \"string\", \"vnfConfigurableProperties\": \"object\", \"vimConnectionInfo\": \"object\", \"instantiationState\": \"Must be one of [NOT_INSTANTIATED, INSTANTIATED]\", \"instantiatedVnfInfo\": {\"flavourId\": \"string\", \"vnfState\": \"Must be one of [STARTED, STOPPED]\", \"scaleStatus\": [{\"aspectId\": \"string\", \"vnfdId\": \"string\", \"scaleLevel\": 123}], \"maxScaleLevels\": [{\"aspectId\": \"string\", \"vnfdId\": \"string\", \"scaleLevel\": 123}], \"extCpInfo\": [{\"id\": \"string\", \"cpdId\": \"string\", \"cpConfigId\": \"string\", \"vnfdId\": \"string\", \"cpProtocolInfo\": [{\"layerProtocol\": \"Must be one of [IP_OVER_ETHERNET]\", \"ipOverEthernet\": {\"macAddress\": \"string\", \"segmentationId\": \"string\", \"ipAddresses\": [{\"type\": \"Must be one of [IPV4, IPV6]\", \"addresses\": \"array\", \"isDynamic\": \"boolean\", \"addressRange\": {\"minAddress\": \"string\", \"maxAddress\": \"string\"}, \"subnetId\": \"string\"}]}}], \"extLinkPortId\": \"string\", \"metadata\": \"object\", \"associatedVnfcCpId\": \"string\", \"associatedVnfVirtualLinkId\": \"string\"}], \"extVirtualLinkInfo\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"extLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\"}], \"currentVnfExtCpData\": [{\"cpdId\": \"string\", \"cpConfig\": \"object\"}]}], \"extManagedVirtualLinkInfo\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vnfdId\": \"string\", \"networkResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"vnfLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\", \"cpInstanceType\": \"Must be one of [VNFC_CP, EXT_CP]\"}], \"extManagedMultisiteVirtualLinkId\": \"string\"}], \"monitoringParameters\": [{\"id\": \"string\", \"vnfdId\": \"string\", \"name\": \"string\", \"performanceMetric\": \"string\"}], \"localizationLanguage\": \"string\", \"vnfcResourceInfo\": [{\"id\": \"string\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"computeResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"storageResourceIds\": \"array\", \"reservationId\": \"string\", \"vnfcCpInfo\": [{\"id\": \"string\", \"cpdId\": \"string\", \"vnfExtCpId\": \"string\", \"cpProtocolInfo\": [{\"layerProtocol\": \"Must be one of [IP_OVER_ETHERNET]\", \"ipOverEthernet\": {\"macAddress\": \"string\", \"segmentationId\": \"string\", \"ipAddresses\": [{\"type\": \"Must be one of [IPV4, IPV6]\", \"addresses\": \"array\", \"isDynamic\": \"boolean\", \"addressRange\": {\"minAddress\": \"string\", \"maxAddress\": \"string\"}, \"subnetId\": \"string\"}]}}], \"vnfLinkPortId\": \"string\", \"metadata\": \"object\"}], \"metadata\": \"object\"}], \"virtualLinkResourceInfo\": [{\"id\": \"string\", \"vnfVirtualLinkDescId\": \"string\", \"vnfdId\": \"string\", \"networkResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"reservationId\": \"string\", \"vnfLinkPorts\": [{\"id\": \"string\", \"resourceHandle\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"cpInstanceId\": \"string\", \"cpInstanceType\": \"Must be one of [VNFC_CP, EXT_CP]\"}], \"metadata\": \"object\"}], \"virtualStorageResourceInfo\": [{\"id\": \"string\", \"virtualStorageDescId\": \"string\", \"vnfdId\": \"string\", \"storageResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"zoneId\": \"string\", \"reservationId\": \"string\", \"metadata\": \"object\"}]}, \"metadata\": \"object\", \"extensions\": \"undefined\", \"_links\": {\"self\": {\"href\": \"string\"}, \"indicators\": {\"href\": \"string\"}, \"instantiate\": {\"href\": \"string\"}, \"terminate\": {\"href\": \"string\"}, \"scale\": {\"href\": \"string\"}, \"scaleToLevel\": {\"href\": \"string\"}, \"changeFlavour\": {\"href\": \"string\"}, \"heal\": {\"href\": \"string\"}, \"operate\": {\"href\": \"string\"}, \"changeExtConn\": {\"href\": \"string\"}, \"createSnapshot\": {\"href\": \"string\"}, \"revertToSnapshot\": {\"href\": \"string\"}}}, \"vnfcSnapshots\": [{\"id\": \"string\", \"vnfcInstanceId\": \"string\", \"creationStartedAt\": \"string\", \"creationFinishedAt\": \"string\", \"vnfcResourceInfoId\": \"string\", \"computeSnapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"storageSnapshotResources\": [{\"storageResourceId\": \"string\", \"storageSnapshotResource\": \"object\"}], \"userDefinedData\": \"object\"}], \"vnfStateSnapshotInfo\": {\"checksum\": \"undefined\", \"isEncrypted\": \"undefined\", \"metadata\": \"undefined\"}, \"userDefinedData\": \"object\", \"_links\": {\"self\": {\"href\": \"string\"}, \"vnfStateSnapshot\": {\"href\": \"string\"}}}}",
          "required": true,
          "schema": {
            "description": "This type represents attribute modifications for an \"Individual VNF snapshot\" resource, i.e. modifications \nto a resource representation based on the \"VnfSnapshotInfo\" data type. The attributes of \"VnfSnapshotInfo\" \nthat can be modified according to the provisions in clause 5.5.2.22 are included in the \n\"VnfSnapshotInfoModificationRequest\" data type. The \"VnfSnapshotInfoModificationRequest\" data type shall \ncomply with the provisions defined in table 5.5.2.24-1.\n",
            "type": "object",
            "properties": {
              "vnfSnapshotPkgId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshot": {
                "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
                "type": "object",
                "required": [
                  "id",
                  "vnfInstanceId",
                  "triggeredAt",
                  "vnfdId",
                  "vnfInfo",
                  "vnfcSnapshots"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstanceId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "creationStartedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "creationFinishedAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "vnfdId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfInstance": {
                    "description": "This type represents a VNF instance.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfdId",
                      "vnfProvider",
                      "vnfProductName",
                      "vnfSoftwareVersion",
                      "vnfdVersion",
                      "instantiationState"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfInstanceName": {
                        "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfInstanceDescription": {
                        "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                        "type": "string"
                      },
                      "vnfdId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfProvider": {
                        "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfProductName": {
                        "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                        "type": "string"
                      },
                      "vnfSoftwareVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfdVersion": {
                        "description": "A version.\n",
                        "type": "string"
                      },
                      "vnfConfigurableProperties": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "vimConnectionInfo": {
                        "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                        "type": "object",
                        "additionalProperties": {
                          "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                          "type": "object",
                          "required": [
                            "vimType"
                          ],
                          "properties": {
                            "vimId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "vimType": {
                              "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                              "type": "string"
                            },
                            "interfaceInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "accessInfo": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            },
                            "extra": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "instantiationState": {
                        "description": "The instantiation state of the VNF.\n",
                        "type": "string",
                        "enum": [
                          "NOT_INSTANTIATED",
                          "INSTANTIATED"
                        ]
                      },
                      "instantiatedVnfInfo": {
                        "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                        "type": "object",
                        "required": [
                          "flavourId",
                          "vnfState"
                        ],
                        "properties": {
                          "flavourId": {
                            "description": "An identifier that is unique within a VNF descriptor.\n",
                            "type": "string"
                          },
                          "vnfState": {
                            "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                            "type": "string",
                            "enum": [
                              "STARTED",
                              "STOPPED"
                            ]
                          },
                          "scaleStatus": {
                            "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "maxScaleLevels": {
                            "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                            "type": "array",
                            "items": {
                              "required": [
                                "aspectId",
                                "scaleLevel"
                              ],
                              "type": "object",
                              "properties": {
                                "aspectId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "scaleLevel": {
                                  "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                  "type": "integer"
                                }
                              }
                            }
                          },
                          "extCpInfo": {
                            "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                              "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "cpdId",
                                "cpConfigId",
                                "cpProtocolInfo"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "cpdId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "cpConfigId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "cpProtocolInfo": {
                                  "description": "Network protocol information for this CP.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                    "type": "object",
                                    "required": [
                                      "layerProtocol"
                                    ],
                                    "properties": {
                                      "layerProtocol": {
                                        "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                        "type": "string",
                                        "enum": [
                                          "IP_OVER_ETHERNET"
                                        ]
                                      },
                                      "ipOverEthernet": {
                                        "description": "This type represents information about a network address that has been assigned.\n",
                                        "type": "object",
                                        "properties": {
                                          "macAddress": {
                                            "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                            "type": "string"
                                          },
                                          "segmentationId": {
                                            "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                            "type": "string"
                                          },
                                          "ipAddresses": {
                                            "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                            "type": "array",
                                            "items": {
                                              "type": "object",
                                              "required": [
                                                "type"
                                              ],
                                              "properties": {
                                                "type": {
                                                  "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IPV4",
                                                    "IPV6"
                                                  ]
                                                },
                                                "addresses": {
                                                  "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                },
                                                "isDynamic": {
                                                  "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                  "type": "boolean"
                                                },
                                                "addressRange": {
                                                  "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                  "type": "object",
                                                  "required": [
                                                    "minAddress",
                                                    "maxAddress"
                                                  ],
                                                  "properties": {
                                                    "minAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    },
                                                    "maxAddress": {
                                                      "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                },
                                                "subnetId": {
                                                  "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                },
                                "extLinkPortId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                },
                                "associatedVnfcCpId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "associatedVnfVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "extVirtualLinkInfo": {
                            "description": "Information about the external VLs the VNF instance is connected to.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "resourceHandle",
                                "currentVnfExtCpData"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "resourceHandle": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "extLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier with the intention of being globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      }
                                    }
                                  }
                                },
                                "currentVnfExtCpData": {
                                  "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                    "type": "object",
                                    "required": [
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "cpConfig": {
                                        "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                        "type": "object",
                                        "additionalProperties": {
                                          "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                          "anyOf": [
                                            {
                                              "required": [
                                                "linkPortId"
                                              ]
                                            },
                                            {
                                              "required": [
                                                "cpProtocolData"
                                              ]
                                            }
                                          ],
                                          "type": "object",
                                          "properties": {
                                            "parentCpConfigId": {
                                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                              "type": "string"
                                            },
                                            "linkPortId": {
                                              "description": "An identifier with the intention of being globally unique.\n",
                                              "type": "string"
                                            },
                                            "cpProtocolData": {
                                              "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                              "type": "array",
                                              "items": {
                                                "description": "This type represents network protocol data.\n",
                                                "type": "object",
                                                "required": [
                                                  "layerProtocol"
                                                ],
                                                "properties": {
                                                  "layerProtocol": {
                                                    "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                    "type": "string",
                                                    "enum": [
                                                      "IP_OVER_ETHERNET"
                                                    ]
                                                  },
                                                  "ipOverEthernet": {
                                                    "description": "This type represents network address data for IP over Ethernet.\n",
                                                    "type": "object",
                                                    "anyOf": [
                                                      {
                                                        "required": [
                                                          "macAddress"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddresses"
                                                        ]
                                                      }
                                                    ],
                                                    "oneOf": [
                                                      {
                                                        "required": [
                                                          "fixedAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "numDynamicAddresses"
                                                        ]
                                                      },
                                                      {
                                                        "required": [
                                                          "ipAddressRange"
                                                        ]
                                                      }
                                                    ],
                                                    "properties": {
                                                      "macAddress": {
                                                        "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                        "type": "string"
                                                      },
                                                      "segmentationId": {
                                                        "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                        "type": "string"
                                                      },
                                                      "ipAddresses": {
                                                        "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "type": "object",
                                                          "required": [
                                                            "type"
                                                          ],
                                                          "properties": {
                                                            "type": {
                                                              "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                              "type": "string",
                                                              "enum": [
                                                                "IPV4",
                                                                "IPV6"
                                                              ]
                                                            },
                                                            "fixedAddresses": {
                                                              "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "array",
                                                              "items": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            },
                                                            "numDynamicAddresses": {
                                                              "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                              "type": "integer"
                                                            },
                                                            "addressRange": {
                                                              "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                              "type": "object",
                                                              "required": [
                                                                "minAddress",
                                                                "maxAddress"
                                                              ],
                                                              "properties": {
                                                                "minAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                },
                                                                "maxAddress": {
                                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                  "type": "string"
                                                                }
                                                              }
                                                            },
                                                            "subnetId": {
                                                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                              "type": "string"
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          },
                          "extManagedVirtualLinkInfo": {
                            "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "vnfLinkPorts": {
                                  "description": "Link ports of this VL.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "extManagedMultisiteVirtualLinkId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "monitoringParameters": {
                            "description": "Active monitoring parameters.\n",
                            "type": "array",
                            "items": {
                              "type": "object",
                              "required": [
                                "id",
                                "performanceMetric"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                  "type": "string"
                                },
                                "performanceMetric": {
                                  "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                  "type": "string"
                                }
                              }
                            }
                          },
                          "localizationLanguage": {
                            "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                            "type": "string"
                          },
                          "vnfcResourceInfo": {
                            "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vduId",
                                "computeResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vduId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "computeResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResourceIds": {
                                  "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                  "type": "array",
                                  "items": {
                                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                    "type": "string"
                                  }
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfcCpInfo": {
                                  "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "cpdId"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpdId": {
                                        "description": "An identifier that is unique within a VNF descriptor.\n",
                                        "type": "string"
                                      },
                                      "vnfExtCpId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpProtocolInfo": {
                                        "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                        "type": "array",
                                        "items": {
                                          "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                          "type": "object",
                                          "required": [
                                            "layerProtocol"
                                          ],
                                          "properties": {
                                            "layerProtocol": {
                                              "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                              "type": "string",
                                              "enum": [
                                                "IP_OVER_ETHERNET"
                                              ]
                                            },
                                            "ipOverEthernet": {
                                              "description": "This type represents information about a network address that has been assigned.\n",
                                              "type": "object",
                                              "properties": {
                                                "macAddress": {
                                                  "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                  "type": "string"
                                                },
                                                "segmentationId": {
                                                  "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                  "type": "string"
                                                },
                                                "ipAddresses": {
                                                  "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                  "type": "array",
                                                  "items": {
                                                    "type": "object",
                                                    "required": [
                                                      "type"
                                                    ],
                                                    "properties": {
                                                      "type": {
                                                        "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                        "type": "string",
                                                        "enum": [
                                                          "IPV4",
                                                          "IPV6"
                                                        ]
                                                      },
                                                      "addresses": {
                                                        "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "array",
                                                        "items": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      },
                                                      "isDynamic": {
                                                        "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                        "type": "boolean"
                                                      },
                                                      "addressRange": {
                                                        "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                        "type": "object",
                                                        "required": [
                                                          "minAddress",
                                                          "maxAddress"
                                                        ],
                                                        "properties": {
                                                          "minAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          },
                                                          "maxAddress": {
                                                            "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      },
                                                      "subnetId": {
                                                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                        "type": "string"
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      },
                                      "vnfLinkPortId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "metadata": {
                                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                        "type": "object"
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualLinkResourceInfo": {
                            "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "vnfVirtualLinkDescId",
                                "networkResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "vnfVirtualLinkDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "networkResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "vnfLinkPorts": {
                                  "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "required": [
                                      "id",
                                      "resourceHandle"
                                    ],
                                    "properties": {
                                      "id": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "resourceHandle": {
                                        "required": [
                                          "resourceId"
                                        ],
                                        "type": "object",
                                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                        "properties": {
                                          "vimConnectionId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceProviderId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "resourceId": {
                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                            "type": "string"
                                          },
                                          "vimLevelResourceType": {
                                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                            "type": "string"
                                          }
                                        }
                                      },
                                      "cpInstanceId": {
                                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                        "type": "string"
                                      },
                                      "cpInstanceType": {
                                        "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                        "type": "string",
                                        "enum": [
                                          "VNFC_CP",
                                          "EXT_CP"
                                        ]
                                      }
                                    }
                                  }
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          },
                          "virtualStorageResourceInfo": {
                            "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                            "type": "array",
                            "items": {
                              "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                              "type": "object",
                              "required": [
                                "id",
                                "virtualStorageDescId",
                                "storageResource"
                              ],
                              "properties": {
                                "id": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                },
                                "virtualStorageDescId": {
                                  "description": "An identifier that is unique within a VNF descriptor.\n",
                                  "type": "string"
                                },
                                "vnfdId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "storageResource": {
                                  "required": [
                                    "resourceId"
                                  ],
                                  "type": "object",
                                  "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                  "properties": {
                                    "vimConnectionId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceProviderId": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceId": {
                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                      "type": "string"
                                    },
                                    "vimLevelResourceType": {
                                      "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                      "type": "string"
                                    }
                                  }
                                },
                                "zoneId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "reservationId": {
                                  "description": "An identifier with the intention of being globally unique.\n",
                                  "type": "string"
                                },
                                "metadata": {
                                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      },
                      "metadata": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      },
                      "extensions": {
                        "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                      },
                      "_links": {
                        "description": "Links to resources related to this resource.\n",
                        "type": "object",
                        "required": [
                          "self"
                        ],
                        "properties": {
                          "self": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "indicators": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "instantiate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "terminate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scale": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "scaleToLevel": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeFlavour": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "heal": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "operate": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "changeExtConn": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "createSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          },
                          "revertToSnapshot": {
                            "description": "This type represents a link to a resource using an absolute URI.\n",
                            "type": "object",
                            "required": [
                              "href"
                            ],
                            "properties": {
                              "href": {
                                "description": "String formatted according to IETF RFC 3986.\n",
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "vnfcSnapshots": {
                    "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents a VNFC snapshot.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "vnfcInstanceId",
                        "triggeredAt",
                        "vnfcResourceId"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "vnfcInstanceId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "creationStartedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "creationFinishedAt": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfoId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "computeSnapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        },
                        "storageSnapshotResources": {
                          "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "storageResourceId"
                            ],
                            "properties": {
                              "storageResourceId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "storageSnapshotResource": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "userDefinedData": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  },
                  "vnfStateSnapshotInfo": {
                    "description": "This type represents information about VNF-specific state snapshot data.\n",
                    "type": "object",
                    "required": [
                      "checksum",
                      "isEncrypted"
                    ],
                    "properties": {
                      "checksum": {
                        "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                      },
                      "isEncrypted": {
                        "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                      },
                      "metadata": {
                        "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                      }
                    }
                  },
                  "userDefinedData": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "_links": {
                    "description": "Links to resources related to this resource.\n",
                    "type": "object",
                    "required": [
                      "self"
                    ],
                    "properties": {
                      "self": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      },
                      "vnfStateSnapshot": {
                        "description": "This type represents a link to a resource using an absolute URI.\n",
                        "type": "object",
                        "required": [
                          "href"
                        ],
                        "properties": {
                          "href": {
                            "description": "String formatted according to IETF RFC 3986.\n",
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents attribute modifications that were performed on an \"Individual VNF snapshot\" \nresource. The attributes that can be included consist of those requested to be modified explicitly \nin the \"VnfSnapshotInfoModificationRequest\" data structure, and additional attributes of the \n\"VnfSnapshotInfo\" data structure that were modified implicitly. The \"VnfSnapshotInfoModifications\" \ndata type shall comply with the provisions defined in table 5.5.2.25-1.\n",
          "type": "object",
          "properties": {
            "vnfSnapshotPkgId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfSnapshot": {
              "description": "This type represents a VNF snapshot. It shall comply with the provisions defined in table 5.5.2.23-1.\n",
              "type": "object",
              "required": [
                "id",
                "vnfInstanceId",
                "triggeredAt",
                "vnfdId",
                "vnfInfo",
                "vnfcSnapshots"
              ],
              "properties": {
                "id": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfInstanceId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "creationStartedAt": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "creationFinishedAt": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "vnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfInstance": {
                  "description": "This type represents a VNF instance.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "vnfdId",
                    "vnfProvider",
                    "vnfProductName",
                    "vnfSoftwareVersion",
                    "vnfdVersion",
                    "instantiationState"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfInstanceName": {
                      "description": "Name of the VNF instance. This attribute can be modified with the PATCH method.\n",
                      "type": "string"
                    },
                    "vnfInstanceDescription": {
                      "description": "Human-readable description of the VNF instance. This attribute can be modified with the PATCH method.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "vnfProvider": {
                      "description": "Provider of the VNF and the VNFD. The value is copied from the VNFD.\n",
                      "type": "string"
                    },
                    "vnfProductName": {
                      "description": "Name to identify the VNF Product. The value is copied from the VNFD.\n",
                      "type": "string"
                    },
                    "vnfSoftwareVersion": {
                      "description": "A version.\n",
                      "type": "string"
                    },
                    "vnfdVersion": {
                      "description": "A version.\n",
                      "type": "string"
                    },
                    "vnfConfigurableProperties": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "vimConnectionInfo": {
                      "description": "Information about VIM connections to be used for managing the resources for the VNF instance. The keys of the map, each of which identifies information about a particular VIM connection, are managed by the NFVO and referenced from other data structures via the \"vimConnectionId\" attribute. This attribute shall only be supported and present if VNF-related resource management in direct mode is pplicable. This attribute can be modified with the PATCH method.\n",
                      "type": "object",
                      "additionalProperties": {
                        "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                        "type": "object",
                        "required": [
                          "vimType"
                        ],
                        "properties": {
                          "vimId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "vimType": {
                            "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                            "type": "string"
                          },
                          "interfaceInfo": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          },
                          "accessInfo": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          },
                          "extra": {
                            "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                            "type": "object"
                          }
                        }
                      }
                    },
                    "instantiationState": {
                      "description": "The instantiation state of the VNF.\n",
                      "type": "string",
                      "enum": [
                        "NOT_INSTANTIATED",
                        "INSTANTIATED"
                      ]
                    },
                    "instantiatedVnfInfo": {
                      "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n",
                      "type": "object",
                      "required": [
                        "flavourId",
                        "vnfState"
                      ],
                      "properties": {
                        "flavourId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "vnfState": {
                          "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n",
                          "type": "string",
                          "enum": [
                            "STARTED",
                            "STOPPED"
                          ]
                        },
                        "scaleStatus": {
                          "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n",
                          "type": "array",
                          "items": {
                            "required": [
                              "aspectId",
                              "scaleLevel"
                            ],
                            "type": "object",
                            "properties": {
                              "aspectId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "scaleLevel": {
                                "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "maxScaleLevels": {
                          "description": "Maximum allowed scale levels of the VNF, one entry per aspect. This attribute shall be present if the VNF supports scaling.\n",
                          "type": "array",
                          "items": {
                            "required": [
                              "aspectId",
                              "scaleLevel"
                            ],
                            "type": "object",
                            "properties": {
                              "aspectId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "scaleLevel": {
                                "description": "Indicates the scale level. The minimum value shall be 0 and the maximum value shall be <= maxScaleLevel as described in the VNFD.\n",
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "extCpInfo": {
                          "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n",
                          "type": "array",
                          "minItems": 1,
                          "items": {
                            "description": "This type represents information about an external CP of a VNF. It shall comply with the provisions defined in table 5.5.3.25 1.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "cpdId",
                              "cpConfigId",
                              "cpProtocolInfo"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "cpdId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "cpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolInfo": {
                                "description": "Network protocol information for this CP.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents information about a network address that has been assigned.\n",
                                      "type": "object",
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "addresses": {
                                                "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "isDynamic": {
                                                "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                "type": "boolean"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              },
                              "extLinkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              },
                              "associatedVnfcCpId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "associatedVnfVirtualLinkId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "extVirtualLinkInfo": {
                          "description": "Information about the external VLs the VNF instance is connected to.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "resourceHandle",
                              "currentVnfExtCpData"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "resourceHandle": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "extLinkPorts": {
                                "description": "Link ports of this VL.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\n",
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier with the intention of being globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    }
                                  }
                                }
                              },
                              "currentVnfExtCpData": {
                                "description": "Allows the API consumer to read the current CP configuration information for the connection of external CPs to the external virtual link. This attribute reflects the current configuration information that has resulted from merging into this attribute the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" or \"ChangeCurrentVnfPkgRequest\", or has been provided by the NFVO during the granting procedure. If applying such change results in an empty list of \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its parent data structure.\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents configuration information for external CPs created from a CPD.\n",
                                  "type": "object",
                                  "required": [
                                    "cpdId"
                                  ],
                                  "properties": {
                                    "cpdId": {
                                      "description": "An identifier that is unique within a VNF descriptor.\n",
                                      "type": "string"
                                    },
                                    "cpConfig": {
                                      "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                                      "type": "object",
                                      "additionalProperties": {
                                        "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                                        "anyOf": [
                                          {
                                            "required": [
                                              "linkPortId"
                                            ]
                                          },
                                          {
                                            "required": [
                                              "cpProtocolData"
                                            ]
                                          }
                                        ],
                                        "type": "object",
                                        "properties": {
                                          "parentCpConfigId": {
                                            "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                            "type": "string"
                                          },
                                          "linkPortId": {
                                            "description": "An identifier with the intention of being globally unique.\n",
                                            "type": "string"
                                          },
                                          "cpProtocolData": {
                                            "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                            "type": "array",
                                            "items": {
                                              "description": "This type represents network protocol data.\n",
                                              "type": "object",
                                              "required": [
                                                "layerProtocol"
                                              ],
                                              "properties": {
                                                "layerProtocol": {
                                                  "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                                  "type": "string",
                                                  "enum": [
                                                    "IP_OVER_ETHERNET"
                                                  ]
                                                },
                                                "ipOverEthernet": {
                                                  "description": "This type represents network address data for IP over Ethernet.\n",
                                                  "type": "object",
                                                  "anyOf": [
                                                    {
                                                      "required": [
                                                        "macAddress"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "ipAddresses"
                                                      ]
                                                    }
                                                  ],
                                                  "oneOf": [
                                                    {
                                                      "required": [
                                                        "fixedAddresses"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "numDynamicAddresses"
                                                      ]
                                                    },
                                                    {
                                                      "required": [
                                                        "ipAddressRange"
                                                      ]
                                                    }
                                                  ],
                                                  "properties": {
                                                    "macAddress": {
                                                      "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                      "type": "string"
                                                    },
                                                    "segmentationId": {
                                                      "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                      "type": "string"
                                                    },
                                                    "ipAddresses": {
                                                      "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                                      "type": "array",
                                                      "items": {
                                                        "type": "object",
                                                        "required": [
                                                          "type"
                                                        ],
                                                        "properties": {
                                                          "type": {
                                                            "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                            "type": "string",
                                                            "enum": [
                                                              "IPV4",
                                                              "IPV6"
                                                            ]
                                                          },
                                                          "fixedAddresses": {
                                                            "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                            "type": "array",
                                                            "items": {
                                                              "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                              "type": "string"
                                                            }
                                                          },
                                                          "numDynamicAddresses": {
                                                            "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                            "type": "integer"
                                                          },
                                                          "addressRange": {
                                                            "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                            "type": "object",
                                                            "required": [
                                                              "minAddress",
                                                              "maxAddress"
                                                            ],
                                                            "properties": {
                                                              "minAddress": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              },
                                                              "maxAddress": {
                                                                "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                                "type": "string"
                                                              }
                                                            }
                                                          },
                                                          "subnetId": {
                                                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                            "type": "string"
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "extManagedVirtualLinkInfo": {
                          "description": "Information about the externally-managed internal VLs of the VNF instance.\nNOTE: It is possible to have several ExtManagedVirtualLinkInfo for the same VNF internal VL in case of a multi-site VNF spanning several VIMs. The set of ExtManagedVirtualLinkInfo corresponding to the same VNF internal VL shall indicate so by referencing to the same VnfVirtualLinkDesc and externally-managed multi-site VL instance (refer to clause 5.5.3.3).\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "vnfVirtualLinkDescId",
                              "networkResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfVirtualLinkDescId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "networkResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "vnfLinkPorts": {
                                "description": "Link ports of this VL.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpInstanceType": {
                                      "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                      "type": "string",
                                      "enum": [
                                        "VNFC_CP",
                                        "EXT_CP"
                                      ]
                                    }
                                  }
                                }
                              },
                              "extManagedMultisiteVirtualLinkId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "monitoringParameters": {
                          "description": "Active monitoring parameters.\n",
                          "type": "array",
                          "items": {
                            "type": "object",
                            "required": [
                              "id",
                              "performanceMetric"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "name": {
                                "description": "Human readable name of the monitoring parameter, as defined in the VNFD.\n",
                                "type": "string"
                              },
                              "performanceMetric": {
                                "description": "Performance metric that is monitored. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                                "type": "string"
                              }
                            }
                          }
                        },
                        "localizationLanguage": {
                          "description": "Information about localization language of the VNF (includes e.g. strings in the VNFD). The localization languages supported by a VNF can be declared in the VNFD, and localization language selection can take place at instantiation time. The value shall comply with the format defined in IETF RFC 5646.\n",
                          "type": "string"
                        },
                        "vnfcResourceInfo": {
                          "description": "Information about the virtualised compute and storage resources used by the VNFCs of the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "vduId",
                              "computeResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vduId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "computeResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "storageResourceIds": {
                                "description": "References to the VirtualStorage resources. The value refers to a VirtualStorageResourceInfo item in the VnfInstance.\n",
                                "type": "array",
                                "items": {
                                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                  "type": "string"
                                }
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfcCpInfo": {
                                "description": "All the CPs of the VNFC instance. Shall be present when that particular CP of the VNFC instance is exposed as an external CP of the VNF instance or is connected to an external CP of the VNF instance. A VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external CP if it is connected directly to an external VL. May be present otherwise.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "cpdId"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpdId": {
                                      "description": "An identifier that is unique within a VNF descriptor.\n",
                                      "type": "string"
                                    },
                                    "vnfExtCpId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpProtocolInfo": {
                                      "description": "Network protocol information for this CP. May be omitted if the VNFC CP is exposed as an external CP. The information can be omitted because it is already available as part of the external CP information.\n",
                                      "type": "array",
                                      "items": {
                                        "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\n",
                                        "type": "object",
                                        "required": [
                                          "layerProtocol"
                                        ],
                                        "properties": {
                                          "layerProtocol": {
                                            "description": "The identifier of layer(s) and protocol(s) associated to the network address information. Permitted values: IP_OVER_ETHERNET This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                            "type": "string",
                                            "enum": [
                                              "IP_OVER_ETHERNET"
                                            ]
                                          },
                                          "ipOverEthernet": {
                                            "description": "This type represents information about a network address that has been assigned.\n",
                                            "type": "object",
                                            "properties": {
                                              "macAddress": {
                                                "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                                "type": "string"
                                              },
                                              "segmentationId": {
                                                "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present.  Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                                "type": "string"
                                              },
                                              "ipAddresses": {
                                                "description": "Addresses assigned to the CP instance. Each entry represents IP addresses assigned by fixed or dynamic IP address assignment per subnet. At least one of \"macAddress\" or \"ipAddresses\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "type": "object",
                                                  "required": [
                                                    "type"
                                                  ],
                                                  "properties": {
                                                    "type": {
                                                      "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                      "type": "string",
                                                      "enum": [
                                                        "IPV4",
                                                        "IPV6"
                                                      ]
                                                    },
                                                    "addresses": {
                                                      "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                      "type": "array",
                                                      "items": {
                                                        "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                        "type": "string"
                                                      }
                                                    },
                                                    "isDynamic": {
                                                      "description": "Indicates whether this set of addresses was assigned dynamically (true) or based on address information provided as input from the API consumer (false). Shall be present if \"addresses\" is present and shall be absent otherwise.\n",
                                                      "type": "boolean"
                                                    },
                                                    "addressRange": {
                                                      "description": "An IP address range used, e.g., in case of egress connections. Exactly one of \"addresses\" or \"addressRange\" shall be present.\n",
                                                      "type": "object",
                                                      "required": [
                                                        "minAddress",
                                                        "maxAddress"
                                                      ],
                                                      "properties": {
                                                        "minAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        },
                                                        "maxAddress": {
                                                          "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                          "type": "string"
                                                        }
                                                      }
                                                    },
                                                    "subnetId": {
                                                      "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                      "type": "string"
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    },
                                    "vnfLinkPortId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "metadata": {
                                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                      "type": "object"
                                    }
                                  }
                                }
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "virtualLinkResourceInfo": {
                          "description": "Information about the virtualised network resources used by the VLs of the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "vnfVirtualLinkDescId",
                              "networkResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "vnfVirtualLinkDescId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "networkResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "vnfLinkPorts": {
                                "description": "Links ports of this VL. Shall be present when the linkPort is used for external connectivity by the VNF (refer to VnfLinkPortInfo). May be present otherwise.\n",
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "id",
                                    "resourceHandle"
                                  ],
                                  "properties": {
                                    "id": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "resourceHandle": {
                                      "required": [
                                        "resourceId"
                                      ],
                                      "type": "object",
                                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                      "properties": {
                                        "vimConnectionId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceProviderId": {
                                          "description": "An identifier with the intention of being globally unique.\n",
                                          "type": "string"
                                        },
                                        "resourceId": {
                                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                          "type": "string"
                                        },
                                        "vimLevelResourceType": {
                                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                          "type": "string"
                                        }
                                      }
                                    },
                                    "cpInstanceId": {
                                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                      "type": "string"
                                    },
                                    "cpInstanceType": {
                                      "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present, and shall be absent otherwise. Permitted values: VNFC_CP: The link port is connected to a VNFC CP EXT_CP: The link port is associated to an external CP.\n",
                                      "type": "string",
                                      "enum": [
                                        "VNFC_CP",
                                        "EXT_CP"
                                      ]
                                    }
                                  }
                                }
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        },
                        "virtualStorageResourceInfo": {
                          "description": "Information on the virtualised storage resource(s) used as storage for the VNF instance.\n",
                          "type": "array",
                          "items": {
                            "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\n",
                            "type": "object",
                            "required": [
                              "id",
                              "virtualStorageDescId",
                              "storageResource"
                            ],
                            "properties": {
                              "id": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "virtualStorageDescId": {
                                "description": "An identifier that is unique within a VNF descriptor.\n",
                                "type": "string"
                              },
                              "vnfdId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "storageResource": {
                                "required": [
                                  "resourceId"
                                ],
                                "type": "object",
                                "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                                "properties": {
                                  "vimConnectionId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceProviderId": {
                                    "description": "An identifier with the intention of being globally unique.\n",
                                    "type": "string"
                                  },
                                  "resourceId": {
                                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                    "type": "string"
                                  },
                                  "vimLevelResourceType": {
                                    "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                                    "type": "string"
                                  }
                                }
                              },
                              "zoneId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "reservationId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "metadata": {
                                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                                "type": "object"
                              }
                            }
                          }
                        }
                      }
                    },
                    "metadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "extensions": {
                      "description": "Additional VNF-specific attributes that affect the lifecycle management of this VNF instance. These attributes represent values that are stored persistently in the VnfInstance structure for consumption by the VNFM or the lifecycle management scripts during the execution of VNF lifecycle management operations. All extensions that are allowed for the VNF are declared in the VNFD. The declaration of an extension in the VNFD contains information on whether its presence is optional or required, and optionally can specify an initial value. See note 2 and note 4. The VNFM shall reject requests to write extension attributes that are not declared in the VNFD with a \"422 Unprocessable entity\" error response as defined in clause 6.4 of ETSI GS NFV-SOL 013. Modifying the values of these attributes has no direct effect on the VNF instance; however, the modified attribute values can be considered during subsequent VNF lifecycle management operations, which means that the modified values can indirectly affect the configuration of the VNF instance. These attributes can be initialized with default values from the VNFD. These attributes can be modified with values passed in the request structures of certain LCM operations, such as the InstantiateVnfRequest structure. Further, these attributes can be created, modified or deleted with the PATCH method.\nNOTE: Upon creation of the VnfInstance structure, the VNFM shall create and initialize all child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that were declared in the VNFD with a defined initial value. The defined initial values can be declared in the VNFD, and/or, in case of \"metadata\", obtained from the \"CreateVnfRequest\" structure. Child attributes of \"vnfConfigurableProperties\", \"metadata\" and \"extensions\" that have no defineddeclared initial value shall not be created, in order to be consistent with the semantics of the JSON Merge Patch method (see IETF RFC 7396) that interprets null values as deletion request.\n"
                    },
                    "_links": {
                      "description": "Links to resources related to this resource.\n",
                      "type": "object",
                      "required": [
                        "self"
                      ],
                      "properties": {
                        "self": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "indicators": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "instantiate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "terminate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "scale": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "scaleToLevel": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "changeFlavour": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "heal": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "operate": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "changeExtConn": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "createSnapshot": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        },
                        "revertToSnapshot": {
                          "description": "This type represents a link to a resource using an absolute URI.\n",
                          "type": "object",
                          "required": [
                            "href"
                          ],
                          "properties": {
                            "href": {
                              "description": "String formatted according to IETF RFC 3986.\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "vnfcSnapshots": {
                  "description": "Information about VNFC snapshots constituting this VNF snapshot.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents a VNFC snapshot.\n",
                    "type": "object",
                    "required": [
                      "id",
                      "vnfcInstanceId",
                      "triggeredAt",
                      "vnfcResourceId"
                    ],
                    "properties": {
                      "id": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "vnfcInstanceId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "creationStartedAt": {
                        "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                        "type": "string"
                      },
                      "creationFinishedAt": {
                        "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                        "type": "string"
                      },
                      "vnfcResourceInfoId": {
                        "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                        "type": "string"
                      },
                      "computeSnapshotResource": {
                        "required": [
                          "resourceId"
                        ],
                        "type": "object",
                        "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                        "properties": {
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimLevelResourceType": {
                            "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                            "type": "string"
                          }
                        }
                      },
                      "storageSnapshotResources": {
                        "description": "Mapping of the storage resources associated to the VNFC with the storage snapshot resources.\n",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "required": [
                            "storageResourceId"
                          ],
                          "properties": {
                            "storageResourceId": {
                              "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                              "type": "string"
                            },
                            "storageSnapshotResource": {
                              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                              "type": "object"
                            }
                          }
                        }
                      },
                      "userDefinedData": {
                        "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                        "type": "object"
                      }
                    }
                  }
                },
                "vnfStateSnapshotInfo": {
                  "description": "This type represents information about VNF-specific state snapshot data.\n",
                  "type": "object",
                  "required": [
                    "checksum",
                    "isEncrypted"
                  ],
                  "properties": {
                    "checksum": {
                      "description": "Checksum of the VNF state snapshot file. Hash algorithms applicable to VNF snapshot package artifacts are defined in ETSI GS NFV-SOL 010. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Checksum\"\n"
                    },
                    "isEncrypted": {
                      "description": "Reflects whether the VNF state snapshot content is encrypted (true) or not (false). $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/Boolean\"\n"
                    },
                    "metadata": {
                      "description": "The metadata with additional information such as content type, size, creation date, etc. $ref: \"../definitions/SOL002SOL003_def.yaml#/definitions/KeyValuePairs\"\n"
                    }
                  }
                },
                "userDefinedData": {
                  "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                  "type": "object"
                },
                "_links": {
                  "description": "Links to resources related to this resource.\n",
                  "type": "object",
                  "required": [
                    "self"
                  ],
                  "properties": {
                    "self": {
                      "description": "This type represents a link to a resource using an absolute URI.\n",
                      "type": "object",
                      "required": [
                        "href"
                      ],
                      "properties": {
                        "href": {
                          "description": "String formatted according to IETF RFC 3986.\n",
                          "type": "string"
                        }
                      }
                    },
                    "vnfStateSnapshot": {
                      "description": "This type represents a link to a resource using an absolute URI.\n",
                      "type": "object",
                      "required": [
                        "href"
                      ],
                      "properties": {
                        "href": {
                          "description": "String formatted according to IETF RFC 3986.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/patchVnfSnapshotsVnfSnapshotInfoId"
      },
      "task": true
    },
    {
      "name": "deleteVnfSnapshotsVnfSnapshotInfoId",
      "summary": "This method deletes an \"Individual VNF snapshot\" resource and the associated VNF snapshot \ninformat",
      "description": "This method deletes an \"Individual VNF snapshot\" resource and the associated VNF snapshot \ninformation managed by the VNFM, and any resource associated to the VNF snapshot managed \nby the VIM.\nAs the result of successfully executing this method, the \"Individual VNF snapshot\" resource \nshall not exist any longer.\nThis method shall follow the provisions specified in the tables 5.4.24.3.5-1 and 5.4.24.3.5-2 \nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfSnapshotInfoId",
          "type": "string",
          "info": "Identifier of the \"Individual VNF snapshot\" resource. This identifier can be retrieved \nfrom the resource referenced by the \"Location\" HTTP header in the response to a PO...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotInfoId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deleteVnfSnapshotsVnfSnapshotInfoId"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotsVnfSnapshotInfoIdVnfStateSnapshot",
      "summary": "The GET method fetches the content of the VNF state snapshot. \nThis method shall follow the provisi",
      "description": "The GET method fetches the content of the VNF state snapshot. \nThis method shall follow the provisions specified in the tables 5.4.25.3.2-1 and 5.4.25.3.2-2 \nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfSnapshotInfoId",
          "type": "string",
          "info": "Identifier of the \"Individual VNF snapshot\" resource. This identifier can be retrieved \nfrom the resource referenced by the \"Location\" HTTP header in the response to a PO...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotInfoId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotsVnfSnapshotInfoIdVnfStateSnapshot"
      },
      "task": true
    },
    {
      "name": "postGrants",
      "summary": "Grant Lifecycle Operation.\nThe POST method requests a grant for a particular VNF lifecycle operatio",
      "description": "Grant Lifecycle Operation.\nThe POST method requests a grant for a particular VNF lifecycle operation.\nThis method shall follow the provisions specified in the tables 9.4.2.3.1-1 and 9.4.2.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully processing this request, a new \"Individual grant\" resource\nshall be created. In the synchronous case which is indicated by responding with \"201 Created\",\nthat resource shall be created before ...(description truncated)",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": ": {\"vnfInstanceId\": \"string\", \"vnfLcmOpOccId\": \"string\", \"vnfdId\": \"string\", \"dstVnfdId\": \"string\", \"flavourId\": \"string\", \"operation\": \"Must be one of [INSTANTIATE, SCALE, SCALE_TO_LEVEL, CHANGE_FLAVOUR, TERMINATE, HEAL, OPERATE, CHANGE_EXT_CONN, CHANGE_VNFPKG, CREATE_SNAPSHOT, REVERT_TO_SNAPSHOT]\", \"isAutomaticInvocation\": \"boolean\", \"instantiationLevelId\": \"string\", \"addResources\": [{\"id\": \"string\", \"type\": \"Must be one of [COMPUTE, VL, STORAGE, LINKPORT]\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"resourceTemplateId\": \"string\", \"resource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"snapshotResDef\": {\"vnfSnapshotId\": \"string\", \"vnfcSnapshotId\": \"string\", \"storageSnapshotId\": \"string\", \"snapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}}], \"tempResources\": [{\"id\": \"string\", \"type\": \"Must be one of [COMPUTE, VL, STORAGE, LINKPORT]\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"resourceTemplateId\": \"string\", \"resource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"snapshotResDef\": {\"vnfSnapshotId\": \"string\", \"vnfcSnapshotId\": \"string\", \"storageSnapshotId\": \"string\", \"snapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}}], \"removeResources\": [{\"id\": \"string\", \"type\": \"Must be one of [COMPUTE, VL, STORAGE, LINKPORT]\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"resourceTemplateId\": \"string\", \"resource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"snapshotResDef\": {\"vnfSnapshotId\": \"string\", \"vnfcSnapshotId\": \"string\", \"storageSnapshotId\": \"string\", \"snapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}}], \"updateResources\": [{\"id\": \"string\", \"type\": \"Must be one of [COMPUTE, VL, STORAGE, LINKPORT]\", \"vduId\": \"string\", \"vnfdId\": \"string\", \"resourceTemplateId\": \"string\", \"resource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}, \"snapshotResDef\": {\"vnfSnapshotId\": \"string\", \"vnfcSnapshotId\": \"string\", \"storageSnapshotId\": \"string\", \"snapshotResource\": {\"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\", \"resourceId\": \"string\", \"vimLevelResourceType\": \"string\"}}}], \"placementConstraints\": [{\"affinityOrAntiAffinity\": \"Must be one of [AFFINITY, ANTI_AFFINITY]\", \"scope\": \"Must be one of [NFVI_POP, ZONE, ZONE_GROUP, NFVI_NODE]\", \"resource\": [{\"idType\": \"Must be one of [RES_MGMT, GRANT]\", \"resourceId\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\"}], \"fallbackBestEffort\": \"boolean\"}], \"vimConstraints\": [{\"sameResourceGroup\": \"boolean\", \"resource\": [{\"idType\": \"Must be one of [RES_MGMT, GRANT]\", \"resourceId\": \"string\", \"vimConnectionId\": \"string\", \"resourceProviderId\": \"string\"}]}], \"additionalParams\": \"object\", \"_links\": {\"vnfLcmOpOcc\": {\"href\": \"string\"}, \"vnfInstance\": {\"href\": \"string\"}}}",
          "required": true,
          "schema": {
            "description": "This type represents a grant request.\n",
            "type": "object",
            "required": [
              "vnfInstanceId",
              "vnfLcmOpOccId",
              "vnfdId",
              "operation",
              "isAutomaticInvocation",
              "_links"
            ],
            "properties": {
              "vnfInstanceId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfLcmOpOccId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "dstVnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "flavourId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "operation": {
                "description": "The enumeration GrantedLcmOperationType defines the permitted values  to represent VNF lifecycle operation types in grant requests. Value | Description ------|------------ INSTANTIATE | Represents the \"Instantiate VNF\" LCM operation. SCALE | Represents the \"Scale VNF\" LCM operation. SCALE_TO_LEVEL | Represents the \"Scale VNF to Level\" LCM operation. CHANGE_FLAVOUR | Represents the \"Change VNF Flavour\" LCM operation. TERMINATE | Represents the \"Terminate VNF\" LCM operation. HEAL | Represents the \"Heal VNF\" LCM operation. OPERATE | Represents the \"Operate VNF\" LCM operation. CHANGE_EXT_CONN | Represents the \"Change external VNF connectivity\" LCM operation.      CHANGE_VNFPKG | Represents the \"Change current VNF package\" LCM operation. CREATE_SNAPSHOT | Represents the \"Create VNF snapshot\" LCM operation. REVERT_TO_SNAPSHOT | Represents the \"Revert to VNF snapshot\" LCM operation.\n",
                "type": "string",
                "enum": [
                  "INSTANTIATE",
                  "SCALE",
                  "SCALE_TO_LEVEL",
                  "CHANGE_FLAVOUR",
                  "TERMINATE",
                  "HEAL",
                  "OPERATE",
                  "CHANGE_EXT_CONN",
                  "CHANGE_VNFPKG",
                  "CREATE_SNAPSHOT",
                  "REVERT_TO_SNAPSHOT"
                ]
              },
              "isAutomaticInvocation": {
                "description": "Set to true if this VNF LCM operation occurrence has been triggered by an automated procedure inside the VNFM (i.e. ScaleVnf / ScaleVnfToLevel triggered by auto-scale, or HealVnf triggered by auto-heal). Set to false otherwise.\n",
                "type": "boolean"
              },
              "instantiationLevelId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "addResources": {
                "description": "List of resource definitions in the VNFD for resources to be added by the LCM operation which is related to this grant request, with one entry per resource. If the granting request is for InstantiateVNF, either instantiationLevel or addResources shall be present.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information of an existing or proposed resource used by the VNF.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "type"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    },
                    "type": {
                      "description": "Type of the resource definition referenced. Permitted values: * COMPUTE * VL * STORAGE * LINKPORT\n",
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "VL",
                        "STORAGE",
                        "LINKPORT"
                      ]
                    },
                    "vduId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceTemplateId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "resource": {
                      "required": [
                        "resourceId"
                      ],
                      "type": "object",
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                      "properties": {
                        "vimConnectionId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceProviderId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceId": {
                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                          "type": "string"
                        },
                        "vimLevelResourceType": {
                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                          "type": "string"
                        }
                      }
                    },
                    "snapshotResDef": {
                      "description": "This type represents resource definition information related to a snapshot resource.\n",
                      "type": "object",
                      "required": [
                        "vnfSnapshotId"
                      ],
                      "properties": {
                        "vnfSnapshotId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfcSnapshotId": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "storageSnapshotId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "snapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "tempResources": {
                "description": "List of resource definitions in the VNFD for resources to be temporarily instantiated during the runtime of the LCM operation which is related to this grant request, with one entry per resource. The NFVO will assume that the VNFM will be responsible to both allocate and release the temporary resource during the runtime of the LCM operation. This means, the resource can be allocated and consumed after the \"start\" notification for the LCM operation is sent by the VNFM, and the resource will be released before the \"result\" notification of the VNF LCM operation is sent by the VNFM.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information of an existing or proposed resource used by the VNF.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "type"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    },
                    "type": {
                      "description": "Type of the resource definition referenced. Permitted values: * COMPUTE * VL * STORAGE * LINKPORT\n",
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "VL",
                        "STORAGE",
                        "LINKPORT"
                      ]
                    },
                    "vduId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceTemplateId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "resource": {
                      "required": [
                        "resourceId"
                      ],
                      "type": "object",
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                      "properties": {
                        "vimConnectionId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceProviderId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceId": {
                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                          "type": "string"
                        },
                        "vimLevelResourceType": {
                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                          "type": "string"
                        }
                      }
                    },
                    "snapshotResDef": {
                      "description": "This type represents resource definition information related to a snapshot resource.\n",
                      "type": "object",
                      "required": [
                        "vnfSnapshotId"
                      ],
                      "properties": {
                        "vnfSnapshotId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfcSnapshotId": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "storageSnapshotId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "snapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "removeResources": {
                "description": "Provides the definitions of resources to be removed by the LCM operation which is related to this grant request, with one entry per resource.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information of an existing or proposed resource used by the VNF.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "type"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    },
                    "type": {
                      "description": "Type of the resource definition referenced. Permitted values: * COMPUTE * VL * STORAGE * LINKPORT\n",
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "VL",
                        "STORAGE",
                        "LINKPORT"
                      ]
                    },
                    "vduId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceTemplateId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "resource": {
                      "required": [
                        "resourceId"
                      ],
                      "type": "object",
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                      "properties": {
                        "vimConnectionId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceProviderId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceId": {
                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                          "type": "string"
                        },
                        "vimLevelResourceType": {
                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                          "type": "string"
                        }
                      }
                    },
                    "snapshotResDef": {
                      "description": "This type represents resource definition information related to a snapshot resource.\n",
                      "type": "object",
                      "required": [
                        "vnfSnapshotId"
                      ],
                      "properties": {
                        "vnfSnapshotId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfcSnapshotId": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "storageSnapshotId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "snapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "updateResources": {
                "description": "Provides the definitions of resources to be modified by the LCM operation which is related to this grant request, with one entry per resource.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information of an existing or proposed resource used by the VNF.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "type"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    },
                    "type": {
                      "description": "Type of the resource definition referenced. Permitted values: * COMPUTE * VL * STORAGE * LINKPORT\n",
                      "type": "string",
                      "enum": [
                        "COMPUTE",
                        "VL",
                        "STORAGE",
                        "LINKPORT"
                      ]
                    },
                    "vduId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "vnfdId": {
                      "description": "An identifier with the intention of being globally unique.\n",
                      "type": "string"
                    },
                    "resourceTemplateId": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "resource": {
                      "required": [
                        "resourceId"
                      ],
                      "type": "object",
                      "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                      "properties": {
                        "vimConnectionId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceProviderId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceId": {
                          "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                          "type": "string"
                        },
                        "vimLevelResourceType": {
                          "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                          "type": "string"
                        }
                      }
                    },
                    "snapshotResDef": {
                      "description": "This type represents resource definition information related to a snapshot resource.\n",
                      "type": "object",
                      "required": [
                        "vnfSnapshotId"
                      ],
                      "properties": {
                        "vnfSnapshotId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "vnfcSnapshotId": {
                          "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                          "type": "string"
                        },
                        "storageSnapshotId": {
                          "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                          "type": "string"
                        },
                        "snapshotResource": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "placementConstraints": {
                "description": "Placement constraints that the VNFM may send to the NFVO in order to influence the resource placement decision. If sent, the NFVO shall take the constraints into consideration when making resource placement decisions, and shall reject the grant if they cannot be honoured. The affinity/anti-affinity rules defined in the VNFD , and the placement constraints in the GrantVnfLifecycleOperation as defined in this clause should be conflict-free. In case of conflicts, the placement constraints in the GrantVnfLifecycleOperation shall take precedence. Passing constraints allows the VNFM or the lifecycle management scripts to influence resource placement decisions by the NFVO to ensure VNF properties such as performance or fault tolerance. If fallbackBestEffort is present in placement constraints and set to “true”, the NFVO shall process the Affinity/AntiAffinity constraint in a best effort manner, in which case, if specified resources cannot be allocated based on specified placement constraint, the NFVO looks for an alternate best effort placement for the specified resources to be granted. In the best effort anti-affinity case, the resources are expected to be spread optimally over all available instances of scope (e.g. zones), and in the best effort affinity case, they are expected to be distributed optimally over fewer possible instances of scope.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information regarding a resource placement constraint. A set of such constraints may be sent by the VNFM to the NFVO to influence the resource placement decisions made by the NFVO as part of the granting process. A placement constraint defines a condition to the placement of new resources, considering other new resources as well as existing resources. EXAMPLE: The following rules influence the placement of a set of resources such that they are placed in the same Network Function Virtualisation Infrastructure Point of Presence (NFVI-PoP) but in different resource zones: {type=\"AFFINITY\"; scope=\"NFVI_POP\"; {resource1,resource2}} {type=\"ANTI_AFFINITY\"; scope=\"ZONE\"; {resource1,resource2}}\n",
                  "type": "object",
                  "required": [
                    "affinityOrAntiAffinity",
                    "scope",
                    "resource"
                  ],
                  "properties": {
                    "affinityOrAntiAffinity": {
                      "description": "The type of the constraint. Permitted values: * AFFINITY * ANTI_AFFINITY\n",
                      "type": "string",
                      "enum": [
                        "AFFINITY",
                        "ANTI_AFFINITY"
                      ]
                    },
                    "scope": {
                      "description": "The scope of the placement constraint indicating the category of the \"place\" where the constraint applies. Permitted values: * NFVI_POP * ZONE * ZONE_GROUP * NFVI_NODE\n",
                      "type": "string",
                      "enum": [
                        "NFVI_POP",
                        "ZONE",
                        "ZONE_GROUP",
                        "NFVI_NODE"
                      ]
                    },
                    "resource": {
                      "description": "References to resources in the constraint rule.\n",
                      "type": "array",
                      "minItems": 2,
                      "items": {
                        "description": "This type references a resource either by its VIM-level identifier for existing resources, or by the identifier of a \"ResourceDefinition\" structure in the \"GrantRequest\" structure for new resources.\n",
                        "type": "object",
                        "required": [
                          "idType",
                          "resourceId"
                        ],
                        "properties": {
                          "idType": {
                            "description": "The type of the identifier. Permitted values: * RES_MGMT: Resource-management-level identifier; this identifier is\n  managed by the VIM in the direct mode of VNF-related resource\n  management, and is managed by the NFVO in the indirect mode)\n* GRANT: Reference to the identifier of a \"ResourceDefinition\" structure in the \"GrantRequest\" structure.\n",
                            "type": "string",
                            "enum": [
                              "RES_MGMT",
                              "GRANT"
                            ]
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          }
                        }
                      }
                    },
                    "fallbackBestEffort": {
                      "description": "The Boolean is a data type having two values (true and false).\n",
                      "type": "boolean"
                    }
                  }
                }
              },
              "vimConstraints": {
                "description": "Used by the VNFM to require that multiple resources are managed through the same VIM connection. If sent, the NFVO shall take the constraints into consideration when making VIM selection decisions, and shall reject the grant if they cannot be honoured. This attribute shall be supported if VNF-related Resource Management in direct mode is applicable. The applicability and further details of this attribute for indirect mode are left for future specification.\n",
                "type": "array",
                "items": {
                  "description": "This type provides information regarding a VIM selection constraint. A set of such constraints may be sent by the VNFM to the NFVO to influence the VIM selection decisions made by the NFVO as part of the granting process.\n",
                  "type": "object",
                  "required": [
                    "resource"
                  ],
                  "properties": {
                    "sameResourceGroup": {
                      "description": "If present and set to true, this signals that the constraint applies not only to the same VIM connection, but also to the same infrastructure resource group.\n",
                      "type": "boolean"
                    },
                    "resource": {
                      "description": "References to resources in the constraint rule. The NFVO shall ensure that all resources in this list are managed through the same VIM connection. If \"sameResourceGroup\" is set to true, the NFVO shall further ensure that all resources in this list are part of the same infrastructure resource group in that VIM connection.\n",
                      "type": "array",
                      "minItems": 2,
                      "items": {
                        "description": "This type references a resource either by its VIM-level identifier for existing resources, or by the identifier of a \"ResourceDefinition\" structure in the \"GrantRequest\" structure for new resources.\n",
                        "type": "object",
                        "required": [
                          "idType",
                          "resourceId"
                        ],
                        "properties": {
                          "idType": {
                            "description": "The type of the identifier. Permitted values: * RES_MGMT: Resource-management-level identifier; this identifier is\n  managed by the VIM in the direct mode of VNF-related resource\n  management, and is managed by the NFVO in the indirect mode)\n* GRANT: Reference to the identifier of a \"ResourceDefinition\" structure in the \"GrantRequest\" structure.\n",
                            "type": "string",
                            "enum": [
                              "RES_MGMT",
                              "GRANT"
                            ]
                          },
                          "resourceId": {
                            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                            "type": "string"
                          },
                          "vimConnectionId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          },
                          "resourceProviderId": {
                            "description": "An identifier with the intention of being globally unique.\n",
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "additionalParams": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "_links": {
                "description": "Links to resources related to this request.\n",
                "type": "object",
                "required": [
                  "vnfLcmOpOcc",
                  "vnfInstance"
                ],
                "properties": {
                  "vnfLcmOpOcc": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "vnfInstance": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a grant.\n",
          "type": "object",
          "required": [
            "id",
            "vnfInstanceId",
            "vnfLcmOpOccId",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfLcmOpOccId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vimConnectionInfo": {
              "description": "Provides information regarding VIM connections that are approved to be used by the VNFM to allocate resources, and provides parameters of these VIM connections. The VNFM shall update the \" vimConnectionInfo\" attribute of the \"VnfInstance\" structure by adding unknown entries received in this attribute. This attribute is not intended for the modification of vimConnectionInfo entries passed earlier; for that, the VnfInfoModificationRequest structure shall be used. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable. In direct mode, this parameter shall be absent if the VIM information was configured to the VNFM in another way, present otherwise. This interface allows to signal the use of multiple VIMs per VNF. However, due to the partial support of this feature in the present release, it is recommended in the present document that the number of entries in the \"vims\" attribute in the Grant is not greater than 1.\n",
              "type": "object",
              "additionalProperties": {
                "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                "type": "object",
                "required": [
                  "vimType"
                ],
                "properties": {
                  "vimId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimType": {
                    "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                    "type": "string"
                  },
                  "interfaceInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "accessInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "extra": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "zones": {
              "description": "Identifies resource zones where the resources are approved to be allocated by the VNFM.\n",
              "type": "array",
              "items": {
                "description": "This type provides information regarding a resource zone.\n",
                "type": "object",
                "required": [
                  "id",
                  "zoneId"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                }
              }
            },
            "zoneGroups": {
              "description": "Information about groups of resource zones that are related and that the NFVO has chosen to fulfil a zoneGroup constraint in the GrantVnfLifecycleOperation request. This information confirms that the NFVO has honoured the zoneGroup constraints that were passed as part of \"placementConstraints\" in the GrantRequest.\n",
              "type": "array",
              "items": {
                "description": "This type provides information regarding a resource zone group. A resource zone group is a group of one or more related resource zones which can be used in resource placement constraints. To fulfil such constraint, the NFVO may decide to place a resource into any zone that belongs to a particular group. NOTE: A resource zone group can be used to support overflow from one resource zone into another, in case a particular deployment supports only non-elastic resource zones.\n",
                "type": "object",
                "required": [
                  "zoneId"
                ],
                "properties": {
                  "zoneId": {
                    "description": "References of identifiers of \"ZoneInfo\" structures, each of which provides information about a resource zone that belongs to this group.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    }
                  }
                }
              }
            },
            "addResources": {
              "description": "List of resources that are approved to be added, with one entry per resource. Shall be set when resources are approved to be added.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "tempResources": {
              "description": "List of resources that are approved to be temporarily instantiated during the runtime of the lifecycle operation, with one entry per resource. Shall be set when resources are approved to be temporarily  instantiated.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "removeResources": {
              "description": "List of resources that are approved to be removed, with one entry per resource. Shall be set when resources are approved to be removed.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "updateResources": {
              "description": "List of resources that are approved to be modified, with one entry per resource. Shall be set when resources are approved to be updated.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "vimAssets": {
              "description": "Information about assets for the VNF that are managed by the NFVO in the VIM, such as software images and virtualised compute resource flavours. The Grant response allows the NFVO to pass to the VNFM VIM assets related to the VNF package that is identified by the vnfdId attribute in the corresponding Grant request. The NFVO may send in each Grant response the full set of VIM assets related to the VNF package defined by the vnfdId in the related Grant request, but shall send this information if the vnfdId in the related Grant request differs from the vnfdId passed in the previous Grant request, or if the Grant response is related to an InstantiateVnf operation. The set of VIM assets shall not change between subsequent Grant responses if the vnfdId has not changed. During each LCM operation occurrence, the VIM assets that relate to the VNF package identified by the current value of the vnfdId attribute in the “VnfInstance” structure shall be used by the VNFM for newly created resources. If the VNF package identifier of the VNF instance has been updated, VIM assets that relate to the previously-used VNF package(s), and that were communicated in previous Grant responses, apply to existing resources.\n",
              "type": "object",
              "properties": {
                "computeResourceFlavours": {
                  "description": "Mappings between virtual compute descriptors defined in the VNFD and compute resource flavours managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "If the VIM requires the use of virtual compute resource flavours during compute resource instantiation, it is assumed that such flavours are selected or created by the NFVO based on the information in the virtual compute descriptor defined in the VNFD. This type defines the mapping between a virtual compute descriptor in the VNFD and the corresponding compute resource flavour managed by the NFVO in the VIM.\n",
                    "type": "object",
                    "required": [
                      "vnfdVirtualComputeDescId",
                      "vimFlavourId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfdVirtualComputeDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vimFlavourId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "softwareImages": {
                  "description": "Mappings between software images defined in the VNFD and software images managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "This type contains a mapping between a software image definition the VNFD and the corresponding software image managed by the NFVO in the VIM which is needed during compute resource instantiation.\n",
                    "type": "object",
                    "required": [
                      "vnfdSoftwareImageId",
                      "vimSoftwareImageId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfdSoftwareImageId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vimSoftwareImageId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "snapshotResources": {
                  "description": "Mappings between snapshot resources defined in the VNF snapshot package and resources managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "This type contains a mapping between a snapshot resource definition related to a VNF snapshot  and the corresponding resource managed by the NFVO in the VIM which is needed during the revert  to VNF snapshot operation.\n",
                    "type": "object",
                    "required": [
                      "vnfSnapshotId",
                      "vnfcSnapshotId",
                      "vimSnapshotResourceId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfSnapshotId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfcSnapshotId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "storageSnapshotId": {
                        "description": "Identifier of the virtual storage resource that has been snapshotted as referred in the VNFC snapshot information. Shall only be present if the snapshot resource in the VIM is a storage  resource (as indicated by \"type=STORAGE\" in the parent resource definition). $ref: \"../../../definitions/SOL002SOL003_def.yaml#/definitions/IdentifierInVnf\"\n"
                      },
                      "vimSnapshotResourceId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            },
            "extVirtualLinks": {
              "description": "Information about external VLs to connect the VNF to. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\nIf this attribute is present , it need not contain those entries that are unchanged compared to the entries that were passed in the LCM operation which is related to this granting exchange. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\n",
              "type": "array",
              "items": {
                "description": "This type represents an external VL.\n",
                "type": "object",
                "required": [
                  "id",
                  "resourceId",
                  "extCps"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "extCps": {
                    "description": "External CPs of the VNF to be connected to this external VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents configuration information for external CPs created from a CPD.\n",
                      "type": "object",
                      "required": [
                        "cpdId"
                      ],
                      "properties": {
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfig": {
                          "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                          "type": "object",
                          "additionalProperties": {
                            "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                            "anyOf": [
                              {
                                "required": [
                                  "linkPortId"
                                ]
                              },
                              {
                                "required": [
                                  "cpProtocolData"
                                ]
                              }
                            ],
                            "type": "object",
                            "properties": {
                              "parentCpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "linkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolData": {
                                "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents network protocol data.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents network address data for IP over Ethernet.\n",
                                      "type": "object",
                                      "anyOf": [
                                        {
                                          "required": [
                                            "macAddress"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddresses"
                                          ]
                                        }
                                      ],
                                      "oneOf": [
                                        {
                                          "required": [
                                            "fixedAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "numDynamicAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddressRange"
                                          ]
                                        }
                                      ],
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "fixedAddresses": {
                                                "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "numDynamicAddresses": {
                                                "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "integer"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "extLinkPorts": {
                    "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "extManagedVirtualLinks": {
              "description": "Information about internal VLs that are managed by other entities than the VNFM. The indication of externally-managed internal VLs is needed in case networks have been pre-configured for use with certain VNFs, for instance to ensure that these networks have certain properties such as security or acceleration features, or to address particular network topologies. The present document assumes that externally-managed internal VLs are managed by the NFVO and created towards the VIM. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "vnfVirtualLinkDescId",
                  "resourceId"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfVirtualLinkDescId": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vnfLinkPort": {
                    "description": "Externally provided link ports to be used to connect VNFC connection points to this externally-managed VL on this network resource. If this attribute is not present, the VNFM shall create the link ports on the externally-managed VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents an externally provided link port to be used to connect a VNFC connection point  to an exernally managed VL.\n",
                      "type": "object",
                      "required": [
                        "vnfLinkPortId",
                        "resourceHandle"
                      ],
                      "properties": {
                        "vnfLinkPortId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  "extManagedMultisiteVirtualLinkId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                }
              }
            },
            "additionalParams": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfLcmOpOcc",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfLcmOpOcc": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postGrants"
      },
      "task": true
    },
    {
      "name": "getGrantsGrantId",
      "summary": "Grant Lifecycle Operation.\nThe GET method reads a grant.\nThis method shall follow the provisions sp",
      "description": "Grant Lifecycle Operation.\nThe GET method reads a grant.\nThis method shall follow the provisions specified in the tables 9.4.3.3.2-1 and 9.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "grantId",
          "type": "string",
          "info": "Identifier of the grant.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request granting a\nnew VNF ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "grantId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a grant.\n",
          "type": "object",
          "required": [
            "id",
            "vnfInstanceId",
            "vnfLcmOpOccId",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfLcmOpOccId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vimConnectionInfo": {
              "description": "Provides information regarding VIM connections that are approved to be used by the VNFM to allocate resources, and provides parameters of these VIM connections. The VNFM shall update the \" vimConnectionInfo\" attribute of the \"VnfInstance\" structure by adding unknown entries received in this attribute. This attribute is not intended for the modification of vimConnectionInfo entries passed earlier; for that, the VnfInfoModificationRequest structure shall be used. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable. In direct mode, this parameter shall be absent if the VIM information was configured to the VNFM in another way, present otherwise. This interface allows to signal the use of multiple VIMs per VNF. However, due to the partial support of this feature in the present release, it is recommended in the present document that the number of entries in the \"vims\" attribute in the Grant is not greater than 1.\n",
              "type": "object",
              "additionalProperties": {
                "description": "This type represents parameters to connect to a VIM for managing the resources of a VNF instance. This structure is used to convey VIM-related parameters over the Or-Vnfm interface. Additional parameters for a VIM may be configured into the VNFM by means outside the scope of the present document, and bound to the identifier of that VIM.\n",
                "type": "object",
                "required": [
                  "vimType"
                ],
                "properties": {
                  "vimId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimType": {
                    "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM. The set of permitted values is expected to change over time as new types or versions of VIMs become available. The ETSI NFV registry of VIM-related information provides access to information about VimConnectionInfo definitions for various VIM types. The structure of the registry is defined in Annex C of SOL003.\n",
                    "type": "string"
                  },
                  "interfaceInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "accessInfo": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "extra": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "zones": {
              "description": "Identifies resource zones where the resources are approved to be allocated by the VNFM.\n",
              "type": "array",
              "items": {
                "description": "This type provides information regarding a resource zone.\n",
                "type": "object",
                "required": [
                  "id",
                  "zoneId"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                }
              }
            },
            "zoneGroups": {
              "description": "Information about groups of resource zones that are related and that the NFVO has chosen to fulfil a zoneGroup constraint in the GrantVnfLifecycleOperation request. This information confirms that the NFVO has honoured the zoneGroup constraints that were passed as part of \"placementConstraints\" in the GrantRequest.\n",
              "type": "array",
              "items": {
                "description": "This type provides information regarding a resource zone group. A resource zone group is a group of one or more related resource zones which can be used in resource placement constraints. To fulfil such constraint, the NFVO may decide to place a resource into any zone that belongs to a particular group. NOTE: A resource zone group can be used to support overflow from one resource zone into another, in case a particular deployment supports only non-elastic resource zones.\n",
                "type": "object",
                "required": [
                  "zoneId"
                ],
                "properties": {
                  "zoneId": {
                    "description": "References of identifiers of \"ZoneInfo\" structures, each of which provides information about a resource zone that belongs to this group.\n",
                    "type": "array",
                    "items": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    }
                  }
                }
              }
            },
            "addResources": {
              "description": "List of resources that are approved to be added, with one entry per resource. Shall be set when resources are approved to be added.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "tempResources": {
              "description": "List of resources that are approved to be temporarily instantiated during the runtime of the lifecycle operation, with one entry per resource. Shall be set when resources are approved to be temporarily  instantiated.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "removeResources": {
              "description": "List of resources that are approved to be removed, with one entry per resource. Shall be set when resources are approved to be removed.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "updateResources": {
              "description": "List of resources that are approved to be modified, with one entry per resource. Shall be set when resources are approved to be updated.\n",
              "type": "array",
              "items": {
                "description": "This type contains information about a Compute, storage or network resource whose addition/update/deletion was granted.\n",
                "type": "object",
                "required": [
                  "resourceDefinitionId"
                ],
                "properties": {
                  "resourceDefinitionId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "reservationId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "zoneId": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "resourceGroupId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  }
                }
              }
            },
            "vimAssets": {
              "description": "Information about assets for the VNF that are managed by the NFVO in the VIM, such as software images and virtualised compute resource flavours. The Grant response allows the NFVO to pass to the VNFM VIM assets related to the VNF package that is identified by the vnfdId attribute in the corresponding Grant request. The NFVO may send in each Grant response the full set of VIM assets related to the VNF package defined by the vnfdId in the related Grant request, but shall send this information if the vnfdId in the related Grant request differs from the vnfdId passed in the previous Grant request, or if the Grant response is related to an InstantiateVnf operation. The set of VIM assets shall not change between subsequent Grant responses if the vnfdId has not changed. During each LCM operation occurrence, the VIM assets that relate to the VNF package identified by the current value of the vnfdId attribute in the “VnfInstance” structure shall be used by the VNFM for newly created resources. If the VNF package identifier of the VNF instance has been updated, VIM assets that relate to the previously-used VNF package(s), and that were communicated in previous Grant responses, apply to existing resources.\n",
              "type": "object",
              "properties": {
                "computeResourceFlavours": {
                  "description": "Mappings between virtual compute descriptors defined in the VNFD and compute resource flavours managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "If the VIM requires the use of virtual compute resource flavours during compute resource instantiation, it is assumed that such flavours are selected or created by the NFVO based on the information in the virtual compute descriptor defined in the VNFD. This type defines the mapping between a virtual compute descriptor in the VNFD and the corresponding compute resource flavour managed by the NFVO in the VIM.\n",
                    "type": "object",
                    "required": [
                      "vnfdVirtualComputeDescId",
                      "vimFlavourId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfdVirtualComputeDescId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vimFlavourId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "softwareImages": {
                  "description": "Mappings between software images defined in the VNFD and software images managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "This type contains a mapping between a software image definition the VNFD and the corresponding software image managed by the NFVO in the VIM which is needed during compute resource instantiation.\n",
                    "type": "object",
                    "required": [
                      "vnfdSoftwareImageId",
                      "vimSoftwareImageId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfdSoftwareImageId": {
                        "description": "An identifier that is unique within a VNF descriptor.\n",
                        "type": "string"
                      },
                      "vimSoftwareImageId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                },
                "snapshotResources": {
                  "description": "Mappings between snapshot resources defined in the VNF snapshot package and resources managed in the VIM.\n",
                  "type": "array",
                  "items": {
                    "description": "This type contains a mapping between a snapshot resource definition related to a VNF snapshot  and the corresponding resource managed by the NFVO in the VIM which is needed during the revert  to VNF snapshot operation.\n",
                    "type": "object",
                    "required": [
                      "vnfSnapshotId",
                      "vnfcSnapshotId",
                      "vimSnapshotResourceId"
                    ],
                    "properties": {
                      "vimConnectionId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "resourceProviderId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfSnapshotId": {
                        "description": "An identifier with the intention of being globally unique.\n",
                        "type": "string"
                      },
                      "vnfcSnapshotId": {
                        "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                        "type": "string"
                      },
                      "storageSnapshotId": {
                        "description": "Identifier of the virtual storage resource that has been snapshotted as referred in the VNFC snapshot information. Shall only be present if the snapshot resource in the VIM is a storage  resource (as indicated by \"type=STORAGE\" in the parent resource definition). $ref: \"../../../definitions/SOL002SOL003_def.yaml#/definitions/IdentifierInVnf\"\n"
                      },
                      "vimSnapshotResourceId": {
                        "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            },
            "extVirtualLinks": {
              "description": "Information about external VLs to connect the VNF to. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\nIf this attribute is present , it need not contain those entries that are unchanged compared to the entries that were passed in the LCM operation which is related to this granting exchange. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\n",
              "type": "array",
              "items": {
                "description": "This type represents an external VL.\n",
                "type": "object",
                "required": [
                  "id",
                  "resourceId",
                  "extCps"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "extCps": {
                    "description": "External CPs of the VNF to be connected to this external VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents configuration information for external CPs created from a CPD.\n",
                      "type": "object",
                      "required": [
                        "cpdId"
                      ],
                      "properties": {
                        "cpdId": {
                          "description": "An identifier that is unique within a VNF descriptor.\n",
                          "type": "string"
                        },
                        "cpConfig": {
                          "description": "Map of instance data that need to be configured on the CP instances created from the respective CPD. The key of the map which identifies the individual VnfExtCpConfig entries is managed by the API consumer. The entries shall be applied by the VNFM according to the rules of JSON Merge Patch (see IETF RFC 7396). Within one VNF instance, all VNFC instances created from a particular VDU have the same external connectivity. Thus, given a particular value of the “cpdId” attribute, there shall be one “cpConfig” entry for each VNFC instance that has been or can be created from a VDU which includes a CPD identified by the “cpdId” attribute. If the cpConfig represents a subport in a trunk, all “cpConfig” entries in this list shall have the same segmentationId, which means they are connected to the same set of external VLs via the trunk. The map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified by a particular key value from the map, i.e. for the disconnection of an existing external CP instance addressed by cpInstanceId in the deleted map entry from a particular external virtual link, and deletion of that instance in case it represents a subport. Deleting the last key from the map removes the affected instance of the \"VnfExtCpData\" structure from its parent data structure.\n",
                          "type": "object",
                          "additionalProperties": {
                            "description": "This type represents an externally provided link port or network address information per instance of an external connection point. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the external VL. In a link port is not provided, the VNFM shall create a link port on the external VL, and use that link port to connect the external CP to the external VL.\n",
                            "anyOf": [
                              {
                                "required": [
                                  "linkPortId"
                                ]
                              },
                              {
                                "required": [
                                  "cpProtocolData"
                                ]
                              }
                            ],
                            "type": "object",
                            "properties": {
                              "parentCpConfigId": {
                                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                                "type": "string"
                              },
                              "linkPortId": {
                                "description": "An identifier with the intention of being globally unique.\n",
                                "type": "string"
                              },
                              "cpProtocolData": {
                                "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\": 1) Void 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes \n   shall be present for an external CP instance representing a subport \n   that is to be created, or an external CP instance that is to be created \n   by creating the corresponding VNFC or VNF instance during the current or \n   a subsequent LCM operation, or for an existing external CP instance \n   that is to be re-configured or added to a particular external virtual link.\n3) If the \"linkPortId\" attribute is absent, the VNFM shall create a\n   link port.\n4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\"\n   attribute shall be provided referencing a pre-created link port,\n   and the VNFM can use means outside the scope of the present\n   document to obtain the pre-configured address information for the\n   connection point from the resource representing the link port.\n5) If both \"cpProtocolData\" and \"linkportId\" are provided, the API\n   consumer shall ensure that the cpProtocolData can be used with the\n   pre-created link port referenced by \"linkPortId\".\n",
                                "type": "array",
                                "items": {
                                  "description": "This type represents network protocol data.\n",
                                  "type": "object",
                                  "required": [
                                    "layerProtocol"
                                  ],
                                  "properties": {
                                    "layerProtocol": {
                                      "description": "Identifier of layer(s) and protocol(s). This attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.\n",
                                      "type": "string",
                                      "enum": [
                                        "IP_OVER_ETHERNET"
                                      ]
                                    },
                                    "ipOverEthernet": {
                                      "description": "This type represents network address data for IP over Ethernet.\n",
                                      "type": "object",
                                      "anyOf": [
                                        {
                                          "required": [
                                            "macAddress"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddresses"
                                          ]
                                        }
                                      ],
                                      "oneOf": [
                                        {
                                          "required": [
                                            "fixedAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "numDynamicAddresses"
                                          ]
                                        },
                                        {
                                          "required": [
                                            "ipAddressRange"
                                          ]
                                        }
                                      ],
                                      "properties": {
                                        "macAddress": {
                                          "description": "A MAC address. Representation: string that consists of groups of two hexadecimal digits, separated by hyphens or colons.\n",
                                          "type": "string"
                                        },
                                        "segmentationId": {
                                          "description": "Identification of the network segment to which the Cp instance connects to. If the Cp instance represents a subport in a trunk, segmentationId shall be present. Otherwise it shall not be present. Depending on the NFVI networking infrastructure, the segmentationId may indicate the actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the transport header of the packets or it may be an identifier used between the application and the NFVI networking infrastructure to identify the network sub-interface of the trunk port in question. In the latter case the NFVI infrastructure will map this local segmentationId to whatever segmentationId is actually used by the NFVI’s transport technology.\n",
                                          "type": "string"
                                        },
                                        "ipAddresses": {
                                          "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet. If this attribute is not present, no IP address shall be assigned.\n",
                                          "type": "array",
                                          "items": {
                                            "type": "object",
                                            "required": [
                                              "type"
                                            ],
                                            "properties": {
                                              "type": {
                                                "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n",
                                                "type": "string",
                                                "enum": [
                                                  "IPV4",
                                                  "IPV6"
                                                ]
                                              },
                                              "fixedAddresses": {
                                                "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "array",
                                                "items": {
                                                  "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                  "type": "string"
                                                }
                                              },
                                              "numDynamicAddresses": {
                                                "description": "Number of dynamic addresses to assign (from the subnet defined by \"subnetId\" if provided). Exactly one of \"fixedAddresses\", \"numDynamicAddresses\" or \"ipAddressRange\" shall be present.\n",
                                                "type": "integer"
                                              },
                                              "addressRange": {
                                                "description": "An IP address range to be used, e.g. in case of egress connections. In case this attribute is present, IP addresses from the range will be used.\n",
                                                "type": "object",
                                                "required": [
                                                  "minAddress",
                                                  "maxAddress"
                                                ],
                                                "properties": {
                                                  "minAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  },
                                                  "maxAddress": {
                                                    "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n",
                                                    "type": "string"
                                                  }
                                                }
                                              },
                                              "subnetId": {
                                                "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                                                "type": "string"
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "extLinkPorts": {
                    "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the VNFM shall create the link ports on the external VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents an externally provided link port to be used to connect an external connection point to an external VL.\n",
                      "type": "object",
                      "required": [
                        "id",
                        "resourceHandle"
                      ],
                      "properties": {
                        "id": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "extManagedVirtualLinks": {
              "description": "Information about internal VLs that are managed by other entities than the VNFM. The indication of externally-managed internal VLs is needed in case networks have been pre-configured for use with certain VNFs, for instance to ensure that these networks have certain properties such as security or acceleration features, or to address particular network topologies. The present document assumes that externally-managed internal VLs are managed by the NFVO and created towards the VIM. External and/or externally-managed internal VLs can be passed in VNF lifecycle management operation requests such as InstantiateVnf, ChangeVnfFlavor,  ChangeExtVnfConnectivity or ChangeCurrentVnfPackage and/or in the grant response.  The NFVO may choose to override in the grant response external and/or  externally-managed VL instances that have been passed previously in the  associated VNF lifecycle management request, if the lifecycle management request has originated from the NFVO itself. In case of granting an InstantiateVnf request that has originated from the NFVO  and that did not contain the \"extVirtualLinks\" attribute, this attribute shall be  set by the NFVO. Further in case of granting an InstantiateVnf request that has  originated from the NFVO and that did not contain the \"extManagedVirtualLinks\"  attribute, this attribute shall be set by the NFVO if there is the need to provide  information about externally-managed virtual links.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "vnfVirtualLinkDescId",
                  "resourceId"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfVirtualLinkDescId": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  },
                  "vimConnectionId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceProviderId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "resourceId": {
                    "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                    "type": "string"
                  },
                  "vnfLinkPort": {
                    "description": "Externally provided link ports to be used to connect VNFC connection points to this externally-managed VL on this network resource. If this attribute is not present, the VNFM shall create the link ports on the externally-managed VL.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents an externally provided link port to be used to connect a VNFC connection point  to an exernally managed VL.\n",
                      "type": "object",
                      "required": [
                        "vnfLinkPortId",
                        "resourceHandle"
                      ],
                      "properties": {
                        "vnfLinkPortId": {
                          "description": "An identifier with the intention of being globally unique.\n",
                          "type": "string"
                        },
                        "resourceHandle": {
                          "required": [
                            "resourceId"
                          ],
                          "type": "object",
                          "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n",
                          "properties": {
                            "vimConnectionId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceProviderId": {
                              "description": "An identifier with the intention of being globally unique.\n",
                              "type": "string"
                            },
                            "resourceId": {
                              "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
                              "type": "string"
                            },
                            "vimLevelResourceType": {
                              "description": "The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or the resource provider and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2 in SOL003).\n",
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  "extManagedMultisiteVirtualLinkId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  }
                }
              }
            },
            "additionalParams": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "vnfLcmOpOcc",
                "vnfInstance"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfLcmOpOcc": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfInstance": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getGrantsGrantId"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackages",
      "summary": "Query VNF Package Info.\nThe GET method queries the information of the VNF packages matching the fil",
      "description": "Query VNF Package Info.\nThe GET method queries the information of the VNF packages matching the filter.\nThis method shall follow the provisions specified in the tables 10.4.2.3.2-1 and 10.4.2.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "allFields",
          "type": "string",
          "info": "Include all complex attributes in the response. See clause 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "allFields",
            "type": "string"
          }
        },
        {
          "name": "fields",
          "type": "string",
          "info": "Complex attributes to be included into the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "fields",
            "type": "string"
          }
        },
        {
          "name": "excludeFields",
          "type": "string",
          "info": "Complex attributes to be excluded from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "excludeFields",
            "type": "string"
          }
        },
        {
          "name": "excludeDefault",
          "type": "string",
          "info": "Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity shall support t...(description truncated): string",
          "required": false,
          "schema": {
            "title": "excludeDefault",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents the information of an VNF package.\n",
            "type": "object",
            "required": [
              "id",
              "packageSecurityOption",
              "operationalState",
              "usageState",
              "vnfmInfo",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfdId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfProvider": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "vnfProductName": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "vnfSoftwareVersion": {
                "description": "A version.\n",
                "type": "string"
              },
              "vnfdVersion": {
                "description": "A version.\n",
                "type": "string"
              },
              "compatibleSpecificationVersions": {
                "description": "Indicates which versions of the ETSI GS NFV-SOL 004 specification the package complies to, as defined in the manifest of the package. Each entry shall be formatted as defined in clause 4.3.2 of ETSI GS NFV-SOL 004.\n",
                "type": "array",
                "items": {
                  "description": "A version.\n",
                  "type": "string"
                }
              },
              "checksum": {
                "description": "Cheksum description\n",
                "type": "string"
              },
              "packageSecurityOption": {
                "description": "Signals the security option used by the package as defined in clause 5.1 of ETSI GS NFV-SOL 004. Valid values: OPTION_1, OPTION_2\n",
                "type": "string",
                "enum": [
                  "OPTION_1",
                  "OPTION_2"
                ]
              },
              "signingCertificate": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "softwareImages": {
                "description": "Information about VNF package artifacts that are software images. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present unless it has been requested to be excluded per attribute selector.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an artifact contained in or external to a VNF package which represents a software image.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "provider",
                    "version",
                    "checksum",
                    "isEncrypted",
                    "containerFormat",
                    "diskFormat",
                    "createdAt",
                    "minDisk",
                    "minRam",
                    "size"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a VNF descriptor.\n",
                      "type": "string"
                    },
                    "name": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "provider": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "version": {
                      "description": "A version.\n",
                      "type": "string"
                    },
                    "checksum": {
                      "description": "Cheksum description\n",
                      "type": "string"
                    },
                    "isEncrypted": {
                      "description": "The Boolean is a data type having two values (true and false).\n",
                      "type": "boolean"
                    },
                    "containerFormat": {
                      "description": "Container format indicates whether the software image is in a file format that also contains metadata about the actual software. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format The list of permitted values was taken from \"Container formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                      "type": "string",
                      "enum": [
                        "AKI",
                        "AMI",
                        "ARI",
                        "BARE",
                        "DOCKER",
                        "OVA",
                        "OVF"
                      ]
                    },
                    "diskFormat": {
                      "description": "Disk format of a software image is the format of the underlying disk image. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - ISO: an archive format for the data contents of an optical disc,\n  such as CD-ROM\n- QCOW2: a common disk image format, which can expand dynamically\n  and supports copy on write\n- RAW: an unstructured disk image format - VDI: a common disk image format - VHD: a common disk image format - VHDX: enhanced version of VHD format - VMDK: a common disk image format The list of permitted values was adapted from \"Disk formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                      "type": "string",
                      "enum": [
                        "AKI",
                        "AMI",
                        "ISO",
                        "QCOW2",
                        "RAW",
                        "VDI",
                        "VHD",
                        "VHDX",
                        "VMDK"
                      ]
                    },
                    "createdAt": {
                      "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                      "type": "string"
                    },
                    "minDisk": {
                      "description": "The minimal disk for this software image in bytes.\n",
                      "type": "integer"
                    },
                    "minRam": {
                      "description": "The minimal RAM for this software image in bytes.\n",
                      "type": "integer"
                    },
                    "size": {
                      "description": "Size of this software image in bytes.\n",
                      "type": "integer"
                    },
                    "userMetadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "imagePath": {
                      "description": "Path which identifies the image artifact and also allows to access a copy of the image artifact. For a software image contained as a file in the VNF package, this attribute shall be present, and the value of this attribute shall start with the name of the first segment in the path in the package, i.e., it shall not be prefixed by path separator characters such as \".\" and \"/\". EXAMPLE: foo/bar/m%40ster.vhd For an external software image represented as a URI in the VNF descriptor, this attribute shall be present if the  image artifact has been downloaded by the NFVO and shall be absent otherwise. If present, it shall contain the artifactPath under which the image artifact can be obtained using the \"Individual artifact in a VNF package\" resource defined in clause 9.4.7. It is the responsibility of the NFVO to synthesize this path in a manner that avoids any collision of the synthesized artifact path with the paths and names of image artifacts included in the package.\n",
                      "type": "string"
                    },
                    "imageUri": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "additionalArtifacts": {
                "description": "Information about VNF package artifacts contained in the VNF package that are not software images. Every local and external artifact declared in the manifest shall be included, except the software images and the files that make up the parts of the VNFD (see clause 10.4.4.3.2). Signature files and certificate files are not considered as artifacts, however, the content of the \"Licenses\" and \"Testing\" directories in the VNF package is. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present if the VNF package contains additional artifacts.\n",
                "type": "array",
                "items": {
                  "description": "This type represents an artifact other than a software image which is contained in or external to a VNF package.\n",
                  "type": "object",
                  "required": [
                    "artifactPath",
                    "checksum",
                    "isEncrypted"
                  ],
                  "properties": {
                    "artifactPath": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "artifactURI": {
                      "description": "URI of the artifact as defined in the VNF package manifest. Shall be present if the artifact is external to the package and shall be absent otherwise.\nEXAMPLE: https://example.com/m%40ster.sh\n",
                      "type": "array",
                      "items": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    },
                    "checksum": {
                      "description": "Cheksum description\n",
                      "type": "string"
                    },
                    "isEncrypted": {
                      "description": "The Boolean is a data type having two values (true and false).\n",
                      "type": "boolean"
                    },
                    "nonManoArtifactSetId": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "artifactClassification": {
                      "description": "Marks specific types of artifacts as defined in the VNF package. If none of the specific classes listed below applies, the attribute shall not be present.\nValid values: -\tHISTORY: a history artifact as per clause 4.3.3 in ETSI GS NFV-SOL 004 -\tTESTING: a testing artifact as per clause 4.3.4 in ETSI GS NFV-SOL 004 -\tLICENSE: a license artifact as per clause 4.3.5 in ETSI GS NFV-SOL 004\n",
                      "type": "string",
                      "enum": [
                        "HISTORY",
                        "TESTING",
                        "LICENSE"
                      ]
                    },
                    "metadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "onboardingState": {
                "description": "CREATED: The \"Individual VNF package\" resource has been created. UPLOADING: The associated VNF package content is being uploaded. PROCESSING: The associated VNF package content is being processed, e.g.,\n            validation.\nONBOARDED: The associated VNF package content has been on-boarded successfully. ERROR: There was an error during upload of the VNF package content or external\n        artifacts, or during VNF package processing.\n",
                "type": "string",
                "enum": [
                  "CREATED",
                  "UPLOADING",
                  "PROCESSING",
                  "ONBOARDED",
                  "ERROR"
                ]
              },
              "operationalState": {
                "description": "- ENABLED: The VNF package is enabled, i.e. it can be used for\n  the creation of new \"Individual VNF instance\" resources.\n- DISABLED: The VNF package is disabled, i.e. it shall not be used for\n  the creation of further \"Individual VNF instance\" resources\n  (unless and until the VNF package is re-enabled).\n",
                "type": "string",
                "enum": [
                  "ENABLED",
                  "DISABLED"
                ]
              },
              "usageState": {
                "description": "- IN_USE: \"Individual VNF instance\" resources created from this VNF package exist. - NOT_IN_USE: No \"Individual VNF instance\" resource created from this VNF package exists.\n",
                "type": "string",
                "enum": [
                  "IN_USE",
                  "NOT_IN_USE"
                ]
              },
              "vnfmInfo": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "userDefinedData": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "onboardingFailureDetails": {
                "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
                "type": "object",
                "required": [
                  "status",
                  "detail"
                ],
                "properties": {
                  "type": {
                    "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                    "type": "string"
                  },
                  "title": {
                    "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                    "type": "string"
                  },
                  "status": {
                    "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                    "type": "integer"
                  },
                  "detail": {
                    "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                    "type": "string"
                  },
                  "instance": {
                    "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                    "type": "string"
                  }
                }
              },
              "_links": {
                "description": "Links to resources related to this resource.\n",
                "type": "object",
                "required": [
                  "self",
                  "packageContent"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "vnfd": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "packageContent": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackages"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdId",
      "summary": "Query VNF Package Info.\nThe GET method reads the information of an individual VNF package.\nThis met",
      "description": "Query VNF Package Info.\nThe GET method reads the information of an individual VNF package.\nThis method shall follow the provisions specified in the tables\n10.4.3.3.2-1 and 10.4.3.3.2-2 for URI query parameters,\nrequest and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents the information of an VNF package.\n",
          "type": "object",
          "required": [
            "id",
            "packageSecurityOption",
            "operationalState",
            "usageState",
            "vnfmInfo",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfdId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfProvider": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "vnfProductName": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "vnfSoftwareVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfdVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "compatibleSpecificationVersions": {
              "description": "Indicates which versions of the ETSI GS NFV-SOL 004 specification the package complies to, as defined in the manifest of the package. Each entry shall be formatted as defined in clause 4.3.2 of ETSI GS NFV-SOL 004.\n",
              "type": "array",
              "items": {
                "description": "A version.\n",
                "type": "string"
              }
            },
            "checksum": {
              "description": "Cheksum description\n",
              "type": "string"
            },
            "packageSecurityOption": {
              "description": "Signals the security option used by the package as defined in clause 5.1 of ETSI GS NFV-SOL 004. Valid values: OPTION_1, OPTION_2\n",
              "type": "string",
              "enum": [
                "OPTION_1",
                "OPTION_2"
              ]
            },
            "signingCertificate": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "softwareImages": {
              "description": "Information about VNF package artifacts that are software images. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present unless it has been requested to be excluded per attribute selector.\n",
              "type": "array",
              "items": {
                "description": "This type represents an artifact contained in or external to a VNF package which represents a software image.\n",
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "provider",
                  "version",
                  "checksum",
                  "isEncrypted",
                  "containerFormat",
                  "diskFormat",
                  "createdAt",
                  "minDisk",
                  "minRam",
                  "size"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  },
                  "name": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "provider": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "version": {
                    "description": "A version.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "containerFormat": {
                    "description": "Container format indicates whether the software image is in a file format that also contains metadata about the actual software. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format The list of permitted values was taken from \"Container formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ARI",
                      "BARE",
                      "DOCKER",
                      "OVA",
                      "OVF"
                    ]
                  },
                  "diskFormat": {
                    "description": "Disk format of a software image is the format of the underlying disk image. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - ISO: an archive format for the data contents of an optical disc,\n  such as CD-ROM\n- QCOW2: a common disk image format, which can expand dynamically\n  and supports copy on write\n- RAW: an unstructured disk image format - VDI: a common disk image format - VHD: a common disk image format - VHDX: enhanced version of VHD format - VMDK: a common disk image format The list of permitted values was adapted from \"Disk formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ISO",
                      "QCOW2",
                      "RAW",
                      "VDI",
                      "VHD",
                      "VHDX",
                      "VMDK"
                    ]
                  },
                  "createdAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "minDisk": {
                    "description": "The minimal disk for this software image in bytes.\n",
                    "type": "integer"
                  },
                  "minRam": {
                    "description": "The minimal RAM for this software image in bytes.\n",
                    "type": "integer"
                  },
                  "size": {
                    "description": "Size of this software image in bytes.\n",
                    "type": "integer"
                  },
                  "userMetadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "imagePath": {
                    "description": "Path which identifies the image artifact and also allows to access a copy of the image artifact. For a software image contained as a file in the VNF package, this attribute shall be present, and the value of this attribute shall start with the name of the first segment in the path in the package, i.e., it shall not be prefixed by path separator characters such as \".\" and \"/\". EXAMPLE: foo/bar/m%40ster.vhd For an external software image represented as a URI in the VNF descriptor, this attribute shall be present if the  image artifact has been downloaded by the NFVO and shall be absent otherwise. If present, it shall contain the artifactPath under which the image artifact can be obtained using the \"Individual artifact in a VNF package\" resource defined in clause 9.4.7. It is the responsibility of the NFVO to synthesize this path in a manner that avoids any collision of the synthesized artifact path with the paths and names of image artifacts included in the package.\n",
                    "type": "string"
                  },
                  "imageUri": {
                    "description": "String formatted according to IETF RFC 3986.\n",
                    "type": "string"
                  }
                }
              }
            },
            "additionalArtifacts": {
              "description": "Information about VNF package artifacts contained in the VNF package that are not software images. Every local and external artifact declared in the manifest shall be included, except the software images and the files that make up the parts of the VNFD (see clause 10.4.4.3.2). Signature files and certificate files are not considered as artifacts, however, the content of the \"Licenses\" and \"Testing\" directories in the VNF package is. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present if the VNF package contains additional artifacts.\n",
              "type": "array",
              "items": {
                "description": "This type represents an artifact other than a software image which is contained in or external to a VNF package.\n",
                "type": "object",
                "required": [
                  "artifactPath",
                  "checksum",
                  "isEncrypted"
                ],
                "properties": {
                  "artifactPath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "artifactURI": {
                    "description": "URI of the artifact as defined in the VNF package manifest. Shall be present if the artifact is external to the package and shall be absent otherwise.\nEXAMPLE: https://example.com/m%40ster.sh\n",
                    "type": "array",
                    "items": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "nonManoArtifactSetId": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "artifactClassification": {
                    "description": "Marks specific types of artifacts as defined in the VNF package. If none of the specific classes listed below applies, the attribute shall not be present.\nValid values: -\tHISTORY: a history artifact as per clause 4.3.3 in ETSI GS NFV-SOL 004 -\tTESTING: a testing artifact as per clause 4.3.4 in ETSI GS NFV-SOL 004 -\tLICENSE: a license artifact as per clause 4.3.5 in ETSI GS NFV-SOL 004\n",
                    "type": "string",
                    "enum": [
                      "HISTORY",
                      "TESTING",
                      "LICENSE"
                    ]
                  },
                  "metadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "onboardingState": {
              "description": "CREATED: The \"Individual VNF package\" resource has been created. UPLOADING: The associated VNF package content is being uploaded. PROCESSING: The associated VNF package content is being processed, e.g.,\n            validation.\nONBOARDED: The associated VNF package content has been on-boarded successfully. ERROR: There was an error during upload of the VNF package content or external\n        artifacts, or during VNF package processing.\n",
              "type": "string",
              "enum": [
                "CREATED",
                "UPLOADING",
                "PROCESSING",
                "ONBOARDED",
                "ERROR"
              ]
            },
            "operationalState": {
              "description": "- ENABLED: The VNF package is enabled, i.e. it can be used for\n  the creation of new \"Individual VNF instance\" resources.\n- DISABLED: The VNF package is disabled, i.e. it shall not be used for\n  the creation of further \"Individual VNF instance\" resources\n  (unless and until the VNF package is re-enabled).\n",
              "type": "string",
              "enum": [
                "ENABLED",
                "DISABLED"
              ]
            },
            "usageState": {
              "description": "- IN_USE: \"Individual VNF instance\" resources created from this VNF package exist. - NOT_IN_USE: No \"Individual VNF instance\" resource created from this VNF package exists.\n",
              "type": "string",
              "enum": [
                "IN_USE",
                "NOT_IN_USE"
              ]
            },
            "vnfmInfo": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "userDefinedData": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "onboardingFailureDetails": {
              "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
              "type": "object",
              "required": [
                "status",
                "detail"
              ],
              "properties": {
                "type": {
                  "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                  "type": "string"
                },
                "title": {
                  "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                  "type": "string"
                },
                "status": {
                  "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                  "type": "integer"
                },
                "detail": {
                  "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                  "type": "string"
                },
                "instance": {
                  "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                  "type": "string"
                }
              }
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "packageContent"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfd": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "packageContent": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdId"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdIdVnfd",
      "summary": "Query VNF Package Info\n\nThe GET method reads the content of the VNFD within a VNF package.\nThe VNFD",
      "description": "Query VNF Package Info\n\nThe GET method reads the content of the VNFD within a VNF package.\nThe VNFD is implemented as a collection of one or more files.\nA ZIP archive embedding these files shall be returned when reading this resource.\nThe default format of the ZIP archive shall be the one specified in ETSI GS NFV-SOL 004\nwhere only the files representing the VNFD and information needed to navigate the ZIP\narchive and to identify the file that is the entry point for parsing the VNFD, and,\nif requ...(description truncated)",
      "input": [
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdIdVnfd"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdIdManifest",
      "summary": "Query VNF Package Manifest\n\nThe GET method reads the content of the manifest within a VNF package.\n",
      "description": "Query VNF Package Manifest\n\nThe GET method reads the content of the manifest within a VNF package.\nThis method shall follow the provisions specified in the tables 10.4.4a.3.2-1\nand 10.4.4a.3.2-2 for URI query parameters, request and response data structures,\nand response codes.\n",
      "input": [
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdIdManifest"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdIdPackageContent",
      "summary": "Fetch VNF Package.\nThe GET method fetches the content of a VNF package identified by the\nVNF packag",
      "description": "Fetch VNF Package.\nThe GET method fetches the content of a VNF package identified by the\nVNF package identifier allocated by the NFVO.\nThe content of the package is provided as onboarded, i.e. depending on\nthe security option used, the CSAR or the CSAR wrapped in a ZIP archive\ntogether with an external signature is returned, as defined in clause\n5.1 of ETSI GS NFV-SOL 004.\n\nNOTE:\tInformation about the applicable security option can be obtained\nby evaluating the \"packageSecurityOption\" attribute ...(description truncated)",
      "input": [
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdIdPackageContent"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdIdArtifacts",
      "summary": "Fetch VNF Package Artifacts.\n\nThe GET method shall return an archive that contains a set of artifac",
      "description": "Fetch VNF Package Artifacts.\n\nThe GET method shall return an archive that contains a set of artifacts\naccording to the provisions for inclusion/exclusion defined below,\nembedded in a directory structure being the same as in the VNF package.\nThe criteria for exclusion/inclusion of an artifact in the archive are defined as follows:\n-\tArtifacts that are software images shall be excluded from the archive.\n-\tArtifacts that are not software images and that are external to the VNF package shall be \n   ...(description truncated)",
      "input": [
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdIdArtifacts"
      },
      "task": true
    },
    {
      "name": "getOnboardedVnfPackagesVnfdIdArtifactsArtifactPath",
      "summary": "Fetch VNF Package Artifacts.\nThe GET method fetches the content of an artifact within a VNF package",
      "description": "Fetch VNF Package Artifacts.\nThe GET method fetches the content of an artifact within a VNF package.\nThis method shall follow the provisions specified in the tables\n10.4.6.3.2-1 and 10.4.6.3.2-2 for URI query parameters, request\nand response data structures, and response codes.\n",
      "input": [
        {
          "name": "artifactPath",
          "type": "string",
          "info": "SequenceFor an artifact contained as a file in the VNF package,\nthis variable shall contain a sequence of one or more path segments\nrepresenting the path of the artifact ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "artifactPath",
            "type": "string"
          }
        },
        {
          "name": "vnfdId",
          "type": "string",
          "info": "Identifier of the VNFD and the VNF package.\nThe identifier is allocated by the VNF provider.\nThis identifier can be retrieved from the \"vnfdId\" attribute\nin the VnfPackag...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfdId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getOnboardedVnfPackagesVnfdIdArtifactsArtifactPath"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgId",
      "summary": "Query VNF Package Info.\nThe GET method reads the information of an individual VNF package.\nThis met",
      "description": "Query VNF Package Info.\nThe GET method reads the information of an individual VNF package.\nThis method shall follow the provisions specified in the tables\n10.4.3.3.2-1 and 10.4.3.3.2-2 for URI query parameters,\nrequest and response data structures, and response codes.\n",
      "input": [
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents the information of an VNF package.\n",
          "type": "object",
          "required": [
            "id",
            "packageSecurityOption",
            "operationalState",
            "usageState",
            "vnfmInfo",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfdId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfProvider": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "vnfProductName": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "vnfSoftwareVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "vnfdVersion": {
              "description": "A version.\n",
              "type": "string"
            },
            "compatibleSpecificationVersions": {
              "description": "Indicates which versions of the ETSI GS NFV-SOL 004 specification the package complies to, as defined in the manifest of the package. Each entry shall be formatted as defined in clause 4.3.2 of ETSI GS NFV-SOL 004.\n",
              "type": "array",
              "items": {
                "description": "A version.\n",
                "type": "string"
              }
            },
            "checksum": {
              "description": "Cheksum description\n",
              "type": "string"
            },
            "packageSecurityOption": {
              "description": "Signals the security option used by the package as defined in clause 5.1 of ETSI GS NFV-SOL 004. Valid values: OPTION_1, OPTION_2\n",
              "type": "string",
              "enum": [
                "OPTION_1",
                "OPTION_2"
              ]
            },
            "signingCertificate": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "softwareImages": {
              "description": "Information about VNF package artifacts that are software images. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present unless it has been requested to be excluded per attribute selector.\n",
              "type": "array",
              "items": {
                "description": "This type represents an artifact contained in or external to a VNF package which represents a software image.\n",
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "provider",
                  "version",
                  "checksum",
                  "isEncrypted",
                  "containerFormat",
                  "diskFormat",
                  "createdAt",
                  "minDisk",
                  "minRam",
                  "size"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier that is unique within a VNF descriptor.\n",
                    "type": "string"
                  },
                  "name": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "provider": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "version": {
                    "description": "A version.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "containerFormat": {
                    "description": "Container format indicates whether the software image is in a file format that also contains metadata about the actual software. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format The list of permitted values was taken from \"Container formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ARI",
                      "BARE",
                      "DOCKER",
                      "OVA",
                      "OVF"
                    ]
                  },
                  "diskFormat": {
                    "description": "Disk format of a software image is the format of the underlying disk image. Permitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - ISO: an archive format for the data contents of an optical disc,\n  such as CD-ROM\n- QCOW2: a common disk image format, which can expand dynamically\n  and supports copy on write\n- RAW: an unstructured disk image format - VDI: a common disk image format - VHD: a common disk image format - VHDX: enhanced version of VHD format - VMDK: a common disk image format The list of permitted values was adapted from \"Disk formats\" in http://docs.openstack.org/image-guide/image-formats.html\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ISO",
                      "QCOW2",
                      "RAW",
                      "VDI",
                      "VHD",
                      "VHDX",
                      "VMDK"
                    ]
                  },
                  "createdAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "minDisk": {
                    "description": "The minimal disk for this software image in bytes.\n",
                    "type": "integer"
                  },
                  "minRam": {
                    "description": "The minimal RAM for this software image in bytes.\n",
                    "type": "integer"
                  },
                  "size": {
                    "description": "Size of this software image in bytes.\n",
                    "type": "integer"
                  },
                  "userMetadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "imagePath": {
                    "description": "Path which identifies the image artifact and also allows to access a copy of the image artifact. For a software image contained as a file in the VNF package, this attribute shall be present, and the value of this attribute shall start with the name of the first segment in the path in the package, i.e., it shall not be prefixed by path separator characters such as \".\" and \"/\". EXAMPLE: foo/bar/m%40ster.vhd For an external software image represented as a URI in the VNF descriptor, this attribute shall be present if the  image artifact has been downloaded by the NFVO and shall be absent otherwise. If present, it shall contain the artifactPath under which the image artifact can be obtained using the \"Individual artifact in a VNF package\" resource defined in clause 9.4.7. It is the responsibility of the NFVO to synthesize this path in a manner that avoids any collision of the synthesized artifact path with the paths and names of image artifacts included in the package.\n",
                    "type": "string"
                  },
                  "imageUri": {
                    "description": "String formatted according to IETF RFC 3986.\n",
                    "type": "string"
                  }
                }
              }
            },
            "additionalArtifacts": {
              "description": "Information about VNF package artifacts contained in the VNF package that are not software images. Every local and external artifact declared in the manifest shall be included, except the software images and the files that make up the parts of the VNFD (see clause 10.4.4.3.2). Signature files and certificate files are not considered as artifacts, however, the content of the \"Licenses\" and \"Testing\" directories in the VNF package is. This attribute shall not be present before the VNF package content is on-boarded. Otherwise, this attribute shall be present if the VNF package contains additional artifacts.\n",
              "type": "array",
              "items": {
                "description": "This type represents an artifact other than a software image which is contained in or external to a VNF package.\n",
                "type": "object",
                "required": [
                  "artifactPath",
                  "checksum",
                  "isEncrypted"
                ],
                "properties": {
                  "artifactPath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "artifactURI": {
                    "description": "URI of the artifact as defined in the VNF package manifest. Shall be present if the artifact is external to the package and shall be absent otherwise.\nEXAMPLE: https://example.com/m%40ster.sh\n",
                    "type": "array",
                    "items": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "nonManoArtifactSetId": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "artifactClassification": {
                    "description": "Marks specific types of artifacts as defined in the VNF package. If none of the specific classes listed below applies, the attribute shall not be present.\nValid values: -\tHISTORY: a history artifact as per clause 4.3.3 in ETSI GS NFV-SOL 004 -\tTESTING: a testing artifact as per clause 4.3.4 in ETSI GS NFV-SOL 004 -\tLICENSE: a license artifact as per clause 4.3.5 in ETSI GS NFV-SOL 004\n",
                    "type": "string",
                    "enum": [
                      "HISTORY",
                      "TESTING",
                      "LICENSE"
                    ]
                  },
                  "metadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "onboardingState": {
              "description": "CREATED: The \"Individual VNF package\" resource has been created. UPLOADING: The associated VNF package content is being uploaded. PROCESSING: The associated VNF package content is being processed, e.g.,\n            validation.\nONBOARDED: The associated VNF package content has been on-boarded successfully. ERROR: There was an error during upload of the VNF package content or external\n        artifacts, or during VNF package processing.\n",
              "type": "string",
              "enum": [
                "CREATED",
                "UPLOADING",
                "PROCESSING",
                "ONBOARDED",
                "ERROR"
              ]
            },
            "operationalState": {
              "description": "- ENABLED: The VNF package is enabled, i.e. it can be used for\n  the creation of new \"Individual VNF instance\" resources.\n- DISABLED: The VNF package is disabled, i.e. it shall not be used for\n  the creation of further \"Individual VNF instance\" resources\n  (unless and until the VNF package is re-enabled).\n",
              "type": "string",
              "enum": [
                "ENABLED",
                "DISABLED"
              ]
            },
            "usageState": {
              "description": "- IN_USE: \"Individual VNF instance\" resources created from this VNF package exist. - NOT_IN_USE: No \"Individual VNF instance\" resource created from this VNF package exists.\n",
              "type": "string",
              "enum": [
                "IN_USE",
                "NOT_IN_USE"
              ]
            },
            "vnfmInfo": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "userDefinedData": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "onboardingFailureDetails": {
              "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
              "type": "object",
              "required": [
                "status",
                "detail"
              ],
              "properties": {
                "type": {
                  "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                  "type": "string"
                },
                "title": {
                  "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                  "type": "string"
                },
                "status": {
                  "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                  "type": "integer"
                },
                "detail": {
                  "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                  "type": "string"
                },
                "instance": {
                  "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                  "type": "string"
                }
              }
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "packageContent"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "vnfd": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "packageContent": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgId"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgIdVnfd",
      "summary": "Query VNF Package Info\n\nThe GET method reads the content of the VNFD within a VNF package.\nThe VNFD",
      "description": "Query VNF Package Info\n\nThe GET method reads the content of the VNFD within a VNF package.\nThe VNFD is implemented as a collection of one or more files.\nA ZIP archive embedding these files shall be returned when reading this resource.\nThe default format of the ZIP archive shall be the one specified in ETSI GS NFV-SOL 004\nwhere only the files representing the VNFD and information needed to navigate the ZIP\narchive and to identify the file that is the entry point for parsing the VNFD, and,\nif requ...(description truncated)",
      "input": [
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgIdVnfd"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgIdManifest",
      "summary": "Query VNF Package Manifest\n\nThe GET method reads the content of the manifest within a VNF package.\n",
      "description": "Query VNF Package Manifest\n\nThe GET method reads the content of the manifest within a VNF package.\nThis method shall follow the provisions specified in the tables 10.4.4a.3.2-1\nand 10.4.4a.3.2-2 for URI query parameters, request and response data structures,\nand response codes.\n",
      "input": [
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgIdManifest"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgIdPackageContent",
      "summary": "Fetch VNF Package.\nThe GET method fetches the content of a VNF package identified by the\nVNF packag",
      "description": "Fetch VNF Package.\nThe GET method fetches the content of a VNF package identified by the\nVNF package identifier allocated by the NFVO.\nThe content of the package is provided as onboarded, i.e. depending on\nthe security option used, the CSAR or the CSAR wrapped in a ZIP archive\ntogether with an external signature is returned, as defined in clause\n5.1 of ETSI GS NFV-SOL 004.\n\nNOTE:\tInformation about the applicable security option can be obtained\nby evaluating the \"packageSecurityOption\" attribute ...(description truncated)",
      "input": [
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgIdPackageContent"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgIdArtifacts",
      "summary": "Fetch VNF Package Artifacts.\n\nThe GET method shall return an archive that contains a set of artifac",
      "description": "Fetch VNF Package Artifacts.\n\nThe GET method shall return an archive that contains a set of artifacts\naccording to the provisions for inclusion/exclusion defined below,\nembedded in a directory structure being the same as in the VNF package.\nThe criteria for exclusion/inclusion of an artifact in the archive are defined as follows:\n-\tArtifacts that are software images shall be excluded from the archive.\n-\tArtifacts that are not software images and that are external to the VNF package shall be \n   ...(description truncated)",
      "input": [
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgIdArtifacts"
      },
      "task": true
    },
    {
      "name": "getVnfPackagesVnfPkgIdArtifactsArtifactPath",
      "summary": "Fetch VNF Package Artifacts.\nThe GET method fetches the content of an artifact within a VNF package",
      "description": "Fetch VNF Package Artifacts.\nThe GET method fetches the content of an artifact within a VNF package.\nThis method shall follow the provisions specified in the tables\n10.4.6.3.2-1 and 10.4.6.3.2-2 for URI query parameters, request\nand response data structures, and response codes.\n",
      "input": [
        {
          "name": "artifactPath",
          "type": "string",
          "info": "SequenceFor an artifact contained as a file in the VNF package,\nthis variable shall contain a sequence of one or more path segments\nrepresenting the path of the artifact ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "artifactPath",
            "type": "string"
          }
        },
        {
          "name": "vnfPkgId",
          "type": "string",
          "info": "Identifier of the VNF package. The identifier is allocated by the\nNFVO.\nThis identifier can be retrieved from the \"vnfPkgId\" attribute in\nthe VnfPackageOnboardingNotifica...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfPkgId",
            "type": "string"
          }
        },
        {
          "name": "includeSignature",
          "type": "string",
          "info": "If this parameter is provided, the NFVO shall include in the ZIP\narchive the security information as specified above.\nThis URI query parameter is a flag, i.e. it shall ha...(description truncated): string",
          "required": false,
          "schema": {
            "title": "includeSignature",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfPackagesVnfPkgIdArtifactsArtifactPath"
      },
      "task": true
    },
    {
      "name": "postPmJobs",
      "summary": "Create PM Job.\nThe POST method creates a PM job.\nThis method shall follow the provisions specified",
      "description": "Create PM Job.\nThe POST method creates a PM job.\nThis method shall follow the provisions specified in the tables 6.4.2.3.1-1 and 6.4.2.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, a new \"Individual PM job\" resource as defined\nin clause 6.4.3 shall have been created.\n",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": "The VNF creation parameters: {\"objectType\": \"string\", \"objectInstanceIds\": \"array\", \"subObjectInstanceIds\": \"array\", \"criteria\": {\"performanceMetric\": \"array\", \"performanceMetricGroup\": \"array\", \"collectionPeriod\": 123, \"reportingPeriod\": 123, \"reportingBoundary\": \"string\"}, \"callbackUri\": \"string\", \"authentication\": {\"authType\": \"array\", \"paramsBasic\": {\"userName\": \"string\", \"password\": \"string\"}, \"paramsOauth2ClientCredentials\": {\"clientId\": \"string\", \"clientPassword\": \"string\", \"tokenEndpoint\": \"string\"}}}",
          "required": true,
          "schema": {
            "description": "This type represents a request to create a PM job.\n",
            "type": "object",
            "required": [
              "objectType",
              "objectInstanceIds",
              "criteria",
              "callbackUri"
            ],
            "properties": {
              "objectType": {
                "description": "Type of the measured object. The applicable measured object type for a measurement\n is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                "type": "string"
              },
              "objectInstanceIds": {
                "description": "Identifiers of the measured object instances for which performance information is requested to be collected.\n",
                "type": "array",
                "items": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                }
              },
              "subObjectInstanceIds": {
                "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
                "type": "array",
                "items": {
                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                  "type": "string"
                }
              },
              "criteria": {
                "description": "Criteria of the collection of performance information.\n",
                "type": "object",
                "required": [
                  "collectionPeriod",
                  "reportingPeriod"
                ],
                "properties": {
                  "performanceMetric": {
                    "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "performanceMetricGroup": {
                    "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "collectionPeriod": {
                    "description": "Specifies the periodicity at which the API producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1024
                  },
                  "reportingPeriod": {
                    "description": "Specifies the periodicity at which the API producer will report to the API consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the API consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1024
                  },
                  "reportingBoundary": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "authentication": {
                "type": "object",
                "required": [
                  "authType"
                ],
                "properties": {
                  "authType": {
                    "description": "Defines the types of Authentication / Authorization which the API consumer is willing to accept when receiving a notification. Permitted values: * BASIC: In every HTTP request to the notification endpoint, use\n  HTTP Basic authentication with the client credentials. \n* OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the\n  notification endpoint, use an OAuth 2.0 Bearer token, obtained\n  using the client credentials grant type.\n* TLS_CERT: Every HTTP request to the notification endpoint is sent\n  over a mutually authenticated TLS session, i.e. not only the\n  server is authenticated, but also the client is authenticated\n  during the TLS tunnel setup.\n",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "BASIC",
                        "OAUTH2_CLIENT_CREDENTIALS",
                        "TLS_CERT"
                      ]
                    }
                  },
                  "paramsBasic": {
                    "description": "Parameters for authentication/authorization using BASIC. Shall be present if authType is \"BASIC\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "userName": {
                        "description": "Username to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      },
                      "password": {
                        "description": "Password to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      }
                    }
                  },
                  "paramsOauth2ClientCredentials": {
                    "description": "Parameters for authentication/authorization using OAUTH2_CLIENT_CREDENTIALS. Shall be present if authType is \"OAUTH2_CLIENT_CREDENTIALS\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "clientId": {
                        "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "clientPassword": {
                        "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "tokenEndpoint": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a PM job.\n",
          "type": "object",
          "required": [
            "id",
            "objectType",
            "objectInstanceIds",
            "criteria",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "objectType": {
              "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
              "type": "string"
            },
            "objectInstanceIds": {
              "description": "Identifiers of the VNF instances for which performance information is collected.\n",
              "type": "array",
              "items": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              }
            },
            "subObjectInstanceIds": {
              "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
              "type": "array",
              "items": {
                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                "type": "string"
              }
            },
            "criteria": {
              "description": "Criteria of the collection of performance information.\n",
              "type": "object",
              "required": [
                "collectionPeriod",
                "reportingPeriod"
              ],
              "properties": {
                "performanceMetric": {
                  "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "performanceMetricGroup": {
                  "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "collectionPeriod": {
                  "description": "Specifies the periodicity at which the API producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                },
                "reportingPeriod": {
                  "description": "Specifies the periodicity at which the API producer will report to the API consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the API consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                },
                "reportingBoundary": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "reports": {
              "description": "Information about available reports collected by this PM job.\n",
              "type": "object",
              "required": [
                "href",
                "readyTime"
              ],
              "properties": {
                "href": {
                  "description": "The URI where the report can be obtained.\n",
                  "type": "string"
                },
                "readyTime": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "expiryTime": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "fileSize": {
                  "description": "The size of the report file in bytes, if known.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                }
              }
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "objects": {
                  "description": "Links to resources representing the measure object instances for which performance information is collected. Shall be present if the measured object instance information is accessible as a resource.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postPmJobs"
      },
      "task": true
    },
    {
      "name": "getPmJobs",
      "summary": "Query PM Job.\nThe API consumer can use this method to retrieve information about PM jobs.\nThis meth",
      "description": "Query PM Job.\nThe API consumer can use this method to retrieve information about PM jobs.\nThis method shall follow the provisions specified in the tables 6.4.2.3.2-1 and 6.4.2.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\nThe API consumer can use this method to retrieve information about PM jobs.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "allFields",
          "type": "string",
          "info": "Include all complex attributes in the response. See clause 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "allFields",
            "type": "string"
          }
        },
        {
          "name": "fields",
          "type": "string",
          "info": "Complex attributes to be included into the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "fields",
            "type": "string"
          }
        },
        {
          "name": "excludeFields",
          "type": "string",
          "info": "Complex attributes to be excluded from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity should support this parameter.\n: string",
          "required": false,
          "schema": {
            "title": "excludeFields",
            "type": "string"
          }
        },
        {
          "name": "excludeDefault",
          "type": "string",
          "info": "Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional entity shall support t...(description truncated): string",
          "required": false,
          "schema": {
            "title": "excludeDefault",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a PM job.\n",
            "type": "object",
            "required": [
              "id",
              "objectType",
              "objectInstanceIds",
              "criteria",
              "callbackUri",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "objectType": {
                "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                "type": "string"
              },
              "objectInstanceIds": {
                "description": "Identifiers of the VNF instances for which performance information is collected.\n",
                "type": "array",
                "items": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                }
              },
              "subObjectInstanceIds": {
                "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
                "type": "array",
                "items": {
                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                  "type": "string"
                }
              },
              "criteria": {
                "description": "Criteria of the collection of performance information.\n",
                "type": "object",
                "required": [
                  "collectionPeriod",
                  "reportingPeriod"
                ],
                "properties": {
                  "performanceMetric": {
                    "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "performanceMetricGroup": {
                    "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "collectionPeriod": {
                    "description": "Specifies the periodicity at which the API producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1024
                  },
                  "reportingPeriod": {
                    "description": "Specifies the periodicity at which the API producer will report to the API consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the API consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1024
                  },
                  "reportingBoundary": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "reports": {
                "description": "Information about available reports collected by this PM job.\n",
                "type": "object",
                "required": [
                  "href",
                  "readyTime"
                ],
                "properties": {
                  "href": {
                    "description": "The URI where the report can be obtained.\n",
                    "type": "string"
                  },
                  "readyTime": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "expiryTime": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "fileSize": {
                    "description": "The size of the report file in bytes, if known.\n",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1024
                  }
                }
              },
              "_links": {
                "description": "Links for this resource.\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "objects": {
                    "description": "Links to resources representing the measure object instances for which performance information is collected. Shall be present if the measured object instance information is accessible as a resource.\n",
                    "type": "array",
                    "items": {
                      "description": "This type represents a link to a resource using an absolute URI.\n",
                      "type": "object",
                      "required": [
                        "href"
                      ],
                      "properties": {
                        "href": {
                          "description": "String formatted according to IETF RFC 3986.\n",
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getPmJobs"
      },
      "task": true
    },
    {
      "name": "getPmJobsPmJobId",
      "summary": "Query PM Job.\nThe API consumer can use this method for reading an individual PM job.\nThis method sh",
      "description": "Query PM Job.\nThe API consumer can use this method for reading an individual PM job.\nThis method shall follow the provisions specified in the tables 6.4.3.3.2-1 and 6.4.3.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "pmJobId",
          "type": "string",
          "info": "Identifier of the PM job.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew \"In...(description truncated): string",
          "required": true,
          "schema": {
            "title": "pmJobId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a PM job.\n",
          "type": "object",
          "required": [
            "id",
            "objectType",
            "objectInstanceIds",
            "criteria",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "objectType": {
              "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
              "type": "string"
            },
            "objectInstanceIds": {
              "description": "Identifiers of the VNF instances for which performance information is collected.\n",
              "type": "array",
              "items": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              }
            },
            "subObjectInstanceIds": {
              "description": "Identifiers of the sub-object instances of the measured object instance for which performance information is requested to be collected. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is present, the cardinality of the \"objectInstanceIds\" attribute shall be 1. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
              "type": "array",
              "items": {
                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                "type": "string"
              }
            },
            "criteria": {
              "description": "Criteria of the collection of performance information.\n",
              "type": "object",
              "required": [
                "collectionPeriod",
                "reportingPeriod"
              ],
              "properties": {
                "performanceMetric": {
                  "description": "This defines the types of performance metrics for the specified object instances. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "performanceMetricGroup": {
                  "description": "Group of performance metrics. A metric group is a pre-defined list of metrics, known to the API producer that it can decompose to individual metrics. Valid values are specified as \"Measurement Group\" values in clause 7.2 of ETSI GS NFV-IFA 027. At least one of the two attributes (performance metric or group) shall be present.\n",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "collectionPeriod": {
                  "description": "Specifies the periodicity at which the API producer will collect performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                },
                "reportingPeriod": {
                  "description": "Specifies the periodicity at which the API producer will report to the API consumer. about performance information. The unit shall be seconds. At the end of each reportingPeriod, the API producer will inform the API consumer about availability of the performance data collected for each completed collection period during this reportingPeriod. The reportingPeriod should be equal to or a multiple of the collectionPeriod. In the latter case, the performance data for the collection periods within one reporting period are reported together.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                },
                "reportingBoundary": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "reports": {
              "description": "Information about available reports collected by this PM job.\n",
              "type": "object",
              "required": [
                "href",
                "readyTime"
              ],
              "properties": {
                "href": {
                  "description": "The URI where the report can be obtained.\n",
                  "type": "string"
                },
                "readyTime": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "expiryTime": {
                  "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                  "type": "string"
                },
                "fileSize": {
                  "description": "The size of the report file in bytes, if known.\n",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1024
                }
              }
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "objects": {
                  "description": "Links to resources representing the measure object instances for which performance information is collected. Shall be present if the measured object instance information is accessible as a resource.\n",
                  "type": "array",
                  "items": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getPmJobsPmJobId"
      },
      "task": true
    },
    {
      "name": "patchPmJobsPmJobId",
      "summary": "This method allows to modify an \"Individual PM job\" resource.\nThis method shall follow the provisio",
      "description": "This method allows to modify an \"Individual PM job\" resource.\nThis method shall follow the provisions specified in the tables\n6.4.3.3.4-1 and 6.4.3.3.4-2 for URI query parameters, request\nand response data structures, and response codes.\n",
      "input": [
        {
          "name": "pmJobId",
          "type": "string",
          "info": "Identifier of the PM job.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew \"In...(description truncated): string",
          "required": true,
          "schema": {
            "title": "pmJobId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents modifications to a PM job. It shall comply with the provisions defined in table 6.5.2.12-1.\n",
          "type": "object",
          "properties": {
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "authentication": {
              "type": "object",
              "required": [
                "authType"
              ],
              "properties": {
                "authType": {
                  "description": "Defines the types of Authentication / Authorization which the API consumer is willing to accept when receiving a notification. Permitted values: * BASIC: In every HTTP request to the notification endpoint, use\n  HTTP Basic authentication with the client credentials. \n* OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the\n  notification endpoint, use an OAuth 2.0 Bearer token, obtained\n  using the client credentials grant type.\n* TLS_CERT: Every HTTP request to the notification endpoint is sent\n  over a mutually authenticated TLS session, i.e. not only the\n  server is authenticated, but also the client is authenticated\n  during the TLS tunnel setup.\n",
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "BASIC",
                      "OAUTH2_CLIENT_CREDENTIALS",
                      "TLS_CERT"
                    ]
                  }
                },
                "paramsBasic": {
                  "description": "Parameters for authentication/authorization using BASIC. Shall be present if authType is \"BASIC\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                  "type": "object",
                  "properties": {
                    "userName": {
                      "description": "Username to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                      "type": "string"
                    },
                    "password": {
                      "description": "Password to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                      "type": "string"
                    }
                  }
                },
                "paramsOauth2ClientCredentials": {
                  "description": "Parameters for authentication/authorization using OAUTH2_CLIENT_CREDENTIALS. Shall be present if authType is \"OAUTH2_CLIENT_CREDENTIALS\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                  "type": "object",
                  "properties": {
                    "clientId": {
                      "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                      "type": "string"
                    },
                    "clientPassword": {
                      "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                      "type": "string"
                    },
                    "tokenEndpoint": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/patchPmJobsPmJobId"
      },
      "task": true
    },
    {
      "name": "deletePmJobsPmJobId",
      "summary": "Delete PM Job.\nThis method terminates an individual PM job.\nThis method shall follow the provisions",
      "description": "Delete PM Job.\nThis method terminates an individual PM job.\nThis method shall follow the provisions specified in the tables 6.4.3.3.5-1 and 6.4.3.3.5-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, the \"Individual PM job\" resource shall not exist any longer.\n",
      "input": [
        {
          "name": "pmJobId",
          "type": "string",
          "info": "Identifier of the PM job.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew \"In...(description truncated): string",
          "required": true,
          "schema": {
            "title": "pmJobId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deletePmJobsPmJobId"
      },
      "task": true
    },
    {
      "name": "getPmJobsPmJobIdReportsReportId",
      "summary": "The API consumer can use this method for reading an individual performance report.\nThis method shal",
      "description": "The API consumer can use this method for reading an individual performance report.\nThis method shall follow the provisions specified in the tables 6.4.4.3.2-1 and 6.4.4.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "pmJobId",
          "type": "string",
          "info": "Identifier of the PM job.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew \"In...(description truncated): string",
          "required": true,
          "schema": {
            "title": "pmJobId",
            "type": "string"
          }
        },
        {
          "name": "reportId",
          "type": "string",
          "info": "Identifier of the performance report.\n: string",
          "required": true,
          "schema": {
            "title": "reportId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type defines the format of a performance report provided by the VNFM to the EM as a result of collecting performance information as part of a PM job. The type shall comply with the provisions defined in table 6.5.2.10-1.\n",
          "type": "object",
          "required": [
            "entries"
          ],
          "properties": {
            "entries": {
              "description": "List of performance information entries. Each performance report entry is for a given metric of a given object (i.e. VNF instance), but can include multiple collected values.\n",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "objectType",
                  "objectInstanceId",
                  "performanceMetric",
                  "performanceValue"
                ],
                "properties": {
                  "objectType": {
                    "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                    "type": "string"
                  },
                  "objectInstanceId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "subObjectInstanceId": {
                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                    "type": "string"
                  },
                  "performanceMetric": {
                    "description": "Name of the metric collected. This attribute shall contain the related \"Measurement Name\" value as defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                    "type": "string"
                  },
                  "performanceValues": {
                    "description": "List of performance values with associated timestamp.\n",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "timeStamp",
                        "value"
                      ],
                      "properties": {
                        "timeStamp": {
                          "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                          "type": "string"
                        },
                        "value": {
                          "description": "Value of the metric collected. The type of this attribute shall correspond to the related \"Measurement Unit\" as defined in clause 7.2. of ETSI GS NFV-IFA 027.\n",
                          "type": "object"
                        },
                        "context": {
                          "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                          "type": "object"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getPmJobsPmJobIdReportsReportId"
      },
      "task": true
    },
    {
      "name": "postThresholds",
      "summary": "Create Threshold.\nThe POST method can be used by the API consumer to create a threshold.\nThis metho",
      "description": "Create Threshold.\nThe POST method can be used by the API consumer to create a threshold.\nThis method shall follow the provisions specified in the tables 6.4.5.3.1-1 and 6.4.5.3.1-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, a new \"Individual threshold\" resource\nas defined in clause 6.4.6 shall have been created.\n",
      "input": [
        {
          "name": "body",
          "type": "object",
          "info": "Request parameters to create a threshold resource.: {\"objectType\": \"string\", \"objectInstanceId\": \"string\", \"subObjectInstanceIds\": \"array\", \"criteria\": {\"performanceMetric\": \"string\", \"thresholdType\": \"Must be one of [SIMPLE]\", \"simpleThresholdDetails\": {\"thresholdValue\": 123, \"hysteresis\": 123}}, \"callbackUri\": \"string\", \"authentication\": {\"authType\": \"array\", \"paramsBasic\": {\"userName\": \"string\", \"password\": \"string\"}, \"paramsOauth2ClientCredentials\": {\"clientId\": \"string\", \"clientPassword\": \"string\", \"tokenEndpoint\": \"string\"}}}",
          "required": true,
          "schema": {
            "description": "This type represents a request to create a threshold.\n",
            "type": "object",
            "required": [
              "objectType",
              "objectInstanceId",
              "criteria",
              "callbackUri"
            ],
            "properties": {
              "objectType": {
                "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                "type": "string"
              },
              "objectInstanceId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "subObjectInstanceIds": {
                "description": "Identifiers of the sub-object instances of the measured object instance associated with this threshold. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
                "type": "array",
                "items": {
                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                  "type": "string"
                }
              },
              "criteria": {
                "description": "This type represents criteria that define a threshold.\n",
                "type": "object",
                "required": [
                  "performanceMetric",
                  "thresholdType"
                ],
                "properties": {
                  "performanceMetric": {
                    "description": "Defines the performance metric associated with the threshold. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                    "type": "string"
                  },
                  "thresholdType": {
                    "description": "Type of threshold. This attribute determines which other attributes are present in the data structure. Permitted values: * SIMPLE: Single-valued static threshold In the present document, simple thresholds are defined. The definition of additional threshold types is left for future specification.\n",
                    "type": "string",
                    "enum": [
                      "SIMPLE"
                    ]
                  },
                  "simpleThresholdDetails": {
                    "description": "Details of a simple threshold. Shall be present if thresholdType=\"SIMPLE\".\n",
                    "type": "object",
                    "required": [
                      "thresholdValue",
                      "hysteresis"
                    ],
                    "properties": {
                      "thresholdValue": {
                        "description": "The threshold value. Shall be represented as a floating point number.\n",
                        "type": "number"
                      },
                      "hysteresis": {
                        "description": "The hysteresis of the threshold. Shall be represented as a non-negative floating point number. A notification with crossing direction \"UP\" will be generated if the measured value reaches or exceeds \"thresholdValue\" + \"hysteresis\". A notification with crossing direction \"DOWN\" will be generated if the measured value reaches or undercuts \"thresholdValue\" - \"hysteresis\". The hysteresis is defined to prevent storms of threshold crossing notifications. When processing a request to create a threshold, implementations should enforce a suitable minimum value for this attribute (e.g. override the value or reject the request).\n",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1024
                      }
                    }
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "authentication": {
                "type": "object",
                "required": [
                  "authType"
                ],
                "properties": {
                  "authType": {
                    "description": "Defines the types of Authentication / Authorization which the API consumer is willing to accept when receiving a notification. Permitted values: * BASIC: In every HTTP request to the notification endpoint, use\n  HTTP Basic authentication with the client credentials. \n* OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the\n  notification endpoint, use an OAuth 2.0 Bearer token, obtained\n  using the client credentials grant type.\n* TLS_CERT: Every HTTP request to the notification endpoint is sent\n  over a mutually authenticated TLS session, i.e. not only the\n  server is authenticated, but also the client is authenticated\n  during the TLS tunnel setup.\n",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "BASIC",
                        "OAUTH2_CLIENT_CREDENTIALS",
                        "TLS_CERT"
                      ]
                    }
                  },
                  "paramsBasic": {
                    "description": "Parameters for authentication/authorization using BASIC. Shall be present if authType is \"BASIC\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "userName": {
                        "description": "Username to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      },
                      "password": {
                        "description": "Password to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                        "type": "string"
                      }
                    }
                  },
                  "paramsOauth2ClientCredentials": {
                    "description": "Parameters for authentication/authorization using OAUTH2_CLIENT_CREDENTIALS. Shall be present if authType is \"OAUTH2_CLIENT_CREDENTIALS\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                    "type": "object",
                    "properties": {
                      "clientId": {
                        "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "clientPassword": {
                        "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                        "type": "string"
                      },
                      "tokenEndpoint": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a threshold.\n",
          "type": "object",
          "required": [
            "id",
            "objectType",
            "objectInstanceId",
            "criteria",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "objectType": {
              "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
              "type": "string"
            },
            "objectInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "subObjectInstanceIds": {
              "description": "Identifiers of the sub-object instances of the measured object instance associated with the threshold. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measurement type. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
              "type": "array",
              "items": {
                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                "type": "string"
              }
            },
            "criteria": {
              "description": "This type represents criteria that define a threshold.\n",
              "type": "object",
              "required": [
                "performanceMetric",
                "thresholdType"
              ],
              "properties": {
                "performanceMetric": {
                  "description": "Defines the performance metric associated with the threshold. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                  "type": "string"
                },
                "thresholdType": {
                  "description": "Type of threshold. This attribute determines which other attributes are present in the data structure. Permitted values: * SIMPLE: Single-valued static threshold In the present document, simple thresholds are defined. The definition of additional threshold types is left for future specification.\n",
                  "type": "string",
                  "enum": [
                    "SIMPLE"
                  ]
                },
                "simpleThresholdDetails": {
                  "description": "Details of a simple threshold. Shall be present if thresholdType=\"SIMPLE\".\n",
                  "type": "object",
                  "required": [
                    "thresholdValue",
                    "hysteresis"
                  ],
                  "properties": {
                    "thresholdValue": {
                      "description": "The threshold value. Shall be represented as a floating point number.\n",
                      "type": "number"
                    },
                    "hysteresis": {
                      "description": "The hysteresis of the threshold. Shall be represented as a non-negative floating point number. A notification with crossing direction \"UP\" will be generated if the measured value reaches or exceeds \"thresholdValue\" + \"hysteresis\". A notification with crossing direction \"DOWN\" will be generated if the measured value reaches or undercuts \"thresholdValue\" - \"hysteresis\". The hysteresis is defined to prevent storms of threshold crossing notifications. When processing a request to create a threshold, implementations should enforce a suitable minimum value for this attribute (e.g. override the value or reject the request).\n",
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1024
                    }
                  }
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "object": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/postThresholds"
      },
      "task": true
    },
    {
      "name": "getThresholds",
      "summary": "Query Threshold.\nThe API consumer can use this method to query information about thresholds.\nThis m",
      "description": "Query Threshold.\nThe API consumer can use this method to query information about thresholds.\nThis method shall follow the provisions specified in the tables 6.4.5.3.2-1 and 6.4.5.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents a threshold.\n",
            "type": "object",
            "required": [
              "id",
              "objectType",
              "objectInstanceId",
              "criteria",
              "callbackUri",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "objectType": {
                "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                "type": "string"
              },
              "objectInstanceId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "subObjectInstanceIds": {
                "description": "Identifiers of the sub-object instances of the measured object instance associated with the threshold. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measurement type. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
                "type": "array",
                "items": {
                  "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                  "type": "string"
                }
              },
              "criteria": {
                "description": "This type represents criteria that define a threshold.\n",
                "type": "object",
                "required": [
                  "performanceMetric",
                  "thresholdType"
                ],
                "properties": {
                  "performanceMetric": {
                    "description": "Defines the performance metric associated with the threshold. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                    "type": "string"
                  },
                  "thresholdType": {
                    "description": "Type of threshold. This attribute determines which other attributes are present in the data structure. Permitted values: * SIMPLE: Single-valued static threshold In the present document, simple thresholds are defined. The definition of additional threshold types is left for future specification.\n",
                    "type": "string",
                    "enum": [
                      "SIMPLE"
                    ]
                  },
                  "simpleThresholdDetails": {
                    "description": "Details of a simple threshold. Shall be present if thresholdType=\"SIMPLE\".\n",
                    "type": "object",
                    "required": [
                      "thresholdValue",
                      "hysteresis"
                    ],
                    "properties": {
                      "thresholdValue": {
                        "description": "The threshold value. Shall be represented as a floating point number.\n",
                        "type": "number"
                      },
                      "hysteresis": {
                        "description": "The hysteresis of the threshold. Shall be represented as a non-negative floating point number. A notification with crossing direction \"UP\" will be generated if the measured value reaches or exceeds \"thresholdValue\" + \"hysteresis\". A notification with crossing direction \"DOWN\" will be generated if the measured value reaches or undercuts \"thresholdValue\" - \"hysteresis\". The hysteresis is defined to prevent storms of threshold crossing notifications. When processing a request to create a threshold, implementations should enforce a suitable minimum value for this attribute (e.g. override the value or reject the request).\n",
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1024
                      }
                    }
                  }
                }
              },
              "callbackUri": {
                "description": "String formatted according to IETF RFC 3986.\n",
                "type": "string"
              },
              "_links": {
                "description": "Links for this resource.\n",
                "type": "object",
                "required": [
                  "self"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "object": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getThresholds"
      },
      "task": true
    },
    {
      "name": "getThresholdsThresholdId",
      "summary": "Query Threshold.\nThe API consumer can use this method for reading an individual threshold\nThis meth",
      "description": "Query Threshold.\nThe API consumer can use this method for reading an individual threshold\nThis method shall follow the provisions specified in the tables 6.4.6.3.2-1 and 6.4.6.3.2-2\nfor URI query parameters, request and response data structures, and response codes.\n",
      "input": [
        {
          "name": "thresholdId",
          "type": "string",
          "info": "Identifier of the threshold.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "thresholdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents a threshold.\n",
          "type": "object",
          "required": [
            "id",
            "objectType",
            "objectInstanceId",
            "criteria",
            "callbackUri",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "objectType": {
              "description": "Type of the measured object. The applicable measured object type for a measurement is defined in clause 7.2 of ETSI GS NFV-IFA 027.\n",
              "type": "string"
            },
            "objectInstanceId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "subObjectInstanceIds": {
              "description": "Identifiers of the sub-object instances of the measured object instance associated with the threshold. May be present if a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measurement type. If this attribute is absent and a sub-object is defined in clause 6.2 of ETSI GS NFV-IFA 027 for the related measured object type, measurements will be taken for all sub-object instances of the measured object instance.\n",
              "type": "array",
              "items": {
                "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                "type": "string"
              }
            },
            "criteria": {
              "description": "This type represents criteria that define a threshold.\n",
              "type": "object",
              "required": [
                "performanceMetric",
                "thresholdType"
              ],
              "properties": {
                "performanceMetric": {
                  "description": "Defines the performance metric associated with the threshold. Valid values are specified as \"Measurement Name\" values in clause 7.2 of ETSI GS NFV-IFA 027.\n",
                  "type": "string"
                },
                "thresholdType": {
                  "description": "Type of threshold. This attribute determines which other attributes are present in the data structure. Permitted values: * SIMPLE: Single-valued static threshold In the present document, simple thresholds are defined. The definition of additional threshold types is left for future specification.\n",
                  "type": "string",
                  "enum": [
                    "SIMPLE"
                  ]
                },
                "simpleThresholdDetails": {
                  "description": "Details of a simple threshold. Shall be present if thresholdType=\"SIMPLE\".\n",
                  "type": "object",
                  "required": [
                    "thresholdValue",
                    "hysteresis"
                  ],
                  "properties": {
                    "thresholdValue": {
                      "description": "The threshold value. Shall be represented as a floating point number.\n",
                      "type": "number"
                    },
                    "hysteresis": {
                      "description": "The hysteresis of the threshold. Shall be represented as a non-negative floating point number. A notification with crossing direction \"UP\" will be generated if the measured value reaches or exceeds \"thresholdValue\" + \"hysteresis\". A notification with crossing direction \"DOWN\" will be generated if the measured value reaches or undercuts \"thresholdValue\" - \"hysteresis\". The hysteresis is defined to prevent storms of threshold crossing notifications. When processing a request to create a threshold, implementations should enforce a suitable minimum value for this attribute (e.g. override the value or reject the request).\n",
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1024
                    }
                  }
                }
              }
            },
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "_links": {
              "description": "Links for this resource.\n",
              "type": "object",
              "required": [
                "self"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "object": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getThresholdsThresholdId"
      },
      "task": true
    },
    {
      "name": "patchThresholdsThresholdId",
      "summary": "This method allows to modify an \"Individual threshold\" resource.\nThis method shall follow the provi",
      "description": "This method allows to modify an \"Individual threshold\" resource.\nThis method shall follow the provisions specified in the tables\n6.4.6.3.4-1 and 6.4.6.3.4-2 for URI query parameters, request\nand response data structures, and response codes.\n",
      "input": [
        {
          "name": "thresholdId",
          "type": "string",
          "info": "Identifier of the threshold.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "thresholdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents modifications to a threshold. It shall comply with the provisions defined in table 6.5.2.11-1.\n",
          "type": "object",
          "properties": {
            "callbackUri": {
              "description": "String formatted according to IETF RFC 3986.\n",
              "type": "string"
            },
            "authentication": {
              "type": "object",
              "required": [
                "authType"
              ],
              "properties": {
                "authType": {
                  "description": "Defines the types of Authentication / Authorization which the API consumer is willing to accept when receiving a notification. Permitted values: * BASIC: In every HTTP request to the notification endpoint, use\n  HTTP Basic authentication with the client credentials. \n* OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the\n  notification endpoint, use an OAuth 2.0 Bearer token, obtained\n  using the client credentials grant type.\n* TLS_CERT: Every HTTP request to the notification endpoint is sent\n  over a mutually authenticated TLS session, i.e. not only the\n  server is authenticated, but also the client is authenticated\n  during the TLS tunnel setup.\n",
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "BASIC",
                      "OAUTH2_CLIENT_CREDENTIALS",
                      "TLS_CERT"
                    ]
                  }
                },
                "paramsBasic": {
                  "description": "Parameters for authentication/authorization using BASIC. Shall be present if authType is \"BASIC\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                  "type": "object",
                  "properties": {
                    "userName": {
                      "description": "Username to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                      "type": "string"
                    },
                    "password": {
                      "description": "Password to be used in HTTP Basic authentication. Shall be present if it has not been provisioned out of band.\n",
                      "type": "string"
                    }
                  }
                },
                "paramsOauth2ClientCredentials": {
                  "description": "Parameters for authentication/authorization using OAUTH2_CLIENT_CREDENTIALS. Shall be present if authType is \"OAUTH2_CLIENT_CREDENTIALS\" and the contained information has not been provisioned out of band. Shall be absent otherwise.\n",
                  "type": "object",
                  "properties": {
                    "clientId": {
                      "description": "Client identifier to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                      "type": "string"
                    },
                    "clientPassword": {
                      "description": "Client password to be used in the access token request of the OAuth 2.0 client credentials grant type.  Shall be present if it has not been provisioned out of band. The clientId and clientPassword passed in a subscription shall not be the same as the clientId and clientPassword that are used to obtain authorization for API requests. Client credentials may differ between subscriptions. The value of clientPassword should be generated by a random process.\n",
                      "type": "string"
                    },
                    "tokenEndpoint": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/patchThresholdsThresholdId"
      },
      "task": true
    },
    {
      "name": "deleteThresholdsThresholdId",
      "summary": "Delete Threshold.\nThis method allows to delete a threshold.\nThis method shall follow the provisions",
      "description": "Delete Threshold.\nThis method allows to delete a threshold.\nThis method shall follow the provisions specified in the tables 6.4.6.3.5-1 and 6.4.6.3.5-2\nfor URI query parameters, request and response data structures, and response codes.\nAs the result of successfully executing this method, the \"Individual threshold\" resource\nshall not exist any longer.\n",
      "input": [
        {
          "name": "thresholdId",
          "type": "string",
          "info": "Identifier of the threshold.\nThis identifier can be retrieved from the resource referenced by the\n\"Location\" HTTP header in the response to a POST request creating a\nnew ...(description truncated): string",
          "required": true,
          "schema": {
            "title": "thresholdId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/deleteThresholdsThresholdId"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotPackages",
      "summary": "The GET method queries the information of the VNF packages matching the filter.\n",
      "description": "The GET method queries the information of the VNF packages matching the filter.\n",
      "input": [
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "type": "array",
          "items": {
            "description": "This type represents the information of a VNF snapshot package.\n",
            "type": "object",
            "required": [
              "id",
              "name",
              "isFullSnapshot",
              "state",
              "isCancelPending",
              "_links"
            ],
            "properties": {
              "id": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfSnapshotPkgUniqueId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "name": {
                "description": "A string defined in IETF RFC 8259.\n",
                "type": "string"
              },
              "checksum": {
                "description": "Cheksum description\n",
                "type": "string"
              },
              "createdAt": {
                "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                "type": "string"
              },
              "vnfSnapshotId": {
                "description": "An identifier with the intention of being globally unique.\n",
                "type": "string"
              },
              "vnfcSnapshotInfoIds": {
                "description": "Identifiers of information held by the VNFM about specific VNFC snapshots part  of the VNF snapshot and contained in the VNF snapshot package. This identifier  is allocated by the VNFM during the VNF snapshot creation.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
                "type": "object",
                "items": {
                  "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                  "type": "string"
                }
              },
              "isFullSnapshot": {
                "description": "The Boolean is a data type having two values (true and false).\n",
                "type": "boolean"
              },
              "vnfdInfo": {
                "description": "This type represents the VNFD which is contained in a VNF snapshot package.\n",
                "type": "object",
                "required": [
                  "avnfdId",
                  "vnfdPath",
                  "checksum",
                  "isEncrypted"
                ],
                "properties": {
                  "avnfdId": {
                    "description": "An identifier with the intention of being globally unique.\n",
                    "type": "string"
                  },
                  "vnfdPath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  }
                }
              },
              "vnfsr": {
                "description": "This type represents the VNF snapshot record which is contained in a VNF snapshot package.\n",
                "type": "object",
                "required": [
                  "recordPath",
                  "checksum",
                  "isEncrypted"
                ],
                "properties": {
                  "recordPath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  }
                }
              },
              "vnfcSnapshotImages": {
                "description": "Information about VNF snapshot artifacts that are VNFC snapshot images. Every local and  external snapshot image shall be included. No other artifacts shall be included.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
                "type": "object",
                "items": {
                  "description": "This type represents an artifact contained in a VNF snapshot package which  represents a snapshot image.\n",
                  "type": "object",
                  "required": [
                    "id",
                    "name",
                    "checksum",
                    "isEncrypted",
                    "vnfcInstanceId",
                    "containerFormat",
                    "diskFormat",
                    "createdAt",
                    "minDisk",
                    "minRam",
                    "size"
                  ],
                  "properties": {
                    "id": {
                      "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                      "type": "string"
                    },
                    "name": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "checksum": {
                      "description": "Cheksum description\n",
                      "type": "string"
                    },
                    "isEncrypted": {
                      "description": "The Boolean is a data type having two values (true and false).\n",
                      "type": "boolean"
                    },
                    "vnfcInstanceId": {
                      "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                      "type": "string"
                    },
                    "containerFormat": {
                      "description": "Container format indicates whether the snapshot image is in a file format that  also contains metadata about the actual snapshot.\nPermitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format\nNOTE: The list of permitted values was taken from \"Container formats\" in [i.5] (OpenStack® documentation: \"Disk and container formats for images\").\n",
                      "type": "string",
                      "enum": [
                        "AKI",
                        "AMI",
                        "ARI",
                        "BARE",
                        "DOCKER",
                        "OVA",
                        "OVF"
                      ]
                    },
                    "diskFormat": {
                      "description": "Disk format of a snapshot image is the format of the underlying disk image.\nPermitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - ISO: an archive format for the data contents of an optical disc, such as CD-ROM - QCOW2: a common disk image format, which can expand dynamically and supports copy on write - RAW: an unstructured disk image format - VDI: a common disk image format - VHD: a common disk image format - VHDX: enhanced version of VHD format - VMDK: a common disk image format\nNOTE: The list of permitted values was adapted from \"Disk formats\" in [i.5] (OpenStack® documentation: \"Disk and container formats for images\").\n",
                      "type": "string",
                      "enum": [
                        "AKI",
                        "AMI",
                        "ARI",
                        "ISO",
                        "QCOW2",
                        "RAW",
                        "VDI",
                        "VHD",
                        "VHDX",
                        "VMDK"
                      ]
                    },
                    "createdAt": {
                      "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                      "type": "string"
                    },
                    "minDisk": {
                      "description": "Unsigned integer number\n",
                      "type": "integer",
                      "minimum": 0
                    },
                    "minRam": {
                      "description": "Unsigned integer number\n",
                      "type": "integer",
                      "minimum": 0
                    },
                    "size": {
                      "description": "Unsigned integer number\n",
                      "type": "integer",
                      "minimum": 0
                    },
                    "userMetadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    },
                    "imagePath": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "imageUri": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              },
              "additionalArtifacts": {
                "description": "Information about VNF snapshot artifacts that are not VNFC snapshot images.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
                "type": "object",
                "items": {
                  "description": "This type represents an artifact other than a software image which is contained in  a VNF snapshot package.\n",
                  "type": "object",
                  "required": [
                    "checksum",
                    "isEncrypted"
                  ],
                  "properties": {
                    "artifactPath": {
                      "description": "A string defined in IETF RFC 8259.\n",
                      "type": "string"
                    },
                    "artifactUri": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    },
                    "checksum": {
                      "description": "Cheksum description\n",
                      "type": "string"
                    },
                    "isEncrypted": {
                      "description": "The Boolean is a data type having two values (true and false).\n",
                      "type": "boolean"
                    },
                    "metadata": {
                      "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                      "type": "object"
                    }
                  }
                }
              },
              "state": {
                "description": "State of the VNF snapshot package.  Permitted values: - CREATED: the VNF snapshot package information has been created. - BUILDING: the VNF snapshot package is being built. - UPLOADING: the VNF snapshot package is being uploaded. - EXTRACTING: the VNF snapshot package’s content is being extracted. - AVAILABLE: the VNF snapshot package is available (i.e., build or upload is completed). - ERROR: failure during the VNF snapshot package building, uploading or processing. - ERROR_EXTRACTING: failure during the VNF snapshot package extraction task.\n",
                "type": "string",
                "enum": [
                  "CREATED",
                  "BUILDING",
                  "UPLOADING",
                  "EXTRACTING",
                  "AVAILABLE",
                  "ERROR",
                  "ERROR_EXTRACTING"
                ]
              },
              "isCancelPending": {
                "description": "The Boolean is a data type having two values (true and false).\n",
                "type": "boolean"
              },
              "failureDetails": {
                "description": "Failure details associated to current error state of the VNF snapshot package state. If \"state\" is \"ERROR\" or \"ERROR_EXTRACTING\", this attribute shall be present unless  it has been requested to be excluded via an attribute selector.\n",
                "type": "object",
                "required": [
                  "errorType",
                  "details"
                ],
                "properties": {
                  "errorType": {
                    "description": "Type of error, when the failure happened (building, upload, processing, extracting).\nPermitted values: - BUILD_ERROR - UPLOAD_ERROR - PROCESS_ERROR - CANCELLED - EXTRACTION_ERROR\n",
                    "type": "string",
                    "enum": [
                      "BUILD_ERROR",
                      "UPLOAD_ERROR",
                      "PROCESS_ERROR",
                      "CANCELLED",
                      "EXTRACTION_ERROR"
                    ]
                  },
                  "details": {
                    "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
                    "type": "object",
                    "required": [
                      "status",
                      "detail"
                    ],
                    "properties": {
                      "type": {
                        "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                        "type": "string"
                      },
                      "title": {
                        "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                        "type": "string"
                      },
                      "status": {
                        "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                        "type": "integer"
                      },
                      "detail": {
                        "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                        "type": "string"
                      },
                      "instance": {
                        "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "userDefinedData": {
                "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                "type": "object"
              },
              "_links": {
                "description": "Links to resources related to this resource.\n",
                "type": "object",
                "required": [
                  "self",
                  "packageContent"
                ],
                "properties": {
                  "self": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  },
                  "packageContent": {
                    "description": "This type represents a link to a resource using an absolute URI.\n",
                    "type": "object",
                    "required": [
                      "href"
                    ],
                    "properties": {
                      "href": {
                        "description": "String formatted according to IETF RFC 3986.\n",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotPackages"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotPackagesVnfSnapshotPkgId",
      "summary": "The GET method reads the information of an individual VNF snapshot package.\n",
      "description": "The GET method reads the information of an individual VNF snapshot package.\n",
      "input": [
        {
          "name": "vnfSnapshotPkgId",
          "type": "string",
          "info": "Identifier of the VNF snapshot package. The identifier is allocated by the NFVO.\nThis identifier can be retrieved from the \"id\" attribute of the applicable \"VnfSnapshotPk...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotPkgId",
            "type": "string"
          }
        },
        {
          "name": "filter",
          "type": "string",
          "info": "Attribute-based filtering expression according to clause 5.2 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity shall support receiving this parameter as part of the ...(description truncated): string",
          "required": false,
          "schema": {
            "title": "filter",
            "type": "string"
          }
        },
        {
          "name": "nextpageOpaqueMarker",
          "type": "string",
          "info": "Marker to obtain the next page of a paged response. Shall be supported by the NFV-MANO functional entity if the entity supports alternative 2 (paging) according to clause...(description truncated): string",
          "required": false,
          "schema": {
            "title": "nextpageOpaqueMarker",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "description": "This type represents the information of a VNF snapshot package.\n",
          "type": "object",
          "required": [
            "id",
            "name",
            "isFullSnapshot",
            "state",
            "isCancelPending",
            "_links"
          ],
          "properties": {
            "id": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfSnapshotPkgUniqueId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "name": {
              "description": "A string defined in IETF RFC 8259.\n",
              "type": "string"
            },
            "checksum": {
              "description": "Cheksum description\n",
              "type": "string"
            },
            "createdAt": {
              "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
              "type": "string"
            },
            "vnfSnapshotId": {
              "description": "An identifier with the intention of being globally unique.\n",
              "type": "string"
            },
            "vnfcSnapshotInfoIds": {
              "description": "Identifiers of information held by the VNFM about specific VNFC snapshots part  of the VNF snapshot and contained in the VNF snapshot package. This identifier  is allocated by the VNFM during the VNF snapshot creation.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
              "type": "object",
              "items": {
                "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                "type": "string"
              }
            },
            "isFullSnapshot": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "vnfdInfo": {
              "description": "This type represents the VNFD which is contained in a VNF snapshot package.\n",
              "type": "object",
              "required": [
                "avnfdId",
                "vnfdPath",
                "checksum",
                "isEncrypted"
              ],
              "properties": {
                "avnfdId": {
                  "description": "An identifier with the intention of being globally unique.\n",
                  "type": "string"
                },
                "vnfdPath": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "checksum": {
                  "description": "Cheksum description\n",
                  "type": "string"
                },
                "isEncrypted": {
                  "description": "The Boolean is a data type having two values (true and false).\n",
                  "type": "boolean"
                }
              }
            },
            "vnfsr": {
              "description": "This type represents the VNF snapshot record which is contained in a VNF snapshot package.\n",
              "type": "object",
              "required": [
                "recordPath",
                "checksum",
                "isEncrypted"
              ],
              "properties": {
                "recordPath": {
                  "description": "A string defined in IETF RFC 8259.\n",
                  "type": "string"
                },
                "checksum": {
                  "description": "Cheksum description\n",
                  "type": "string"
                },
                "isEncrypted": {
                  "description": "The Boolean is a data type having two values (true and false).\n",
                  "type": "boolean"
                }
              }
            },
            "vnfcSnapshotImages": {
              "description": "Information about VNF snapshot artifacts that are VNFC snapshot images. Every local and  external snapshot image shall be included. No other artifacts shall be included.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
              "type": "object",
              "items": {
                "description": "This type represents an artifact contained in a VNF snapshot package which  represents a snapshot image.\n",
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "checksum",
                  "isEncrypted",
                  "vnfcInstanceId",
                  "containerFormat",
                  "diskFormat",
                  "createdAt",
                  "minDisk",
                  "minRam",
                  "size"
                ],
                "properties": {
                  "id": {
                    "description": "An identifier that is unique within a limited local scope other than above listed identifiers, such as within a complex data structure or within a request-response pair. Representation: string of variable length.\n",
                    "type": "string"
                  },
                  "name": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "vnfcInstanceId": {
                    "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n",
                    "type": "string"
                  },
                  "containerFormat": {
                    "description": "Container format indicates whether the snapshot image is in a file format that  also contains metadata about the actual snapshot.\nPermitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - BARE: the image does not have a container or metadata envelope - DOCKER: docker container format - OVA: OVF package in a tarfile - OVF: OVF container format\nNOTE: The list of permitted values was taken from \"Container formats\" in [i.5] (OpenStack® documentation: \"Disk and container formats for images\").\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ARI",
                      "BARE",
                      "DOCKER",
                      "OVA",
                      "OVF"
                    ]
                  },
                  "diskFormat": {
                    "description": "Disk format of a snapshot image is the format of the underlying disk image.\nPermitted values: - AKI: a kernel image format - AMI: a machine image format - ARI: a ramdisk image format - ISO: an archive format for the data contents of an optical disc, such as CD-ROM - QCOW2: a common disk image format, which can expand dynamically and supports copy on write - RAW: an unstructured disk image format - VDI: a common disk image format - VHD: a common disk image format - VHDX: enhanced version of VHD format - VMDK: a common disk image format\nNOTE: The list of permitted values was adapted from \"Disk formats\" in [i.5] (OpenStack® documentation: \"Disk and container formats for images\").\n",
                    "type": "string",
                    "enum": [
                      "AKI",
                      "AMI",
                      "ARI",
                      "ISO",
                      "QCOW2",
                      "RAW",
                      "VDI",
                      "VHD",
                      "VHDX",
                      "VMDK"
                    ]
                  },
                  "createdAt": {
                    "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n",
                    "type": "string"
                  },
                  "minDisk": {
                    "description": "Unsigned integer number\n",
                    "type": "integer",
                    "minimum": 0
                  },
                  "minRam": {
                    "description": "Unsigned integer number\n",
                    "type": "integer",
                    "minimum": 0
                  },
                  "size": {
                    "description": "Unsigned integer number\n",
                    "type": "integer",
                    "minimum": 0
                  },
                  "userMetadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  },
                  "imagePath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "imageUri": {
                    "description": "String formatted according to IETF RFC 3986.\n",
                    "type": "string"
                  }
                }
              }
            },
            "additionalArtifacts": {
              "description": "Information about VNF snapshot artifacts that are not VNFC snapshot images.\nNOTE: The attribute shall not be present before the VNF snapshot package content  has been uploaded or built. Otherwise, this attribute shall be present unless it  has been requested to be excluded per attribute selector.\n",
              "type": "object",
              "items": {
                "description": "This type represents an artifact other than a software image which is contained in  a VNF snapshot package.\n",
                "type": "object",
                "required": [
                  "checksum",
                  "isEncrypted"
                ],
                "properties": {
                  "artifactPath": {
                    "description": "A string defined in IETF RFC 8259.\n",
                    "type": "string"
                  },
                  "artifactUri": {
                    "description": "String formatted according to IETF RFC 3986.\n",
                    "type": "string"
                  },
                  "checksum": {
                    "description": "Cheksum description\n",
                    "type": "string"
                  },
                  "isEncrypted": {
                    "description": "The Boolean is a data type having two values (true and false).\n",
                    "type": "boolean"
                  },
                  "metadata": {
                    "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
                    "type": "object"
                  }
                }
              }
            },
            "state": {
              "description": "State of the VNF snapshot package.  Permitted values: - CREATED: the VNF snapshot package information has been created. - BUILDING: the VNF snapshot package is being built. - UPLOADING: the VNF snapshot package is being uploaded. - EXTRACTING: the VNF snapshot package’s content is being extracted. - AVAILABLE: the VNF snapshot package is available (i.e., build or upload is completed). - ERROR: failure during the VNF snapshot package building, uploading or processing. - ERROR_EXTRACTING: failure during the VNF snapshot package extraction task.\n",
              "type": "string",
              "enum": [
                "CREATED",
                "BUILDING",
                "UPLOADING",
                "EXTRACTING",
                "AVAILABLE",
                "ERROR",
                "ERROR_EXTRACTING"
              ]
            },
            "isCancelPending": {
              "description": "The Boolean is a data type having two values (true and false).\n",
              "type": "boolean"
            },
            "failureDetails": {
              "description": "Failure details associated to current error state of the VNF snapshot package state. If \"state\" is \"ERROR\" or \"ERROR_EXTRACTING\", this attribute shall be present unless  it has been requested to be excluded via an attribute selector.\n",
              "type": "object",
              "required": [
                "errorType",
                "details"
              ],
              "properties": {
                "errorType": {
                  "description": "Type of error, when the failure happened (building, upload, processing, extracting).\nPermitted values: - BUILD_ERROR - UPLOAD_ERROR - PROCESS_ERROR - CANCELLED - EXTRACTION_ERROR\n",
                  "type": "string",
                  "enum": [
                    "BUILD_ERROR",
                    "UPLOAD_ERROR",
                    "PROCESS_ERROR",
                    "CANCELLED",
                    "EXTRACTION_ERROR"
                  ]
                },
                "details": {
                  "description": "The definition of the general \"ProblemDetails\" data structure from IETF RFC 7807 [19] is reproduced inthis structure. Compared to the general framework defined in IETF RFC 7807 [19], the \"status\" and \"detail\" attributes are mandated to be included by the present document, to ensure that the response contains additional textual information about an error. IETF RFC 7807 [19] foresees extensibility of the \"ProblemDetails\" type. It is possible that particular APIs in the present document, or particular implementations, define extensions to define additional attributes that provide more information about the error. The description column only provides some explanation of the meaning to Facilitate understanding of the design. For a full description, see IETF RFC 7807 [19].\n",
                  "type": "object",
                  "required": [
                    "status",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "description": "A URI reference according to IETF RFC 3986 [5] that identifies the problem type. It is encouraged that the URI provides human-readable documentation for the problem (e.g. using HTML) when dereferenced. When this member is not present, its value is assumed to be \"about:blank\".\n",
                      "type": "string"
                    },
                    "title": {
                      "description": "A short, human-readable summary of the problem type. It should not change from occurrence to occurrence of the problem, except for purposes of localization. If type is given and other than \"about:blank\", this attribute shall also be provided. A short, human-readable summary of the problem type.  It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization (e.g., using proactive content negotiation; see [RFC7231], Section 3.4).\n",
                      "type": "string"
                    },
                    "status": {
                      "description": "The HTTP status code for this occurrence of the problem. The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.\n",
                      "type": "integer"
                    },
                    "detail": {
                      "description": "A human-readable explanation specific to this occurrence of the problem.\n",
                      "type": "string"
                    },
                    "instance": {
                      "description": "A URI reference that identifies the specific occurrence of the problem. It may yield further information if dereferenced.\n",
                      "type": "string"
                    }
                  }
                }
              }
            },
            "userDefinedData": {
              "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n",
              "type": "object"
            },
            "_links": {
              "description": "Links to resources related to this resource.\n",
              "type": "object",
              "required": [
                "self",
                "packageContent"
              ],
              "properties": {
                "self": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                },
                "packageContent": {
                  "description": "This type represents a link to a resource using an absolute URI.\n",
                  "type": "object",
                  "required": [
                    "href"
                  ],
                  "properties": {
                    "href": {
                      "description": "String formatted according to IETF RFC 3986.\n",
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotPackagesVnfSnapshotPkgId"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotPackagesVnfSnapshotPkgIdPackageContent",
      "summary": "The GET method fetches the content of a VNF snapshot package.\n",
      "description": "The GET method fetches the content of a VNF snapshot package.\n",
      "input": [
        {
          "name": "vnfSnapshotPkgId",
          "type": "string",
          "info": "Identifier of the VNF snapshot package. The identifier is allocated by the NFVO.\nThis identifier can be retrieved from the \"id\" attribute of the applicable \"VnfSnapshotPk...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotPkgId",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotPackagesVnfSnapshotPkgIdPackageContent"
      },
      "task": true
    },
    {
      "name": "getVnfSnapshotPackagesVnfSnapshotPkgIdArtifactsArtifactPath",
      "summary": "The GET method fetches the content of an artifact within the VNF snapshot package.\n",
      "description": "The GET method fetches the content of an artifact within the VNF snapshot package.\n",
      "input": [
        {
          "name": "vnfSnapshotPkgId",
          "type": "string",
          "info": "Identifier of the VNF snapshot package. The identifier is allocated by the NFVO.\nThis identifier can be retrieved from the \"id\" attribute of the applicable \"VnfSnapshotPk...(description truncated): string",
          "required": true,
          "schema": {
            "title": "vnfSnapshotPkgId",
            "type": "string"
          }
        },
        {
          "name": "artifactPath",
          "type": "string",
          "info": "For an artifact contained as a file in the VNF snapshot package, this variable shall contain a sequence \nof one or path segments representing the path of the artifact wit...(description truncated): string",
          "required": true,
          "schema": {
            "title": "artifactPath",
            "type": "string"
          }
        }
      ],
      "output": {
        "name": "result",
        "type": "object",
        "description": "A JSON Object containing status, code and the result",
        "schema": {
          "title": "result",
          "type": "object"
        }
      },
      "roles": [
        "admin"
      ],
      "route": {
        "verb": "POST",
        "path": "/getVnfSnapshotPackagesVnfSnapshotPkgIdArtifactsArtifactPath"
      },
      "task": true
    }
  ],
  "views": []
}