虚拟化网络功能包 (VNF 包)

虚拟化网络功能包 (VNF 包)

管理虚拟化网络功能包 (VNF 包) 及其资源。

VNF 包是一个 tar 归档文件,包含管理 VNF 生命周期所需的所有信息。

POST
/vnfpkgm/v1/vnf_packages

创建 VNF 包

创建 VNF 包。

响应代码

成功

代码

原因

201 - 已创建

资源已创建并准备好使用。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

请求参数

名称

入参

类型

描述

userDefinedData (可选)

body

对象

VNF 包的用户自定义数据。

请求示例

{
   "userDefinedData":{
      "abc":"xyz"
   }
}

响应参数

名称

入参

类型

描述

id

body

字符串

VNF 包的标识符。此标识符由 NFVO 分配。

_links

body

对象

指向与此资源相关的资源的链接。

onboardingState

body

字符串

VNF 包的入职状态。入职状态由“VnfPkgInfo”信息元素中的“onboardingState”属性表示,具有以下值:CREATED:VNF 包信息对象已创建。UPLOADING:VNF 包正在上传。PROCESSING:VNF 包正在处理中,例如验证。ONBOARDED:VNF 包已成功入职。

operationalState

body

字符串

VNF 包的运行状态。运行状态由“VnfPkgInfo”信息元素中的“operationalState”属性表示,具有以下值:ENABLED:VNF 包已启用。DISABLED:VNF 包已禁用。如果“onboardingState”属性的值不等于“ONBOARDED”,则“operationalState”属性的值应等于“DISABLED”。

usageState

body

字符串

VNF 包的使用状态。使用状态由“VnfPkgInfo”信息元素中的“usageState”属性表示,具有以下值:IN_USE:VNF 包正在使用中。NOT_IN_USE:VNF 包未在使用中。如果“onboardingState”属性的值不等于“ONBOARDED”,则“usageState”属性的值应等于“NOT_IN_USE”。

userDefinedData

body

对象

VNF 包的用户自定义数据。

响应示例

{
   "usageState":"NOT_IN_USE",
   "userDefinedData":{
      "abc":"xyz"
   },
   "_links":{
      "packageContent":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/package_content"
      },
      "self":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
      },
      "vnfd":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/vnfd"
      }
   },
   "onboardingState":"CREATED",
   "operationalState":"DISABLED",
   "id":"4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
}
GET
/vnfpkgm/v1/vnf_packages

列出 VNF 包

列出 VNF 包。

如果响应包含带有“rel”属性设置为“next”的 LINK HTTP 标头(参见 IETF RFC 8288 [1]),API 消费者可以向 LINK 标头中通信的 URI 发送 GET 请求,以获取下一页的结果。

响应代码

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

响应参数

名称

入参

类型

描述

id

body

字符串

VNF 包的标识符。此标识符由 NFVO 分配。

vnfdId

body

字符串

此标识符由 VNF 提供商管理,以全局唯一的方式标识 VNF 包和 VNFD。它从入职的 VNF 包的 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfProvider

body

字符串

VNF 包和 VNFD 的提供商。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfProductName

body

字符串

用于标识 VNF 产品的名称。在 VNF 产品生命周期中保持不变。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfSoftwareVersion

body

字符串

VNF 的软件版本。当 VNF 包中包含的软件发生任何更改时,此版本会更改。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfdVersion

body

字符串

VNFD 的版本。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

softwareImages

body

数组

有关 VNF 包工件(即软件镜像)的信息。在 VNF 包内容入职之前,不应存在此属性。否则,除非根据属性选择器请求排除,否则应存在此属性。

onboardingState

body

字符串

VNF 包的入职状态。入职状态由“VnfPkgInfo”信息元素中的“onboardingState”属性表示,具有以下值:CREATED:VNF 包信息对象已创建。UPLOADING:VNF 包正在上传。PROCESSING:VNF 包正在处理中,例如验证。ONBOARDED:VNF 包已成功入职。

