移除迁移 API 中的共享存储标志

https://blueprints.launchpad.net/nova/+spec/remove-shared-storage-flag-in-evacuate-api

目前,迁移 API 需要管理员提供 onSharedStorage 标志,但此信息也可以由虚拟驱动程序检测到。为了减轻管理员的工作负担,并允许更轻松地自动化迁移任务,本规范建议在一个新的微版本中从 API 中移除 onSharedStorage 标志。

问题描述

用例

当需要从故障主机迁移实例时,管理员必须检查实例是否存储在共享存储上,才能正确发出迁移命令。管理员希望依赖虚拟驱动程序来检测实例数据是否在目标主机上可用,并在可能的情况下将其用于迁移。外部自动迁移引擎也希望让 Nova 决定实例是否可以在不重新构建的情况下迁移到目标主机。

提议的变更

在计算管理器中,在 rebuild_instance 函数中,on_shared_storage 标志被设置为可选,通过之前的规范,现在可以从迁移 API 中移除 onSharedStorage 参数。

迁移 API 支持可选地提供新的管理员密码。这使得解决方案变得更加复杂。Nova 只能在已经知道迁移的目标主机后才能确定实例是否在共享存储上,这意味着只有在调度器选择了新的主机之后,因为 Nova 需要检查实例的磁盘是否从目标主机可见。但是,迁移 API 调用会在响应中返回新的管理员密码。如果移除了 onSharedStorage 标志,则无法完全保留此逻辑。

如果移除 onSharedStorage 标志,则需要考虑两种情况

  • 客户端未提供管理员密码。Nova 将生成一个新的密码。如果 Nova 发现实例在共享存储上,则实例将被重新启动,并将使用与之前相同的管理员密码。如果 Nova 发现实例不在共享存储上,则实例将被重新创建,并将使用新生成的管理员密码。

  • 客户端提供管理员密码。如果 Nova 发现实例在共享存储上,则客户端提供的密码将被静默忽略。如果 Nova 发现实例不在共享存储上,则提供的密码将被注入到重新创建的实例中。

本规范建议

  • 移除 /v2.1/{tenant_id}/servers/{server_id}/action API 的 onSharedStorage 参数

  • 从 API 调用的响应体中移除 adminPass。管理员仍然可以通过 /v2.1/{tenant_id}/servers/{server_id}/os-server-password API 访问生成的密码

备选方案

对于自动化用例,另一种选择是在理论上的外部迁移引擎中重新实现检查实例在磁盘上的可用性。但是,这将是明显的代码重复,因为 Nova 已经在虚拟驱动程序中包含了此检查。

数据模型影响

REST API 影响

/v2.1/{tenant_id}/servers/{server_id}/action API 的 onSharedStorage 参数将被移除。因此,相关的 JSON 模式将更改为以下内容

{
'type': 'object',
'properties': {
    'evacuate': {
        'type': 'object',
        'properties': {
            'host': parameter_types.hostname,
            'adminPass': parameter_types.admin_password,
        },
        'required': [],
        'additionalProperties': False,
    },
},
'required': ['evacuate'],
'additionalProperties': False,
}

此外,adminPass 将从响应体中移除。这将使响应体为空,因此 API 响应将不再返回响应体。

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

balazs-gibizer

工作项

  • 从迁移 REST API 中移除 onSharedStorage

  • 移除 adminPass,因此移除迁移 API 的整个响应体

依赖项

测试

将提供单元和功能测试覆盖。

文档影响

需要更新管理员指南,以反映迁移函数的新行为。

参考资料

[1] 使计算管理器中的 on_shared_storage 可选的 bp

Liberty https://blueprints.launchpad.net/nova/+spec/optional-on-shared-storage-flag-in-rebuild-instance

[2] 使计算管理器中的 on_shared_storage 可选的代码

Liberty https://review.openstack.org/#/c/197951/

历史

修订版

发布名称

描述

Mitaka

引入