增强基于 NFV SOL014 的 Heat 输入¶
https://blueprints.launchpad.net/tacker/+spec/support-hot-according-to-nfv-sol014
本规范增强了 Tacker 支持的参数,这些参数映射到 OpenStack 的 Heat 编排模板 (HOT) [1]。本规范添加了支持的参数,并重点关注如何将它们映射到 HOT 以实例化 VNF。
问题描述¶
ETSI NFV SOL014 [2] 规定了一组用于虚拟化资源管理中信息交换的数据模型。它还重点关注了使用 HOT 实现定义的各种接口的数据模型示例。
虽然 Tacker 已经使用 HOT 实现了 LCM 操作 [3],但其支持的参数有限。
进一步支持 HOT 中的 SOL014 参数,使 Tacker 作为通用 VNFM 更加灵活和强大。
提议的变更¶
本规范使 Tacker 能够支持 Heat 输入数据中的更多参数。为了实例化 VNF,Tacker 将根据 VNF 描述符 (VNFD)、InstantiateVnfRequest 操作中的信息以及 SOL001 [4] 和 SOL003 [5] 中定义的 Grant 操作生成 Heat 的输入数据。
以下参数将被支持。
类别 |
参数 |
VNFD |
API - InstantiateVnfRequest |
API - Grant |
Heat |
支持于 (W) |
|---|---|---|---|---|---|---|
计算 |
name |
tosca.nodes.nfv.Vdu.Compute |
N/A |
N/A |
OS::Nova::Server > properties > name |
NO |
计算 |
风味 |
tosca.nodes.nfv.Vdu.Compute |
N/A |
vimAssets |
OS::Nova::Server > properties > flavor |
YES |
计算 |
镜像 |
tosca.artifacts.nfv.SwImage |
N/A |
vimAssets |
OS::Nova::Server > properties > image |
YES |
计算 |
desired_capacity |
tosca.policies.nfv.InstantiationLevels, tosca.policies.nfv.VduScalingAspectDeltas, tosca.policies.nfv.VduInitialDelta |
N/A |
N/A |
OS::Heat::AutoScalingGroup > properties > desired_capacity |
NO |
计算 |
max_size |
tosca.nodes.nfv.Vdu.Compute |
N/A |
N/A |
OS::Heat::AutoScalingGroup > properties > max_size |
NO |
计算 |
min_size |
tosca.nodes.nfv.Vdu.Compute |
N/A |
N/A |
OS::Heat::AutoScalingGroup > properties > min_size |
NO |
计算 |
scaling_adjustment |
N/A |
addtionalParams |
addtionalParams |
OS::Heat::ScalingPolicy > properties > scaling_adjustment |
NO |
网络 |
ext_network |
N/A |
extVirtualLinks |
extVirtualLinks |
OS::Neutron::Port > properties > network |
YES |
网络 |
ext_subnet |
N/A |
extVirtualLinks |
extVirtualLinks |
OS::Neutron::Subnet > properties > name |
YES |
网络 |
ext_ip_address |
N/A |
extVirtualLinks |
extVirtualLinks |
OS::Neutron::Port > properties > fixed_ips > ip_address |
YES |
网络 |
ext_managed_network |
tosca.nodes.nfv.VnfVirtualLink |
extManagedVirtualLinks |
extManagedVirtualLinks |
OS::Neutron::Port > properties > network |
NO |
网络 |
ext_managed_subnet |
N/A |
addtionalParams |
addtionalParams |
OS::Neutron::Subnet > properties > name |
NO |
网络 |
ip_address |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::Port > properties > fixed_ips > ip_address |
NO |
网络 |
gateway_ip |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::Subnet > properties > gateway_ip |
NO |
网络 |
enable_dhcp |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::Subnet > properties > enable_dhcp |
NO |
网络 |
mac_address |
N/A |
extVirtualLinks |
extVirtualLinks |
OS::Neutron::Port > properties > mac_address |
NO |
网络 |
port_id |
tosca.nodes.nfv.VduCp |
extVirtualLinks, extManagedVirtualLinks |
extVirtualLinks, extManagedVirtualLinks |
OS::Neutron::FloatingIP > properties > port_id |
NO |
网络 |
network_type |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::ProviderNet > propterties > network_type, OS::Neutron::Segment > propterties > network_type |
NO |
网络 |
binding:vnic_type |
tosca.nodes.nfv.VduCp |
N/A |
N/A |
OS::Neutron::Port > properties > binding:vnic_type |
NO |
网络 |
max_kbps |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::QoSBandwidthLimitRule > properties > max_kbps |
NO |
网络 |
min_kbps |
tosca.nodes.nfv.VnfVirtualLink |
N/A |
N/A |
OS::Neutron::QoSMinimumBandwidthRule > properties > min_kbps |
NO |
存储 |
volume_type |
N/A |
addtionalParams |
addtionalParams |
OS::Cinder::Volume > properties > volume_type |
NO |
存储 |
volume_size |
tosca.nodes.nfv.Vdu.VirtualBlockStorage |
N/A |
N/A |
OS::Nova::Server > properties > block_device_mapping > volume_size |
NO |
放置 |
server_availability_zone |
N/A |
N/A |
zones |
OS::Nova::Server > properties > availability_zone |
YES |
放置 |
volume_availability_zone |
N/A |
addtionalParams |
addtionalParams |
OS::Cinder::Volume > properties > availability_zone |
NO |
放置 |
ServerGroup |
tosca.policies.nfv.AffinityRule, tosca.policies.nfv.AntiAffinityRule |
N/A |
N/A |
OS::Nova::ServerGroup > properties > policies |
NO |
其他参数 |
N/A |
addtionalParams |
N/A |
其他参数 |
NO |
为了支持标准 VNF 实例化操作中未指定的任意数据类型,Tacker 将使用 InstantiateVnfRequest 中的 additionalParams 提供几个操作。
以下描述了包含 additionalParams 的输入数据的示例。
注意
Tacker 已经支持 InstantiateVnfRequest 中的 additionalParams。但是,additinalParamas 仅用作关于 LCM 操作用户数据的标志。本规范将通过允许设置由消费者定义的所有数据来扩展 additionalParams 的使用。
{
"flavourId": "flavour_id",
"instantiationLevelId": "instantiation_level_id",
"extVirtualLinks": [
{
"resourceId": "a77119b7-fcaa-47e5-955d-29f37d5603d4",
"id": "dc144409-bc93-48b9-be0a-7d737c01a88b",
"extCps": [
{
"cpdId": "CP_0",
"cpConfig": [
{
"cpProtocolData": [
{
"layerProtocol": "IP_OVER_ETHERNET",
"ipOverEthernet": {
"ipAddresses": [
{
"type": "IPV4",
"macAddress": "fa:16:3e:aa:bb:cc",
"fixedAddresses": [
"192.168.1.1"
]
}
]
}
}
]
}
]
}
]
}
],
"additionalParams": {
"lcm-operation-user-data": "./UserData/lcm_user_data.py",
"lcm-operation-user-data-class": "SampleUserData",
"Cp1Network": "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b",
"Cp1IpAddress": "192.168.10.1",
"Cp1MacAddress": "fa:16:3e:aa:bb:dd"
}
}
当 Tacker 调用 Heat 中的 create-stack API 时,将生成映射到 HOT 的输入数据。为了满足各种消费者的需求,Tacker 将提供三种选项来描述 HOT 并设置相应的 additionalParams。以下数据模型显示了每种选项的示例 HOT 和 additionalParams。
在 nfv 数据结构内设置从 additionalParams 获取的参数。
HOT
resources: VDU_0: type: OS::Nova::Server properties: name: VDU_0 flavor: { get_param: [ nfv, VDU, VDU_0, flavor ] } block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }] availability_zone: nova networks: - port: { get_resource: CP_0 } - port: { get_resource: CP_1 } CP_0: type: OS::Neutron::Port properties: network: { get_param: [ nfv, CP, CP_0, network ] } fixed_ips: - ip_address: [ nfv, CP, CP_0, fixed_ips, ip_address, 0 ] mac_address: { get_param: [ nfv, CP, CP_0, mac_address ] } CP_1: type: OS::Neutron::Port properties: network: { get_param : [ nfv, Cp1Network ] } fixed_ips: - ip_address: { get_param: [ nfv, Cp1IPAddress ] } mac_address: { get_param: [ nfv, Cp1MacAddress ] } VDU_0_Storage: type: OS::Cinder::Volume deletion_policy: Delete properties: name: VDU_0_Storage image: { get_param: [ nfv, VDU, VDU_0_Storage, image ] } size: 30
参数
{ "parameters": { "nfv": { "VDU": { "VDU_0": {"flavor": "VDU_Flavor"}, "VDU_0_Storage": {"image": "VDU_image"} }, "CP": { "CP_0": { "network": "a77119b7-fcaa-47e5-955d-29f37d5603d4", "mac_address": "fa:16:3e:aa:bb:cc", "fixed_ips": [ { "ip_address": "192.168.1.1" } ] } }, "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b", "Cp1IPAddress": "192.168.10.1", "Cp1MacAddress": "fa:16:3e:aa:bb:dd" } } }
在 nfv 数据结构外部设置从 additionalParams 获取的参数。
HOT
resources: VDU_0: type: OS::Nova::Server properties: name: VDU_0 flavor: { get_param: [ nfv, VDU, VDU_0, flavor ] } block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }] availability_zone: nova networks: - port: { get_resource: CP_0 } - port: { get_resource: CP_1 } CP_0: type: OS::Neutron::Port properties: network: { get_param: [ nfv, CP, CP_0, network ] } fixed_ips: - ip_address: [ nfv, CP, CP_0, fixed_ips, ip_address, 0 ] mac_address: { get_param: [ nfv, CP, CP_0, mac_address ] } CP_1: type: OS::Neutron::Port properties: network: { get_param : Cp1Network } fixed_ips: - ip_address: { get_param: Cp1IPAddress } mac_address: { get_param: Cp1MacAddress } VDU_0_Storage: type: OS::Cinder::Volume deletion_policy: Delete properties: name: VDU_0_Storage image: { get_param: [ nfv, VDU, VDU_0_Storage, image ] } size: 30
参数
{ "parameters": { "nfv": { "VDU": { "VDU_0": {"flavor": "VDU_Flavor"}, "VDU_0_Storage": {"image": "VDU_image"} }, "CP": { "CP_0": { "network": "a77119b7-fcaa-47e5-955d-29f37d5603d4", "mac_address": "fa:16:3e:aa:bb:cc", "fixed_ips": [ { "ip_address": "192.168.1.1" } ] } } } "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b", "Cp1IPAddress": "192.168.10.1", "Cp1MacAddress": "fa:16:3e:aa:bb:dd" } }
在 nfv 数据结构外部设置所有参数。
注意
在此选项中,nfv 数据结构对于 HOT 和输入数据不是必需的。
HOT
resources: VDU_0: type: OS::Nova::Server properties: name: VDU_0 flavor: { get_param: nfv_VDU_VDU_0_flavor } block_device_mapping_v2: [{ device_name: "vda", volume_id : { get_resource : VDU_0_Storage } }] availability_zone: nova networks: - port: { get_resource: CP_0 } - port: { get_resource: CP_1 } CP_0: type: OS::Neutron::Port properties: network: { get_param : nfv_CP_CP_0_network } fixed_ips: - ip_address: { get_param : nfv_CP_CP_0_fixed_ips_ip_address_0 } mac_address: { get_param : nfv_CP_CP_0_fixed_ips_ip_mac_address } CP_1: type: OS::Neutron::Port properties: network: { get_param : Cp1Network } fixed_ips: - ip_address: { get_param: Cp1IPAddress } mac_address: { get_param: Cp1MacAddress } VDU_0_Storage: type: OS::Cinder::Volume deletion_policy: Delete properties: name: VDU_0_Storage image: { get_param: nfv_VDU_VOU_0_Storage_image } size: 30
参数
{ "parameters": { "nfv_VDU_VDU_0_flavor": "VDU_Flavor", "nfv_VDU_VOU_0_Storage_image": "VDU_image", "nfv_CP_CP_0_network" : "a77119b7-fcaa-47e5-955d-29f37d5603d4", "nfv_CP_CP_0_fixed_ips_ip_address_0": "192.168.1.1", "nfv_CP_CP_0_fixed_ips_ip_mac_address": "fa:16:3e:aa:bb:cc", "Cp1Network" : "452e9c2f-a0b4-401e-bdea-5007ce1dfd2b", "Cp1IPAddress": "192.168.10.1", "Cp1MacAddress": "fa:16:3e:aa:bb:dd" } }
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
工作项¶
添加新的单元和功能测试。
添加描述基于 SOL014 的 VNF 包的新文档。
增强实现以支持 LCM 操作用户数据中的基于 SOL014 的参数和 additionalParams。
依赖项¶
无
测试¶
将为 VNF 生命周期管理添加单元和功能测试用例。
文档影响¶
将向 Tacker 用户指南添加描述基于 SOL014 的 VNF 包的新文档。