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()

使用对象机制允许较旧的代码与较新的代码交互,并根据需要降级实例对象的格式。

备选方案

这是项目接受的方向来解决此问题。 然而,替代方案将是

  1. 不解决问题并继续使用未版本化的数据

  2. 尝试在任何数据(包括嵌套的下游数据)发生变化时强制执行方法版本升级

数据模型影响

无。

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 驱动程序方法的转换也需要转换调用的计算管理器方法。

测试

通常,当这种情况发生时,单元测试需要进行最少的更改,具体取决于测试的结构。 理想情况下,它们已经模拟了数据库调用,这意味着对对象的更改是透明的。 实际上,这通常意味着对测试进行微调以返回完整的数据模型等。

文档影响

无。

参考资料