允许恢复到特定主机

https://blueprints.launchpad.net/nova/+spec/unshelve-to-host

此蓝图建议允许管理员指定 host 来恢复一个已搁置的卸载服务器。

问题描述

当前,实例只能恢复到特定的可用区。该提案旨在扩展恢复行为,允许实例恢复到特定的主机。

用例

作为 PROJECT_ADMIN,我希望在对已搁置卸载的实例执行恢复操作时指定目标主机。

提议的变更

添加一个新的微版本来扩展恢复 API 的行为,以支持特定的目标主机。

host 属性添加到 POST /server/uuid/action 的恢复请求体中。

添加 2 个检查

  • 确保用户是 PROJECT_ADMIN。

  • 确保实例状态为 shelved_offloaded

随着新微版本的引入,更改恢复 API 的调度和请求规范 (reqspec) 行为。

当前行为

启动

卸载后恢复

结果

无 AZ

无 AZ

自由调度,reqspec.AZ 保持 None

无 AZ

AZ

在 AZ 中调度,将 reqspec.AZ 更新为请求的 AZ

使用 AZ

无 AZ

在原始 AZ 中调度,保持 reqspec 指向该 AZ

使用 AZ

AZ

调度到新的 AZ,将 reqspec.AZ 更新为新的 AZ

建议的新行为

启动

卸载后 AZ

主机

结果

无 AZ

无 AZ 或 AZ=null

自由调度,reqspec.AZ=None

无 AZ

无 AZ 或 AZ=null

Host1

调度到 host1,reqspec.AZ=None

无 AZ

AZ=”AZ1”

调度到 AZ1,reqspec.AZ=”AZ1”

无 AZ

AZ=”AZ1”

Host1

验证 host1 在 AZ1 中,或者 (3)。调度到 host1,reqspec.AZ=”AZ1”

AZ1

无 AZ

调度到 AZ1,reqspec.AZ=”AZ1”

AZ1

AZ=null

自由调度,reqspec.AZ=None

AZ1

无 AZ

Host1

如果 host1 在 AZ1 中,则调度到 host1,reqspec.AZ=”AZ1”,否则拒绝请求 (1)

AZ1

AZ=null

Host1

调度到 host1,reqspec.AZ=None

AZ1

AZ=”AZ2”

调度到 AZ2,reqspec.AZ=”AZ2”

AZ1

AZ=”AZ2”

Host1

如果 host1 在 AZ2 中,则调度到 host1,reqspec.AZ=”AZ2”,否则拒绝 (1)

  1. 在 api 处进行检查并返回错误。

备选方案

当前提案拒绝恢复到特定主机,如果实例状态不是 shelved_offloaded。或者,请求恢复到特定主机将自动将实例状态更改为 shelved_offloaded。因此,用户不必担心初始实例状态。

数据模型影响

REST API 影响

更改验证模式,允许 availability_zone=nullhost。模式验证中的错误将引发 HTTP400。

确保实例状态为 shelved_offloaded。在这种情况下,错误将引发 HTTP409。

从新的 API 微版本开始,可以使用以下主体调用 POST /servers/{server_id}/action API

  • {“unshelve”: null} (保持与先前微版本的兼容性)

或者

  • {“unshelve”: {“availability_zone”: <string>}}

  • {“unshelve”: {“availability_zone”: null}} (取消固定可用区)

  • {“unshelve”: {“host”: <fqdn>}}

  • {“unshelve”: {“availability_zone”: <string>, “host”: <fqdn>}}

  • {“unshelve”: {“availability_zone”: null, “host”: <fqdn>}}

其他任何内容都不允许,例如

  • {“unshelve”: {}}

  • {“unshelve”: {“host”: <fqdn>, “host”: <fqdn>}}

  • {“unshelve”: {“foo”: <string>}}

安全影响

通知影响

其他最终用户影响

python-openstackclient 将被更新,并为新的微版本提供支持。

将向恢复命令引入一个新的开关 --unpin-az,允许 PROJECT_ADMIN 移除服务器的可用区约束。

python-novaclient 将仅通过 python 辅助函数进行扩展。

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

Uggla (rene.ribaud)

功能联络人

功能联络人

sbauza

工作项

  • 为恢复到特定主机 (恢复操作) API 添加一个新的微版本

  • 添加相关测试

依赖项

测试

  • 添加相关的单元测试

  • 添加相关的功能测试

  • 添加一个 tempest 测试

文档影响

API 参考和恢复文档将被更新,以解释新微版本引入的新行为。

参考资料

历史

修订版

发布名称

描述

Zed

引入