Virt Driver 对象支持 (Juno 工作)¶
https://blueprints.launchpad.net/nova/+spec/virt-objects-juno
此蓝图代表 Juno 中围绕将 virt 驱动程序迁移到使用对象而不是原始 conductor 方法所需要完成的剩余工作。 这很重要,因为对象提供了实际数据的版本控制,这支持我们的升级目标。
问题描述¶
Nova virt 驱动程序仍然使用 conductor 方法发送和接收未版本化的数据包,这在升级期间存在问题,因为数据的格式在不同版本之间发生了变化。
提议的变更¶
将 virt 驱动程序中对原始 conductor 方法的使用迁移到对象。 例如,考虑以下情况
instance = conductor.instance_get_by_uuid(context, uuid)
conductor.instance_update(context, instance['uuid'],
host='foo')
将变为
instance = instance_obj.Instance.get_by_uuid(context, uuid)
instance.host = 'foo'
instance.save()
使用对象机制允许较旧的代码与较新的代码交互,并根据需要降级实例对象的格式。
备选方案¶
这是项目接受的方向来解决此问题。 然而,替代方案将是
不解决问题并继续使用未版本化的数据
尝试在任何数据(包括嵌套的下游数据)发生变化时强制执行方法版本升级
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
无。
通知影响¶
通常,将代码转换为使用对象不会影响通知。 然而,有时,通知的发出嵌入到对象方法中,以实现关于何时以及如何发送通知的更高一致性。 在这项工作中,这种情况预计不会发生,但它始终是一种可能性。
其他最终用户影响¶
无。
性能影响¶
无。
其他部署者影响¶
迁移到对象增强了部署者逐步推出新代码的能力。 然而,对于他们来说,这在很大程度上是透明的。
开发人员影响¶
这是正常的重构,因此影响很小。 通常,基于对象代码更易于使用,从长远来看,这对开发人员来说是一项胜利。
实现¶
负责人¶
- 主要负责人
danms
工作项¶
以下 virt 驱动程序方法仍需关注
attach_volume
check_can_live_migrate_destination
check_can_live_migrate_source
check_instance_shared_storage_local
cleanup
default_device_names_for_instance
default_root_device_name
destroy
detach_volume
dhcp_options_for_instance
ensure_filtering_rules_for_instance
get_diagnostics
get_info
get_volume_connector
inject_file
inject_network_info
live_migration
macs_for_instance
post_live_migration
pre_live_migration
refresh_instance_security_rules
reset_network
rollback_live_migration_at_destination
unfilter_instance
unplug_vifs
依赖项¶
此蓝图与以下蓝图之间存在交叉依赖关系
有时,virt 驱动程序需要从计算管理器接收一个对象,因此完成 virt 驱动程序方法的转换也需要转换调用的计算管理器方法。
测试¶
通常,当这种情况发生时,单元测试需要进行最少的更改,具体取决于测试的结构。 理想情况下,它们已经模拟了数据库调用,这意味着对对象的更改是透明的。 实际上,这通常意味着对测试进行微调以返回完整的数据模型等。
文档影响¶
无。