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 文件包含两种类型的信息,metadata 和 artifact info。metadata 是可选的,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 文件的名称相同。内容与前一节中描述的内容完全相同。