VNF 包生成工具

要上传 VNF 包,需要通过 openstack 命令提供一个 zip 文件。以下是一个上传名为 sample_vnf_package_csar.zip 的 VNF 包的示例。

$ openstack vnf package upload \
  --path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
  6e6b7a6d-0ebe-4085-96c2-b34269d837f9

您可以使用专用工具准备 zip 文件。

先决条件

此工具使用以下网络

  • net0 网络

  • subnet0 net0 的子网

  • net1 网络

  • subnet1 net1 的子网

  • net_mgmt 网络

这些网络是在您通过 devstack 安装 Tacker 时默认创建的。如果您的 OpenStack 环境中不存在这些网络,请在运行此工具之前手动创建它们。

您可以使用以下命令检查网络。

$ openstack net list
+--------------------------------------+-----------------+----------------------------------------------------------------------------+
| ID                                   | Name            | Subnets                                                                    |
+--------------------------------------+-----------------+----------------------------------------------------------------------------+
| 348d1921-0cca-4730-815a-cc58c503ee65 | public          | 64290109-665b-442f-83d4-0a98b8301af8, d963ddfd-3ab1-4320-9efd-311049d92575 |
| 3b069dc1-4247-4063-89dd-0898efa04384 | private         | 69f64379-e72f-433d-be01-ff6723e8e955, 9e0c260c-78f7-4f15-9157-40f823433449 |
| 41ebfff9-df23-4690-bef9-a0e76f618947 | net1            | e24618bb-c7bc-4771-a9d8-eba53db3c0ae                                       |
| ab598736-9fc9-470d-b894-b0a4d2f9d46c | lb-mgmt-net     | b21032be-c681-46ac-b249-8d3be320f830                                       |
| d9fc27d5-d881-4cf2-9023-d9cff9df64ed | k8s-pod-net     | cd4269f6-9152-4707-95d4-825b722edcf0                                       |
| dbe64c96-1334-4983-9f60-a90905af6ff0 | net0            | 23737d05-5e3f-4af8-8c4d-83221f794787                                       |
| eeb398f0-818b-4c75-9573-8f50fa5de501 | net_mgmt        | bfa8e9d2-039d-4e59-85a2-8a9801d90cfd                                       |
| ef55ac46-bb38-4abe-bdf7-2b9d3be02266 | k8s-service-net | 0d98b3b8-a6fd-4044-8acf-f0630755f956                                       |
+--------------------------------------+-----------------+----------------------------------------------------------------------------+
$ openstack subnet list
+--------------------------------------+-------------------------+--------------------------------------+---------------------+
| ID                                   | Name                    | Network                              | Subnet              |
+--------------------------------------+-------------------------+--------------------------------------+---------------------+
| 0d98b3b8-a6fd-4044-8acf-f0630755f956 | k8s-service-subnet-IPv4 | ef55ac46-bb38-4abe-bdf7-2b9d3be02266 | 10.0.0.128/26       |
| 23737d05-5e3f-4af8-8c4d-83221f794787 | subnet0                 | dbe64c96-1334-4983-9f60-a90905af6ff0 | 10.10.0.0/24        |
| 64290109-665b-442f-83d4-0a98b8301af8 | ipv6-public-subnet      | 348d1921-0cca-4730-815a-cc58c503ee65 | 2001:db8::/64       |
| 69f64379-e72f-433d-be01-ff6723e8e955 | private-subnet          | 3b069dc1-4247-4063-89dd-0898efa04384 | 10.0.0.0/26         |
| 9e0c260c-78f7-4f15-9157-40f823433449 | ipv6-private-subnet     | 3b069dc1-4247-4063-89dd-0898efa04384 | fd5f:5cb9:4f13::/64 |
| b21032be-c681-46ac-b249-8d3be320f830 | lb-mgmt-subnet          | ab598736-9fc9-470d-b894-b0a4d2f9d46c | 192.168.0.0/24      |
| bfa8e9d2-039d-4e59-85a2-8a9801d90cfd | subnet_mgmt             | eeb398f0-818b-4c75-9573-8f50fa5de501 | 192.168.120.0/24    |
| cd4269f6-9152-4707-95d4-825b722edcf0 | k8s-pod-subnet-IPv4     | d9fc27d5-d881-4cf2-9023-d9cff9df64ed | 10.0.0.64/26        |
| d963ddfd-3ab1-4320-9efd-311049d92575 | public-subnet           | 348d1921-0cca-4730-815a-cc58c503ee65 | 172.24.4.0/24       |
| e24618bb-c7bc-4771-a9d8-eba53db3c0ae | subnet1                 | 41ebfff9-df23-4690-bef9-a0e76f618947 | 10.10.1.0/24        |
+--------------------------------------+-------------------------+--------------------------------------+---------------------+

