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网络subnet0net0 的子网net1网络subnet1net1 的子网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
对于以下请求文件,endpoint、ssl_ca_cert 和 bearer_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_url、bearer_token 和 ssl_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 包。
ETSINFV.OPENSTACK_KEYSTONE.V_3: samples/tests/functional/sol_v2_common/userdata_standard
ETSINFV.KUBERNETES.V_1: samples/tests/functional/sol_kubernetes_v2/test_instantiate_cnf_resources
ETSINFV.HELM.V_3: samples/tests/functional/sol_kubernetes_v2/test_helm_instantiate
请注意,如果 FT 发生更改,此工具的输出也可能会发生更改。