VNF 包

VNF 包是一个 ZIP 文件,包含 VNFD、虚拟机软件镜像以及其他工件资源,例如脚本和配置文件。目录结构和文件内容在 NFV-SOL004 v2.6.1 中定义。

根据 NFV-SOL004 v2.6.1,VNF 包应为 ZIP 文件格式,符合 TOSCA-Simple-Profile-YAML-v1.1 规范。该 ZIP 文件称为 TOSCA YAML 云服务归档 (CSAR),并且有两种不同的结构可用

  • 包含 TOSCA-Metadata 目录的 CSAR

  • 不包含 TOSCA-Metadata 目录的 CSAR zip

注意

VNF LCM API 版本 1 支持这两种结构。VNF LCM API 版本 2 仅支持包含 TOSCA-Metadata 目录的 CSAR

注意

有关 CSAR 的更详细定义,请参阅 TOSCA-Simple-Profile-YAML-v1.1 的第 6 节。

Tacker 仓库中提供了一些 VNF 包示例。

包含 TOSCA-Metadata 目录的 CSAR

目录结构

  • TOSCA-Metadata/TOSCA.meta

  • Definitions/

  • Files/images/

  • (可选) Scripts/

  • (可选) <manifest 文件名>.mf

  • (可选) BaseHOT/

  • (可选) UserData/

注意

BaseHOT 和 UserData 是可选的,但当运行 LCM 操作用户数据时,它们是必需的。这种方法正在 NFV-SOL014 v2.8.1 中讨论,并且尚未明确目录结构。请参阅 ETSI NFV-SOL VNF 部署为带有 LCM 操作用户数据的 VM

规范可以根据标准化 NFV-SOL014 v2.8.1 进行修改。

!----TOSCA-Metadata
        !---- TOSCA.meta
!----Definitions
        !---- etsi_nfv_sol001_common_types.yaml
        !---- etsi_nfv_sol001_vnfd_types.yaml
        !---- vnfd_top.yaml
        !---- vnfd_df_1.yaml
        !---- ..
        !---- vnfd_df_x.yaml
        !---- vnfd_types.yaml
!----Files
        !---- images
                !---- image_1.img
                !---- ..
                !---- image_x.img
!----Scripts (optional)
        !---- install.sh
!---- manifest.mf
!----BaseHOT (optional)
        !---- df_1
                !---- base_hot_df_1.yaml
        !---- ..
        !---- df_x
                !---- base_hot_df_x.yaml
!----UserData (optional)
        !---- __init__.py
        !---- lcm_user_data.py

TOSCA-Metadata/TOSCA.meta

根据 TOSCA-Simple-Profile-YAML-v1.1 规范,TOSCA.meta 元数据文件在 TOSCA-1.0-specification 中描述,并且应具有以下内容

  • TOSCA-Meta-File-Version: 这是 TOSCA 元文件格式的版本号,必须为“1.0”。

  • CSAR-Version: 这是 CSAR 规范的版本号,必须为“1.1”

  • Created-By: 创建 CSAR 的人员或供应商。

  • Entry-Definitions: 这是 Definitions/ 目录中顶级 VNFD 文件的引用。

  • (可选) ETSI-Entry-Manifest: 这是对 manifest 文件的引用。如果未提供此键/值,Tacker 将尝试查找名称为顶级 VNF 文件名的 manifest 文件,即 <VNFD 文件名>.mf

TOSCA.meta 文件中,相关工件资源信息,也可以位于 manifest 文件中,可以按照 TOSCA-1.0-specification 第 16.2 节的方式进行描述

注意

强烈建议将工件信息放在 manifest 文件中,而不是 TOSCA.meta 文件中,因为它更简单易懂。

  • (可选) artifact info - 描述所有文件(VNFD YAML 文件除外)的位置和摘要。

    • Name: 文件的路径和标识符。

    • Content-Type: 描述的文件类型。此类型是符合 type/subtype 结构的 MIME 类型。

    • Algorithm: 哈希算法的名称。“SHA-224”、“SHA-256”、“SHA-384”和“SHA-512”受支持。

    • Hash: 对应于十六进制表示形式的文本字符串。

注意

对于软件镜像,请注意,哈希计算的算法与 Glance 配置 相同,默认值为“SHA-512”。软件镜像不是 additionalArtifacts,而是根据 NFV-SOL005 v2.6.1 的 softwareImages。

注意

