允许恢复到特定主机¶
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) |
在 api 处进行检查并返回错误。
备选方案¶
当前提案拒绝恢复到特定主机,如果实例状态不是 shelved_offloaded。或者,请求恢复到特定主机将自动将实例状态更改为 shelved_offloaded。因此,用户不必担心初始实例状态。
数据模型影响¶
无
REST API 影响¶
更改验证模式,允许 availability_zone=null 和 host。模式验证中的错误将引发 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 |
引入 |