operationalState

body

字符串

VNF 包的运行状态。运行状态由“VnfPkgInfo”信息元素中的“operationalState”属性表示,具有以下值:ENABLED:VNF 包已启用。DISABLED:VNF 包已禁用。如果“onboardingState”属性的值不等于“ONBOARDED”,则“operationalState”属性的值应等于“DISABLED”。

usageState

body

字符串

VNF 包的使用状态。使用状态由“VnfPkgInfo”信息元素中的“usageState”属性表示,具有以下值:IN_USE:VNF 包正在使用中。NOT_IN_USE:VNF 包未在使用中。如果“onboardingState”属性的值不等于“ONBOARDED”,则“usageState”属性的值应等于“NOT_IN_USE”。

userDefinedData

body

对象

VNF 包的用户自定义数据。

_links

body

对象

指向与此资源相关的资源的链接。

响应示例

{
   "vnf_packages":[
      {
         "vnfSoftwareVersion":"1.0",
         "usageState":"NOT_IN_USE",
         "vnfProductName":"Sample VNF",
         "softwareImages":[
            {
               "imagePath":"",
               "diskFormat":"qcow2",
               "userMetadata":{

               },
               "id":"VirtualStorage",
               "size":2,
               "name":"VrtualStorage",
               "checksum":{
                  "hash":"932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464",
                  "algorithm":"sha-256"
               },
               "minDisk":2,
               "version":"0.5.2",
               "provider":"provider",
               "minRam":8192,
               "containerFormat":"bare"
            },
            {
               "imagePath":"",
               "diskFormat":"qcow2",
               "userMetadata":{

               },
               "id":"VDU1",
               "size":1,
               "name":"Software of VDU1",
               "checksum":{
                  "hash":"932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464",
                  "algorithm":"sha-256"
               },
               "minDisk":1,
               "version":"0.5.2",
               "provider":"provider",
               "minRam":0,
               "containerFormat":"bare"
            }
         ],
         "vnfProvider":"Test VNF Provider",
         "userDefinedData":{
            "abc":"xyz"
         },
         "vnfdId":"b3ab49d6-389d-46f9-8650-d0bf778b5e92",
         "_links":{
            "packageContent":{
               "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/package_content"
            },
            "self":{
               "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
            },
            "vnfd":{
               "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/vnfd"
            }
         },
         "vnfdVersion":"1.0",
         "onboardingState":"ONBOARDED",
         "operationalState":"DISABLED",
         "id":"4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
      }
   ]
}
GET
/vnfpkgm/v1/vnf_packages/{vnf_package_id}

显示 VNF 包

显示给定 VNF 包的信息。

响应代码

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

响应参数

名称

入参

类型

描述

id

body

字符串

VNF 包的标识符。此标识符由 NFVO 分配。

vnfdId

body

字符串

此标识符由 VNF 提供商管理,以全局唯一的方式标识 VNF 包和 VNFD。它从入职的 VNF 包的 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfProvider

body

字符串

VNF 包和 VNFD 的提供商。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfProductName

body

字符串

用于标识 VNF 产品的名称。在 VNF 产品生命周期中保持不变。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfSoftwareVersion

body

字符串

VNF 的软件版本。当 VNF 包中包含的软件发生任何更改时,此版本会更改。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

vnfdVersion

body

字符串

VNFD 的版本。此信息从 VNFD 复制而来。在 VNF 包内容入职后应存在,否则应不存在。

softwareImages

body

数组

有关 VNF 包工件(即软件镜像)的信息。在 VNF 包内容入职之前,不应存在此属性。否则,除非根据属性选择器请求排除,否则应存在此属性。

onboardingState

body

字符串

VNF 包的入职状态。入职状态由“VnfPkgInfo”信息元素中的“onboardingState”属性表示,具有以下值:CREATED:VNF 包信息对象已创建。UPLOADING:VNF 包正在上传。PROCESSING:VNF 包正在处理中,例如验证。ONBOARDED:VNF 包已成功入职。