“Name”和“Content-Type”属性在 TOSCA-1.0-specification 第 16.2 节中定义。“Algorithm”和“Hash”来自 NFV-SOL004 v2.6.1 第 5.3 节和 NFV-SOL005 v2.6.1 第 9.5.3.3 节的要求,校验和字段是必需的,并且方式应与 manifest 文件相同。

示例

TOSCA-Meta-File-Version: 1.0
CSAR-Version: 1.1
Created-By: Tacker
Entry-Definitions: vnfd_top.yaml
ETSI-Entry-Manifest: manifest.mf

Name: manifest.mf
Content-Type: text/plain
Algorithm: SHA-256
Hash: 09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943

Name: scripts/install.sh
Content-Type: application/x-sh
Algorithm: SHA-256
Hash: d0e7828293355a07c2dccaaa765c80b507e60e6167067c950dc2e6b0da0dbd8b

Name: https://www.example.com/example.sh
Content-Type: application/x-sh
Algorithm: SHA-256
Hash: 36f945953929812aca2701b114b068c71bd8c95ceb3609711428c26325649165

Definitions/

所有 VNFD YAML 文件都位于此处。如何创建由多个部署 flavor 组成的 VNFD 在 基于 ETSI NFV-SOL001 的 VNF 描述符 (VNFD) 中描述。

来自 ETSI NFV-SOL001 仓库 提供的 VNFD 类型文件也包含在内

  • etsi_nfv_sol001_common_types.yaml

  • etsi_nfv_sol001_vnfd_types.yaml

Files/images/

VNF 软件镜像位于此处。这些文件也在 TOSCA.meta 或 manifest 文件中作为工件进行描述。

Scripts/

所有脚本文件都位于此处。这些脚本在 Action Driver 或 Management Driver 中执行。所有这些文件也出现在 TOSCA.meta 或 manifest 文件中作为工件。

<manifest 文件名>.mf

manifest 文件包含两种类型的信息,metadataartifact infometadata 是可选的,artifact info 是必需的,当 VNF 包文件中包含一个或多个工件(例如软件镜像、脚本或配置文件)时。此 artifact info 也可以位于 TOSCA.meta 文件中。

  • (可选) metadata - 是 VNF 包文件的可选元数据。

    • vnf_product_name: VNF 的产品名称。

    • vnf_provider_id: VNF 提供商的 ID。

    • vnf_package_version: VNF 包文件的版本。

    • vnf_release_date_time: 格式符合 IETF RFC 3339

注意

manifest 文件中的 metadata 不存储在 Tacker DB 中。

  • artifact info - 描述所有文件(VNFD YAML 文件除外)的位置和摘要。

    • Source: 文件的路径和标识符。

    • Algorithm: 哈希算法的名称。“SHA-224”、“SHA-256”、“SHA-384”和“SHA-512”受支持。

    • Hash: 对应于十六进制表示形式的文本字符串。

示例

metadata:
  vnf_product_name: VNF
  vnf_provider_id: Tacker
  vnf_package_version: 1.0
  vnf_release_date_time: 2020-01-01T10:00:00+09:00

Source: VNFD.yaml
Algorithm: SHA-256
Hash: 09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943

Source: scripts/install.sh
Algorithm: SHA-256
Hash: d0e7828293355a07c2dccaaa765c80b507e60e6167067c950dc2e6b0da0dbd8b

Source: https://www.example.com/example.sh
Algorithm: SHA-256
Hash: 36f945953929812aca2701b114b068c71bd8c95ceb3609711428c26325649165

BaseHOT/

Base HOT 文件是 Native 云编排模板,HOT 在这里指的是 OpenStack 的 HOT 模板,通常用于不同 VNFs 中的 LCM 操作。此 Base HOT 可以在 OpenStack API 上工作,并由 LCM 操作用户数据生成的 Heat 输入参数填充。用户负责准备此文件,并且必须使其与放置在 Definitions/ 目录中的 VNFD 一致。

注意

将存储在 Definitions/ 中的部署 flavor 对应的目录放置在 BaseHOT/ 目录下,并将 Base HOT 文件存储在其中。在本 DQ 示例中,假设存在从 df_1 到 `df_x` 的部署 flavor。有关部署 flavor 的更多信息,请参阅 NFV-SOL001 v2.6.1 附录 A。

示例

heat_template_version: 2013-05-23
description: 'Template for test _generate_hot_from_tosca().'

parameters:
  nfv:
    type: json

