弃用 os-hosts API

https://blueprints.launchpad.net/nova/+spec/deprecate-os-hosts

大部分 os-hosts API 与 os-servicesos-hypervisors API 重复。其他部分并非所有后端都已实现,甚至不适合 Nova 在计算 API 中拥有。还有一些部分根本没有在任何后端中实现。本规范建议完全弃用该 API。

问题描述

os-hostsos-services API 非常相似,它们处理相同的资源(nova 数据库中的 services 记录)。具体来说,PUT /os-hosts/{host_name}PUT /os-services/disablePUT /os-services/enable 相比。

两个 API 都允许您列出服务并显示特定主机(计算节点)的详细信息。

os-hostsos-hypervisors API 也很相似,因为它们处理相同的资源(nova 数据库中的 compute_nodes 记录)。具体来说,GET /os-hostsGET /os-hosts/{host_name}GET /os-hypervisorsGET /os-hypervisors/{hypervisor_id} 相比。

两个 API 都允许您启用和禁用服务,以便实例不会被调度到该服务(计算主机)。

有一些额外的操作 API 是特定于 os-hosts API 的

  1. 将服务(主机)置于维护模式。这仅由 XenServer virt 驱动程序实现,尽管支持矩阵中的描述 [1] 报告称它实际上并没有从主机上驱逐所有客户机,它只是在 Xen 管理控制台中设置了一个标志,因此实际上毫无用处。无论如何,我们有其他 API 可以让您做同样的事情,这些 API 在所有 virt 驱动程序中都受支持,即禁用服务然后将实例迁移到该主机。

  2. 重启主机。这仅受 XenServer 和 Hyper-v 驱动程序支持。这也可以说是不需要存在于计算 API 中的事情。后端驱动程序在重启主机时不会对 nova 数据库中的客户机进行编排。该主机的计算服务可能会被服务组健康检查暂时禁用,这将使其退出调度决策,并且客户机将停止运行,但定期任务会检查意外停止的实例,该任务在 nova-compute 服务中运行,而该服务可能已经停止,因此 nova API 会显示实例正在运行,而实际上它们已经停止。

  3. 关闭主机。与 #2 相同,用于重启主机。

  4. 启动主机。这实际上并没有在任何 in-tree virt 驱动程序中得到支持。实现 host_power_action 方法的唯一驱动程序是 XenServer 和 Hyper-v,并且它们不支持 startup 操作。由于这是从 nova-api 到 nova-compute 的 RPC 调用,您至少会收到 501 错误响应,表明它不受支持或未实现(尽管 501 对于像这样的事情来说是错误的响应)。

用例

作为管理员,我希望使用单个、一致的 API 来管理 Nova 部署中的服务(os-services)。

作为管理员,我希望使用单个、一致的 API 来管理 Nova 部署中的计算节点(os-hypervisors)。

作为开发人员,我不想支持重复的 API 或应该存在于 Nova 之外的东西,例如重启或停止整个计算主机或 hypervisor 的代码。这在多单元格 cells v2 世界中尤其令人恼火,我们需要确保 API 中有一个唯一的标识符来定位任何给定单元格中的唯一资源(有关详细信息,请参阅 [2])。

提议的变更

在 microversion 中,弃用 os-hosts API 控制器中的所有方法,以便在该 microversion 或更高版本的请求将导致 404 NotFound 错误。

备选方案

数据模型影响

REST API 影响

使用新的 microversion,任何在该 microversion 或更高版本对 os-hosts API 的请求都将导致 404 NotFound 响应。

这些是具体的 API

  • GET /os-hosts - 列出主机

  • GET /os-hosts/{host_name} - 显示主机详细信息

  • PUT /os-hosts/{host_name} - 更新主机状态

  • GET /os-hosts/{host_name}/reboot - 重启主机

  • GET /os-hosts/{host_name}/shutdown - 关闭主机

  • GET /os-hosts/{host_name}/startup - 启动主机

另外,是的,这些 power action API 上的 GET 不是错误,它们实际上是作为 GET 实现的。

安全影响

通知影响

其他最终用户影响

以下 CLI 及其在 python-novaclient 中的后端 API 绑定将被弃用并限制在新 microversion 上

  • nova host-describe - 被 nova hypervisor-show 取代

  • nova host-list - 被 nova hypervisor-list 取代

  • nova host-update - 被 nova service-enable/disable 取代

  • nova host-action - Nova 设计中没有替代方案

性能影响

其他部署者影响

依赖 os-hosts API 的部署者需要限制在新 microversion 上或更改为使用 os-servicesos-hypervisors。如果任何 Xen 或 Hyper-v 管理员正在使用 power action API,他们需要使用这些 hypervisor 原生的东西。请注意,在 openstack-operators 邮件列表中询问 API 使用情况 [3] 时,没有人说他们正在使用它。

开发人员影响

实现

负责人

主要负责人

Matt Riedemann (mriedem)

其他贡献者

工作项

  • 添加新的 microversion 以弃用 os-hosts API 方法。

  • 限制并弃用 python-novaclient 中的相关 CLI 和 API。

  • 限制、替换或删除 Tempest 中对 os-hosts API 的任何使用。

依赖项

测试

单元测试和 in-tree 功能测试正常进行。

Tempest 中有一些测试依赖于 os-hosts API,无论是直接用于测试 API,还是间接用于列出主机以进行其他测试设置,例如与 aggregates 或 live migration 测试。主机列表和显示操作可以替换为 os-hypervisorsos-services API。 os-hosts 中的 enable/disable/reboot/shutdown/start API 仅用于 Tempest 负面测试,并可能应该移到 Nova 单元测试中(这些单元测试可能已经存在)。

文档影响

os-hosts API 的计算 API 参考文档将被更新,以提及 API 在新的 microversion 上已弃用。我们还可以提及一些 API 的限制,例如 power actions 仅由一些 virt 驱动程序实现,它们未经测试,并且 startup 操作根本未实现。基本上,永远不要使用它们。

参考资料

历史

修订

发布名称

描述

Pike

引入