用法

通过将 VIM 类型指定为选项,将生成对应于 Tacker v2 API 的 VNF 包示例。

此工具支持以下 VIM 类型

  • ETSINFV.OPENSTACK_KEYSTONE.V_3

  • ETSINFV.KUBERNETES.V_1

  • ETSINFV.HELM.V_3

请参阅帮助消息以获取用法。

注意

在此文档中,TACKER_ROOT 是服务器上 tacker 仓库的根目录。

$ cd TACKER_ROOT/tools
$ python3 gen_vnf_pkg.py -h
usage: gen_vnf_pkg.py [-h] -t VIM_TYPE [-c VIM_CONF] [--vim-id VIM_ID] [--vim-name VIM_NAME]

Create VNF Package zip and parameter files

options:
  -h, --help            show this help message and exit
  -t VIM_TYPE, --type VIM_TYPE
                        vim type (lowercase is also available)
                        * ETSINFV.OPENSTACK_KEYSTONE.V_3
                        * ETSINFV.KUBERNETES.V_1
                        * ETSINFV.HELM.V_3
  -c VIM_CONF, --vim-config VIM_CONF
                        Path of VIM config file for specifying the VIM
  --vim-id VIM_ID       VIM ID (Only for OpenStack and overwrittenby `--vim-config`)
  --vim-name VIM_NAME   Name of VIM (Only for OpenStack and overwrittenby `--vim-config`)

注意

此工具需要一些 Tacker 模块,因此您需要在安装了 Tacker 的环境中运行它。

如果您使用 devstack 设置了 Tacker,可以从虚拟环境运行该工具。在使用该工具之前,请按如下方式激活它。

$ source ~/data/venv/bin/activate
(venv) $ python3 $TACKER_ROOT/tools/gen_vnf_pkg.py -h

或者,在没有 devstack 环境的情况下,从 tox 定义的 gen-pkg 环境运行该工具。

$ tox -e gen-pkg -- -h

显示生成的 zip 和请求文件以及包含在生成的 zip 文件中的文件名的三个输出示例。