resources:
  VDU1:
    type: OS::Nova::Server
    properties:
      flavor:
        get_resource: VDU1_flavor
      name: VDU1
      image: { get_param: [ nfv, VDU, VDU1, image ] }
      networks:
      - port:
          get_resource: CP1

  CP1:
    type: OS::Neutron::Port
    properties:
      network: { get_param: [ nfv, CP, CP1, network ] }

  VDU1_flavor:
    type: OS::Nova::Flavor
    properties:
      ram: { get_param: [ nfv, VDU, VDU1, flavor, ram ] }
      vcpus: { get_param: [ nfv, VDU, VDU1, flavor, vcpus ] }
      disk: { get_param: [ nfv, VDU, VDU1, flavor, disk ] }

outputs: {}

注意

对于值为“get_param”的属性(例如 VDU1 中的 image),Heat 输入参数由放置在 UserData/ 目录中的脚本生成。

UserData/

LCM 操作用户数据是一个脚本,它返回键/值数据作为 Heat 输入参数,用于 Base HOT。作为 Heat 输入参数,可以分配未在 VNFD 中静态定义的 OpenStack 参数(例如 flavor、镜像、硬件加速、驱动程序设置等)。

注意

需要为 HOT 文件生成 Heat 输入参数。此脚本对 VNF 包创建者/用户具有以下优点/缺点。优点是此脚本没有操作限制,因此可以由创建者自由描述并由用户操作。缺点是创建者可以编写涉及 DB 操作的脚本,这可能导致对用户产生意外行为。在能够自由编写脚本和限制操作之间进行权衡是未来的一个问题。

注意

由于对它们的要求不同,User data 脚本在 VNF LCM API 版本 1 和 2 之间不兼容。

VNF LCM API 版本 2 的 User data 脚本的要求在 VNF LCM v2 的 UserData 脚本 中描述。

以下是 VNF LCM API 版本 1 的 User data 脚本示例。

import tacker.vnfm.lcm_user_data.utils as UserDataUtil

from tacker.vnfm.lcm_user_data.abstract_user_data import AbstractUserData

class SampleUserData(AbstractUserData):

    @staticmethod
    def instantiate(base_hot_dict=None,
                    vnfd_dict=None,
                    inst_req_info=None,
                    grant_info=None):

        # Create HOT input parameter using util functions.
        initial_param_dict = UserDataUtil.create_initial_param_dict(
            base_hot_dict)

        vdu_flavor_dict = UserDataUtil.create_vdu_flavor_dict(vnfd_dict)
        vdu_image_dict = UserDataUtil.create_vdu_image_dict(grant_info)
        cpd_vl_dict = UserDataUtil.create_cpd_vl_dict(
            base_hot_dict, inst_req_info)

        final_param_dict = UserDataUtil.create_final_param_dict(
            initial_param_dict, vdu_flavor_dict, vdu_image_dict, cpd_vl_dict)

        return final_param_dict

注意

需要通过此 scprit 为放置在 BaseHOT/ 目录中的 HOT 文件生成 Heat 输入参数。

不包含 TOSCA-Metadata 目录的 CSAR zip

文件结构

  • <VNFD 文件名>.yaml

  • Definitions/

  • <manifest 文件名>.mf

!---- vnfd_top.yaml
!----Definitions/
        !---- etsi_nfv_sol001_common_types.yaml
        !---- etsi_nfv_sol001_vnfd_types.yaml
        !---- vnfd_top.yaml
        !---- vnfd_df_1.yaml
        !---- ..
        !---- vnfd_df_x.yaml
        !---- vnfd_types.yaml
!---- vnfd_top.mf

<VNFD 文件名>.yaml

这是顶级 VNFD 文件。它可以从 Definitions/ 目录导入其他 VNFD 文件。

Definitions/

所有 VNFD YAML 文件(顶级 VNFD 文件除外)都位于此处。如何创建由多个部署 flavor 组成的 VNFD 在 基于 ETSI NFV-SOL001 的 VNF 描述符 (VNFD) 中描述。

来自 ETSI NFV-SOL001 仓库 的 VNFD 类型文件也可能包含在内

  • etsi_nfv_sol001_common_types.yaml

  • etsi_nfv_sol001_vnfd_types.yaml

<manifest 文件名>.mf

manifest 文件具有 .mf 扩展名,与顶级 VNFD YAML 文件的名称相同。内容与前一节中描述的内容完全相同。