operationalState

body

字符串

VNF 包的运行状态。运行状态由“VnfPkgInfo”信息元素中的“operationalState”属性表示,具有以下值:ENABLED:VNF 包已启用。DISABLED:VNF 包已禁用。如果“onboardingState”属性的值不等于“ONBOARDED”,则“operationalState”属性的值应等于“DISABLED”。

usageState

body

字符串

VNF 包的使用状态。使用状态由“VnfPkgInfo”信息元素中的“usageState”属性表示,具有以下值:IN_USE:VNF 包正在使用中。NOT_IN_USE:VNF 包未在使用中。如果“onboardingState”属性的值不等于“ONBOARDED”,则“usageState”属性的值应等于“NOT_IN_USE”。

userDefinedData

body

对象

VNF 包的用户自定义数据。

_links

body

对象

指向与此资源相关的资源的链接。

响应示例

{
   "vnfSoftwareVersion":"1.0",
   "usageState":"NOT_IN_USE",
   "vnfProductName":"Sample VNF",
   "softwareImages":[
      {
         "imagePath":"",
         "diskFormat":"qcow2",
         "userMetadata":{

         },
         "id":"VirtualStorage",
         "size":2000000000, // unit for 'size` is always in Bytes
         "name":"VrtualStorage",
         "checksum":{
            "hash":"932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464",
            "algorithm":"sha-256"
         },
         "minDisk":2000000000, // unit for 'minDisk' is always in Bytes
         "version":"0.5.2",
         "provider":"provider",
         "minRam":8192000000, // unit for 'minRam' is always in Bytes
         "containerFormat":"bare"
      },
      {
         "imagePath":"",
         "diskFormat":"qcow2",
         "userMetadata":{

         },
         "id":"VDU1",
         "size":1000000000,
         "name":"Software of VDU1",
         "checksum":{
            "hash":"932fcae93574e242dc3d772d5235061747dfe537668443a1f0567d893614b464",
            "algorithm":"sha-256"
         },
         "minDisk":1000000000,
         "version":"0.5.2",
         "provider":"provider",
         "minRam":0,
         "containerFormat":"bare"
      }
   ],
   "vnfProvider":"Test VNF Provider",
   "userDefinedData":{
      "abc":"xyz"
   },
   "vnfdId":"b3ab49d6-389d-46f9-8650-d0bf778b5e92",
   "_links":{
      "packageContent":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/package_content"
      },
      "self":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
      },
      "vnfd":{
         "href":"/vnfpkgm/v1/vnf_packages/4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb/vnfd"
      }
   },
   "vnfdVersion":"1.0",
   "onboardingState":"ONBOARDED",
   "operationalState":"DISABLED",
   "id":"4e8b9d2c-ecb5-408b-a8ce-8ea0890bacbb"
}
DELETE
/vnfpkgm/v1/vnf_packages/{vnf_package_id}

删除 VNF 包

删除给定的 VNF 包。

先决条件

VNF 包的 operationalState 值必须为 DISABLED,并且其 usageState 值必须为 NOT_IN_USE

响应代码

成功

代码

原因

204 - No Content

服务器已通过删除资源来满足请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

PUT
/vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content

从内容上传 VNF 包

从内容上传给定的 VNF 包。

注意

有关软件镜像校验和的哈希算法,请参阅 软件镜像校验和的哈希算法 部分以获取更多信息。

响应代码

成功

代码

原因

202 - Accepted

请求已被接受处理,但处理尚未完成。响应中包含一个“location”头部,其中包含一个链接以检查请求的进度。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

vnf_package_content

body

对象

VNF 包是一个 tar 归档文件,包含管理 VNF 生命周期所需的所有信息。HTTP 标头“Content-Type”应设置为“application/zip”。

POST
/vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content/upload_from_uri

