启用更新 VNF 参数¶
https://blueprints.launchpad.net/tacker/+spec/reservation-vnfm
本提案旨在支持更新已创建的 VNF 的参数。
问题描述¶
当前的 Tacker 仅支持更新 VNF 的 config 属性 [1],不支持更新 VNF 的 param_values。因此,如果操作员想要更新参数,则必须重新创建 VNF。本规范旨在实现参数更新,而无需重新创建 VNF。
用例¶
例如,某些 VNF 部署在有限的基础设施资源上,优先级不同。由于某些即将到来的活动(如音乐会、节日或体育赛事)的需求增加,更高优先级的 VNF 可能会被期望进行扩展。更高优先级 VNF 的操作员需要为其 VNF 预留资源,以防止其他 VNF 消耗所需的资源。
当前 Tacker 支持的资源预留功能 [2] 允许通过应用在预留资源时发出的 reservation-id 来在特定时期内扩展资源。由于此类大型活动通常会多次发生,操作员需要更新 reservation-id。通过引入此参数更新功能,操作员可以在不重新创建 VNF 的情况下为这些活动做好准备。
提议的变更¶
在 vnf update 中启用参数更新。
向 openstack vnf set 命令添加新的参数 –param-file。
openstack vnf set --param-file PARAM-FILE <VNF>
parameters 这里指的是 VNFD 中的输入参数。因此,用户必须在创建 VNF 之前在 VNFD 中参数化他们稍后想要更新的内容。例如,参数包括 flavor、image、network 等,如下所示。详细信息请参见 [3]。
:caption: Example Parameterized VNFD
tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0
description: VNF TOSCA template with input parameters
metadata:
template_name: sample-tosca-vnfd
topology_template:
inputs:
image_name:
type: string
description: Image Name
flavor:
type: string
description: Flavor Information
network:
type: string
description: management network
node_templates:
VDU1:
type: tosca.nodes.nfv.VDU.Tacker
properties:
image: {get_input: image_name}
flavor: {get_input: flavor}
availability_zone: nova
...
VL1:
type: tosca.nodes.nfv.VL
properties:
network_name: {get_input: network}
vendor: Tacker
...
参数的更新值在参数文件中描述。
:caption: Example parameter file
image_name: cirros-0.4.0-x86_64-disk
flavor: m1.tiny
network: net_mgmt
内部更新过程
在参数更新时,Tacker 会使用设置 True 的现有标志来发出 Heat stack 更新,以保留不包含更新参数的堆栈资源。参数更新是否会导致堆栈资源的重新创建取决于更新的属性。例如,更新 OS::Nova::Server 资源类型的 image 属性会导致其 VM 被替换,但 name 属性不会。详细信息请参见 [4] [5]。
# run stack update
stack_update_param = {
'parameters': update_values,
'existing': True}
heatclient.update(vnf_id, **stack_update_param)
各种错误处理
用户可以使用 config 或参数文件,但不能同时使用两者。这是因为更新参数可能会在 VM 重新创建时导致 config 更新失败。
class UpdateVNF(command.ShowOne):
_description = _("Update a given VNF.")
def get_parser(self, prog_name):
parser = super(UpdateVNF, self).get_parser(prog_name)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(
'--config-file',
help=_('YAML file with VNF configuration'))
group.add_argument(
'--config',
help=_('Specify config YAML data'))
group.add_argument(
'--param-file',
help=_('Specify parameter yaml file'))
parser.add_argument(
_VNF,
metavar="<VNF>",
help=_("VNF to update (name or ID)"))
return parser
:caption: Example error message
openstack vnf set --param-file PARAM-FILE --config CONFIG <VNF>
openstack vnf set: error: argument --config: not allowed with argument --param-file
如果 vnf set 命令传递的参数值与当前值之间没有差异,Tacker 会取消参数更新并显示警告消息。这可以防止不必要的更新过程。
# check update values
update_values = {}
for key, value in update_param_dict.items():
if update_param_dict[key] != param_dict[key]:
update_values[key] = value
if not update_values:
raise vnfm.VNFUpdateInvalidInput(
reason="WARNING: parameter is same value")
:caption: Example warning message
openstack vnf set --param-file PARAM-FILE <VNF>
WARNING: parameter is same value
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
将“param_values”添加到 Update VNF API 的“请求参数”中。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Hiroyuki Jo <jo.hiroyuki@lab.ntt.co.jp>
工作项¶
将“param-file”参数添加到 python-tackerclient 中的 vnf set 命令中。
向 Tacker 添加一个函数,用于获取现有参数和新参数之间的差异。
向 Tacker 添加一个函数,用于使用新参数调用堆栈更新
单元测试
功能测试
Update documentation
依赖项¶
无
测试¶
将添加单元和功能测试用例,用于通过将新参数应用于现有 VNF 来更新 VNF
文档影响¶
将“更新 VNF”添加到 tacker/doc/source/user/vnfm_usage_guide.rst