$ python3 gen_vnf_pkg.py -t ETSINFV.OPENSTACK_KEYSTONE.V_3
Generating package and request files in './output/userdata_standard/' ...
VNF package: userdata_standard.zip
Request files: create_req, terminate_req, instantiate_req, scale_out_req, scale_in_req, heal_req, change_ext_conn_req, update_req
Contents of the VNF package:
File Name                                             Modified             Size
BaseHOT/                                       2024-08-28 05:36:20            0
Definitions/                                   2025-01-29 10:58:48            0
Files/                                         2025-01-29 10:58:48            0
Scripts/                                       2024-08-28 05:36:20            0
TOSCA-Metadata/                                2024-08-28 05:36:20            0
UserData/                                      2025-01-29 10:58:48            0
BaseHOT/simple/                                2024-08-28 05:36:20            0
BaseHOT/simple/nested/                         2024-08-28 05:36:20            0
BaseHOT/simple/sample3.yaml                    2024-08-28 05:36:20         1694
BaseHOT/simple/nested/VDU1.yaml                2024-08-28 05:36:20         1179
BaseHOT/simple/nested/VDU2.yaml                2024-08-28 05:36:20         1725
UserData/userdata_standard.py                  2025-01-29 10:58:48        20805
Files/images/                                  2025-01-29 10:58:48            0
Files/images/cirros-0.5.2-x86_64-disk.img      2025-01-29 10:58:48     16300544
Scripts/coordinate_vnf.py                      2024-08-28 05:36:20         2785
Scripts/sample_script.py                       2024-08-28 05:36:20         1964
Definitions/etsi_nfv_sol001_common_types.yaml  2025-01-29 10:58:48         9093
Definitions/etsi_nfv_sol001_vnfd_types.yaml    2025-01-29 10:58:48        67046
Definitions/v2_sample3_types.yaml              2025-01-29 10:58:48         1630
Definitions/v2_sample3_top.vnfd.yaml           2025-01-29 10:58:48          887
Definitions/v2_sample3_df_simple.yaml          2025-01-29 10:58:48        10149
TOSCA-Metadata/TOSCA.meta                      2024-08-28 05:36:20          133
$ python3 gen_vnf_pkg.py -t ETSINFV.KUBERNETES.V_1
Generating package and request files in './output/test_instantiate_cnf_resources/' ...
VNF package: test_instantiate_cnf_resources.zip
Request files: create_req, max_sample_instantiate, max_sample_terminate, max_sample_scale_out, max_sample_scale_in, max_sample_heal
Contents of the VNF package:
File Name                                             Modified             Size
Definitions/                                   2025-01-29 11:02:26            0
Files/                                         2024-08-28 05:36:20            0
Scripts/                                       2024-08-28 05:36:20            0
TOSCA-Metadata/                                2024-12-19 07:57:02            0
Files/kubernetes/                              2024-12-19 07:57:02            0
Files/kubernetes/limit-range.yaml              2024-08-28 05:36:20          165
Files/kubernetes/storage-class_pv_pvc.yaml     2024-08-28 05:36:20          697
Files/kubernetes/job.yaml                      2024-12-19 07:57:02          554
Files/kubernetes/controller-revision.yaml      2024-08-28 05:36:20          127
Files/kubernetes/subject-access-review.yaml    2024-08-28 05:36:20          188
Files/kubernetes/replicaset_service_secret.yaml 2024-08-28 05:36:20          950
Files/kubernetes/bindings.yaml                 2024-08-28 05:36:20          150
Files/kubernetes/namespace.yaml                2024-08-28 05:36:20           54
Files/kubernetes/deployment_fail_test.yaml     2024-08-28 05:36:20          537
Files/kubernetes/statefulset.yaml              2024-08-28 05:36:20          825
Files/kubernetes/config-map.yaml               2024-08-28 05:36:20          120
Files/kubernetes/horizontal-pod-autoscaler.yaml 2024-08-28 05:36:20          280
Files/kubernetes/persistent-volume-0.yaml      2024-08-28 05:36:20          281
Files/kubernetes/token-review.yaml             2024-08-28 05:36:20          291
Files/kubernetes/persistent-volume-1.yaml      2024-08-28 05:36:20          285
Files/kubernetes/pod-template.yaml             2024-12-19 07:57:02          923
Files/kubernetes/deployment.yaml               2024-08-28 05:36:20          536
Files/kubernetes/local-subject-access-review.yaml 2024-08-28 05:36:20          224
Files/kubernetes/self-subject-access-review_and_self-subject-rule-review.yaml 2024-08-28 05:36:20          275
Files/kubernetes/resource-quota.yaml           2024-08-28 05:36:20          158
Files/kubernetes/clusterrole_clusterrolebinding_SA.yaml 2024-08-28 05:36:20          578
Files/kubernetes/storage-class.yaml            2024-08-28 05:36:20          153
Files/kubernetes/role_rolebinding_SA.yaml      2024-08-28 05:36:20          559
Files/kubernetes/multiple_yaml_priority-class.yaml 2024-08-28 05:36:20          155
Files/kubernetes/pod.yaml                      2024-12-19 07:57:02          291
Files/kubernetes/multiple_yaml_lease.yaml      2024-08-28 05:36:20          155
Files/kubernetes/daemon-set.yaml               2024-08-28 05:36:20          417
Files/kubernetes/multiple_yaml_network-policy.yaml 2024-08-28 05:36:20          277
Scripts/sample_script.py                       2024-08-28 05:36:20         1964
Definitions/etsi_nfv_sol001_common_types.yaml  2025-01-29 11:02:26         9093
Definitions/sample_cnf_types.yaml              2025-01-29 11:02:26         1538
Definitions/etsi_nfv_sol001_vnfd_types.yaml    2025-01-29 11:02:26        67046
Definitions/sample_cnf_df_simple.yaml          2025-01-29 11:02:26         6771
Definitions/sample_cnf_top.vnfd.yaml           2025-01-29 11:02:26          887
TOSCA-Metadata/TOSCA.meta                      2024-12-19 07:57:02         4661
$ python3 gen_vnf_pkg.py -t ETSINFV.HELM.V_3
Generating package and request files into './output/helm_instantiate/' ...
VNF package: test_helm_instantiate.zip
Request files: create_req, helm_instantiate_req, helm_terminate_req, helm_scale_out, helm_scale_in, helm_heal
Contents of the VNF package:
File Name                                             Modified             Size
Definitions/                                   2025-01-29 11:11:48            0
Files/                                         2024-08-28 05:36:20            0
Scripts/                                       2024-08-28 05:36:20            0
TOSCA-Metadata/                                2024-08-28 05:36:20            0
Files/kubernetes/                              2024-08-28 05:36:20            0
Files/kubernetes/test-chart/                   2024-08-28 05:36:20            0
Files/kubernetes/test-chart-0.1.0.tgz          2024-08-28 05:36:20         2882
Files/kubernetes/test-chart/templates/         2024-08-28 05:36:20            0
Files/kubernetes/test-chart/values.yaml        2024-08-28 05:36:20         1409
Files/kubernetes/test-chart/.helmignore        2024-08-28 05:36:20          349
Files/kubernetes/test-chart/Chart.yaml         2024-08-28 05:36:20          125
Files/kubernetes/test-chart/templates/NOTES.txt 2024-08-28 05:36:20         1554
Files/kubernetes/test-chart/templates/serviceaccount.yaml 2024-08-28 05:36:20          326
Files/kubernetes/test-chart/templates/deployment_vdu2.yaml 2024-08-28 05:36:20         1519
Files/kubernetes/test-chart/templates/deployment_vdu1.yaml 2024-08-28 05:36:20         1598
Files/kubernetes/test-chart/templates/_helpers.tpl 2024-08-28 05:36:20         1812
Files/kubernetes/test-chart/templates/service.yaml 2024-08-28 05:36:20          370
Scripts/sample_script.py                       2024-08-28 05:36:20         1964
Definitions/etsi_nfv_sol001_common_types.yaml  2025-01-29 11:11:48         9093
Definitions/sample_cnf_types.yaml              2025-01-29 11:11:48         1538
Definitions/etsi_nfv_sol001_vnfd_types.yaml    2025-01-29 11:11:48        67046
Definitions/sample_cnf_df_simple.yaml          2025-01-29 11:11:48         4770
Definitions/sample_cnf_top.vnfd.yaml           2025-01-29 11:11:48          887
TOSCA-Metadata/TOSCA.meta                      2024-08-28 05:36:20          285