从 URI 上传 VNF 包

从内容上传给定的 VNF 包。

注意

有关软件镜像校验和的哈希算法,请参阅 软件镜像校验和的哈希算法 部分以获取更多信息。

响应代码

成功

代码

原因

202 - Accepted

请求已被接受处理,但处理尚未完成。响应中包含一个“location”头部,其中包含一个链接以检查请求的进度。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

400 - 请求错误

请求中的某些内容无效。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

addressInformation

body

字符串

VNF 包内容的地址信息。NFVO 可以使用此地址获取 VNF 包。

userName (可选)

body

字符串

用于身份验证的用户名。如果用户名需要但未通过其他方式配置,则应存在。

密码 (可选)

body

字符串

用于身份验证的密码。如果密码需要但未通过其他方式配置,则应存在。

PATCH
/vnfpkgm/v1/vnf_packages/{vnf_package_id}

更新 VNF 包信息

更新 VNF 包的信息。

响应代码

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

operationalState (可选)

body

字符串

入职 VNF 包实例的新运行状态值。有效值为“ENABLED”和“DISABLED”。请参阅注释。

userDefinedData (可选)

body

对象

要更新的用户自定义数据。对于现有键,该值将被替换。

注意

“operationalState”或“userDefinedData”参数中至少应存在一个。如果 VNF 包未入职,则仅使用“userDefinedData”属性更新现有或添加其他用户自定义数据。如果用户传递了具有完全相同键/值对的现有用户自定义数据,则将返回 400 错误。

请求示例

{
   "operationalState": "DISABLED",
   "userDefinedData": {
      "key1": "value1",
      "key2": "value2"
   }
}

响应参数

名称

入参

类型

描述

operationalState (可选)

body

字符串

入职 VNF 包实例的运行状态的更新值。

userDefinedData (可选)

body

对象

用户自定义数据的更新值。

响应示例

{
   "operationalState":"DISABLED",
   "userDefinedData":{
      "abc":"xyz"
   }
}
GET
/vnfpkgm/v1/vnf_packages/{vnf_package_id}/vnfd

读取单个 VNF 包的 VNFD

读取已入职的 VNF 包的 VNFD。

VNFD 可以实现为单个文件或多个文件的集合。如果 VNFD 以多个文件的形式实现,则应返回嵌入这些文件的 ZIP 文件。如果 VNFD 以单个文件形式实现,则应返回该文件或嵌入该文件的 ZIP 文件。选择格式由 GET 请求中传递的“Accept”HTTP 标头控制。

如果“Accept”标头仅包含“text/plain”并且 VNFD 以单个文件形式实现,则应返回该文件;否则,应返回错误消息。如果“Accept”标头仅包含“application/zip”,则单个文件或构成 VNFD 的多个文件应嵌入在 ZIP 文件中返回。如果“Accept”标头同时包含“text/plain”和“application/zip”,则 NFVO 可以选择为单个文件 VNFD 返回的格式;对于多文件 VNFD,应返回 ZIP 文件。

响应代码

成功

代码

原因

200 - 正常

请求成功。

错误

代码

原因

400 - 请求错误

请求中的某些内容无效。

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

406 - 不可接受

不可接受,请求的资源只能生成根据请求中发送的“Accept”标头不可接受的内容。

409 - Conflict

此操作与此资源的另一个操作冲突。

500 - 内部服务器错误

服务内部出现问题。 通常不应发生这种情况。 如果发生这种情况,则表示服务器遇到了一些严重问题。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

Accept

标头

字符串

如果 VNFD 以多个文件的形式实现,则将返回 zip 文件,Content-Type 设置为 application/zip,否则将在响应标头中设置为 text/plain

响应

名称

入参

类型

描述

Content-Type

标头

字符串

如果 VNFD 以多个文件的形式实现,则将返回 zip 文件,Content-Type 设置为 application/zip,否则将在响应标头中设置为 text/plain

