API 扩展策略移除

https://blueprints.launchpad.net/nova/+spec/api-extensions-policy-removal

本规范旨在弃用 API 扩展策略,这些策略是在引入 API 扩展时专门添加的。

问题描述

Nova API 扩展概念已在 Pike 中移除。但代码仍然存在于不同的文件中。例如:api/openstack/compute/extended_availability_zone.py 扩展通过扩展 Show 和 Detail 方法,在 GET server API 中添加了 AZ。

这些扩展代码具有自身的策略强制执行。例如,extended_availability_zone.py 扩展了 GET server API 响应,并具有策略 ‘os_compute_api:os-extended-availability-zone’。因此,GET server API 具有多重策略强制执行:show server 策略 + 每个扩展的策略。

虽然无法在 API 中启用/禁用扩展,但我们允许扩展策略控制 API 的扩展行为。

这可能会导致互操作性问题,而移除 API 扩展概念正是为了解决这个问题。

此外,我找不到这些策略的实际用例,它们是随着扩展一起添加的。

用例

  • 作为操作员,我希望 API 的策略清晰明了。为不同的响应元素控制单个 API 的多个策略可能并不总是好的和清晰的。

  • 作为 API 开发人员,我希望通过清理遗留扩展策略来轻松维护 API 的策略。

提议的变更

本规范建议弃用以下策略,这些策略非常特定于 API 扩展,并且默认情况下并非仅限于管理员:

服务器扩展

  • Config Drive

    • 文件:api/openstack/compute/config_drive.py

    • 目的:在 GET server 响应中添加 ‘config_drive’

    • 策略:‘os_compute_api:os-config-drive’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • 扩展 AZ

    • 文件:api/openstack/compute/extended_availability_zone.py

    • 目的:在 GET server 响应中添加 ‘OS-EXT-AZ:availability_zone’

    • 策略:‘os_compute_api:os-extended-availability-zone’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • 扩展状态

    • 文件:api/openstack/compute/extended_status.py

    • 目的:在 GET server 响应中添加服务器状态(‘task_state’、‘vm_state’、‘power_state’)属性

    • 策略:‘os_compute_api:os-extended-status’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • 扩展卷

    • 文件:api/openstack/compute/extended_volumes.py

    • 目的:在 GET server 响应中添加 ‘os-extended-volumes:volumes_attached’。

    • 策略:‘os_compute_api:os-extended-volumes’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • 隐藏服务器地址:这将由其他 BP 处理。 - https://blueprints.launchpad.net/nova/+spec/remove-configurable-hide-server-address-feature

  • 密钥对

    • 文件:api/openstack/compute/keypairs.py

    • 目的:在 GET server 响应中添加 ‘key_name’

    • 策略:‘os_compute_api:os-keypairs’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • 安全组

    • 文件:api/openstack/compute/security_groups.py

    • 目的:在 GET、POST server 响应中添加 ‘security_groups’

    • 策略:‘os_compute_api:os-security-groups’

    • 策略强制执行:软性(不引发异常)

    • 注意:相同的策略也由其他安全组 API 使用,因此此处的建议是从 GET、POST server API 中移除策略强制执行。

    • 建议:仅从 GET、POST /servers API 弃用。

  • 服务器使用情况

    • 文件:api/openstack/compute/server_usage.py

    • 目的:在 GET server 响应中添加 ‘OS-SRV-USG:launched_at’、‘OS-SRV-USG:terminated_at’。

    • 策略:‘os_compute_api:os-server-usage’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

Flavor 扩展

  • Flavor rxtx

    • 文件:api/openstack/compute/flavor_rxtx.py

    • 目的:在 GET、POST flavor 响应中添加 ‘os-flavor-rxtx’

    • 策略:‘os_compute_api:os-flavor-rxtx’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

  • Flavor 访问

    • 文件:api/openstack/compute/flavor_access.py

    • 目的:在 GET、POST flavor 响应中添加 ‘os-flavor-access:is_public’

    • 策略:‘os_compute_api:os-flavor-access’

    • 策略强制执行:软性(不引发异常)

    • 注意:此策略也由 flavor 访问 API 使用(GET /flavors/{flavor_id}/os-flavor-access),不会更改。此处的建议是从 GET、POST flavor API 中移除此策略强制执行。

    • 建议:仅针对 GET、POST /flavors API 弃用。

Image 扩展

  • Image 大小

    • 文件:api/openstack/compute/image_size.py

    • 目的:在 GET image 响应中添加 ‘OS-EXT-IMG-SIZE:size’

    • 策略:‘os_compute_api:image-size’

    • 策略强制执行:软性(不引发异常)

    • 建议:弃用。

上述所有策略都建议在一个周期内弃用。

备选方案

保留策略并继续在单个 API 中进行多重策略强制执行。

数据模型影响

REST API 影响

以下提到的策略将在下一个周期中弃用并移除。移除后,这些策略将不再控制扩展属性,并且这些属性将始终添加,而无需检查这些特定策略。这些 API 的主要策略仍然有效且已强制执行。

主要策略是 Show、Detail API 的现有策略(如果有的话)。例如:GET servers/{server_id} - “os_compute_api:servers:show” GET servers/detail - “os_compute_api:servers:detail” POST flavors - ‘os_compute_api:os-flavor-manage:create’

GET flavors 没有 Show、Detail API 的策略。GET images 没有 Show、Detail API 的策略。

显示和列出详细服务器

GET /servers/{server_id}
GET /servers/detail

Policies to be deprecated:
'os_compute_api:os-config-drive'
'os_compute_api:os-extended-availability-zone'
'os_compute_api:os-extended-status'
'os_compute_api:os-extended-volumes'
'os_compute_api:os-keypairs'
'os_compute_api:os-security-groups'
'os_compute_api:os-server-usage'

创建、显示和列出详细 flavor

POST /flavors
GET /flavors/{flavor_id}
GET /flavors/detail

Policies to be deprecated:
'os_compute_api:os-flavor-rxtx'
'os_compute_api:os-flavor-access'

显示和列出详细 image

GET /images/{image_id}
GET /images/detail

Policies to be deprecated:
'os_compute_api:image-size'

由于所有这些策略都是软性强制执行的,并且在失败时不会引发异常,因此 API 的成功案例不会发生变化。

安全影响

覆盖上述策略的云提供商将受到策略弃用和然后在各自 API 中移除策略的影响。

通知影响

其他最终用户影响

性能影响

其他部署者影响

控制扩展属性的策略将不再控制其在响应中的添加。

开发人员影响

实现

负责人

主要负责人

Ghanshyam Mann <ghanshyammann@gmail.com>

工作项

  • 在 queens 周期中弃用相应的策略。

  • 在下一个(Rocky)周期中移除已弃用的策略。

依赖项

Oslo Policy 弃用 BP:https://blueprints.launchpad.net/oslo.policy/+spec/policy-deprecation

测试

相应的单元测试和功能测试将被修改。

文档影响

参考资料

历史

修订版

发布名称

描述

Queens

引入