此工具在输出目录中为每个 VIM 类型生成一个 VNF 包 zip 文件和一个示例请求文件。

$ ls output/
helm_instantiate  test_instantiate_cnf_resources  userdata_standard

$ ls output/userdata_standard/
change_ext_conn_req  create_req  heal_req  instantiate_req  scale_in_req
scale_out_req  terminate_req  update_req  userdata_standard.zip

$ ls output/test_instantiate_cnf_resources/
create_req  max_sample_heal  max_sample_instantiate  max_sample_scale_in
max_sample_scale_out  max_sample_terminate  test_instantiate_cnf_resources.zip

$ ls output/helm_instantiate
create_req  helm_heal  helm_instantiate_req  helm_scale_in  helm_scale_out
helm_terminate_req  test_helm_instantiate.zip

对于以下请求文件,endpointssl_ca_certbearer_token 需要更改为您自己的 k8s 集群信息,或者使用通过 -c 选项指定的 VIM 配置文件进行替换。

  • ETSINFV.KUBERNETES.V_1 的 max_sample_instantiate

  • ETSINFV.HELM.V_3 的 helm_instantiate_req

注意

ssl_ca_cert 需要显示如下在一行上。

"ssl_ca_cert": "-----BEGIN CERTIFICATE-----\nMIIDB...BH\n3bkddspNikO1\n-----END CERTIFICATE-----\n"

请注意,换行符已更改为 ‘\n’。

您还可以在运行此工具之前,将您自己的 k8s 集群信息设置为 auth_urlbearer_tokenssl_ca_cert 在 gen_vnf_pkg.py 中。

注意

如果您使用已注册的 VIM,请按如下方式修改 vimConnectionInfo。

"vimConnectionInfo": {
  "vim1": {
    "vimId": "REGISTERED_VIM_ID",
    "vimType": "VIM_TYPE"
  }
}

对于以下请求文件,vnfcInstanceId 需要更改为目标 vnfcInfo id。

  • ETSINFV.OPENSTACK_KEYSTONE.V_3 的 heal_req

  • ETSINFV.KUBERNETES.V_1 的 max_sample_heal

  • ETSINFV.HELM.V_3 的 helm_heal

对于以下请求文件,vnfdId 需要更改为目标 VNFD id。

  • ETSINFV.OPENSTACK_KEYSTONE.V_3 的 update_req

注意

此工具基于以下 FT 中使用的内容生成一个 zip 文件和一个请求文件,作为示例 VNF 包。

请注意,如果 FT 发生更改,此工具的输出也可能会发生更改。