GET
/vnfpkgm/v1/vnf_packages/{vnf_package_id}/package_content

使用 HTTP_RANGE 获取已入职的 VNF 包

使用 HTTP_RANGE 获取已入职的 VNF 包。

GET 方法获取由 NFVO 分配的 VNF 包标识符标识的 VNF 包的内容。

检查“HTTP_RANGE”标头是否具有有效值。如果存在且有效,则获取该范围内的包内容。如果不存在,则获取整个内容。

响应代码

成功

代码

原因

200 - 正常

请求成功。

206 - 部分内容

部分内容,服务器已满足资源的局部 GET 请求。

错误

代码

原因

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

416 - 请求范围不满足

请求范围不满足,如果请求包含 Range 请求标头字段,并且此字段中的任何范围说明符都不与所选资源的当前范围重叠,并且请求未包含 If-Range 请求标头字段,则服务器应返回带有此状态代码的响应。

500 - 内部服务器错误

服务内部出现问题。 通常不应发生这种情况。 如果发生这种情况,则表示服务器遇到了一些严重问题。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

Accept

标头

字符串

获取的 VNF 包将在响应标头中以 Content-Type 设置为 application/zip 的形式返回。

Range (可选)

标头

字符串

要在下载的 VNF 包的字节范围在 Range 标头中指定。

响应

名称

入参

类型

描述

Content-Type

标头

字符串

获取的 VNF 包将在响应标头中以 Content-Type 设置为 application/zip 的形式返回。

GET
/vnfpkgm/v1/vnf_packages/{vnf_package_id}/artifacts/{artifact_path}

使用 HTTP_RANGE 获取已入职的 VNF 包工件

使用 HTTP_RANGE 获取已入职的 VNF 包工件。

GET 方法获取 VNF 包中的工件内容。

检查“HTTP_RANGE”标头是否具有有效值。如果存在且有效,则获取该范围内的工件内容。如果不存在,则获取整个内容。

响应代码

成功

代码

原因

200 - 正常

请求成功。

206 - 部分内容

部分内容,服务器已满足资源的局部 GET 请求。

错误

代码

原因

401 - 未授权

用户必须在发出请求之前进行身份验证。

403 - 禁止

策略不允许当前用户执行此操作。

404 - Not Found

找不到请求的资源。

409 - Conflict

此操作与此资源的另一个操作冲突。

416 - 请求范围不满足

请求范围不满足,如果请求包含 Range 请求标头字段,并且此字段中的任何范围说明符都不与所选资源的当前范围重叠,并且请求未包含 If-Range 请求标头字段,则服务器应返回带有此状态代码的响应。

请求参数

名称

入参

类型

描述

vnf_package_id

路径

字符串

VNF 包的 UUID。

artifact_path

路径

字符串

VNF 包中工件文件的路径。

Accept

标头

字符串

根据工件文件扩展名,它会自动设置为响应标头中的相应 Mime-Type。找不到相应的 Mime-Type 时,设置为 application/octet-stream

Range (可选)

标头

字符串

要在下载的 VNF 包的字节范围在 Range 标头中指定。

响应

名称

入参

类型

描述

Content-Type

标头

字符串

根据工件文件扩展名,它会自动设置为响应标头中的相应 Mime-Type。找不到相应的 Mime-Type 时,设置为 application/octet-stream

参考

软件镜像校验和的哈希算法

在 VNF 包的 VNF 描述符中添加软件镜像时,建议使用 ETSI_GS_NFV_SOL_004 中定义的 algorithm,并且它还必须与 Glance 服务设置的 hashing_algorithm 配置选项匹配,否则在 VNF 实例化期间将无法验证校验和。Glance 服务中配置的默认 hashing_algorithmsha512,并且操作员可以使用以下任何算法覆盖默认值:sha3_384、sha224、md5、sha512、blake2b、sha3_512、blake2s、sha384、sha1、shake_256、sha256、shake_128 和 sha3_256。