允许强制删除已使用的子网

允许删除一个共享网络中的子网,即使该子网被一个或多个共享使用。此操作仅在子网不是共享网络的最后一个子网时才可行,因为不允许网络没有子网存在。

问题描述

当共享网络附加到共享时,Manila API 允许向此网络添加新的子网,但不允许删除它。这意味着 Manila 用户可以向其共享服务器添加任意数量的网络接口,但这些接口永远无法删除。

用例

使用共享的客户端的需求可能会发生变化,这需要共享服务器完全不同的网络配置。例如,它可能最初用于公共网络,然后用于私有网络。在这种情况下,由于公共 IP 地址是有限的资源,我们希望释放它们。在共享服务器上保留未使用的网络接口也可能导致安全问题。因此,Manila 应该提供一种删除这些接口或子网的方式。

提议的变更

  • 在删除共享网络子网时,不要删除共享服务器。一个共享网络可能有多个子网。因此,在删除其中一个子网时,共享仍然需要一个共享服务器。

  • 允许在共享服务器上删除网络接口。目前在 Manila 中,有一个 API 可以添加网络接口,但没有 API 允许删除网络接口。

  • 在共享 API、RPC API 和管理器中添加一个 delete_share_network_subnet 方法。在管理器中,此方法依赖于 update_share_server_network_allocations,并将 remove=True。在更新分配后,如果不再有任何分配,则删除共享服务器。

  • 在共享管理器的 update_share_server_network_allocations 方法和驱动程序中添加 delete 参数(默认值为 False)。当设置为 True 时,分配将从共享服务器中删除,而不是添加。

REST API 影响

  1. 添加一个新的操作端点来强制删除子网,该端点仅供管理员使用,这得益于默认的 RBAC 规则。

  • URL

    /v2/share-networks/{share_network_id}/subnets/{sns_id}/action

  • 方法:POST

  • JSON body

    {
      'force_delete': None
    }
    
  • 此 API 仅限于管理员使用,这得益于默认的 RBAC 规则。

  • 通过此操作删除子网时,不执行对附加共享存在的检查。

  • 可能的响应代码:- 202 - 请求已接受。- 403 - 禁止访问(非管理员访问)- 404 - 未识别的共享网络 ID - 404 - 未识别的共享网络子网 ID - 404 - 请求的微版本中不存在 API - 409 - 冲突(例如,尝试删除最后一个子网)

  1. 在尝试从共享网络删除子网时,引入一种“仅检查”模式。这种模式允许用户评估是否可以从所有关联的共享服务器安全地删除子网,而无需实际执行删除操作。此端点也仅供管理员使用,这得益于默认的 RBAC 规则。

    为了与子网创建检查保持一致,此端点接受一个 reset_operation 参数。如果设置为 false,API 将返回缓存结果。如果设置为 true,它将触发新的异步检查操作。

  • URL

    /v2/share-networks/{share_network_id}/subnets/{sns_id}/action

  • 方法:POST

  • JSON body

    {
      'share_network_subnet_delete_check': {
        'reset_operation': false
      }
    }
    
  • 此 API 仅限于管理员使用,这得益于默认的 RBAC 规则。

  • 可能的响应代码:- 202 - 请求已接受。- 403 - 禁止访问(非管理员访问)- 404 - 未识别的共享网络 ID - 404 - 未识别的共享网络子网 ID - 404 - 请求的微版本中不存在 API - 409 - 冲突(例如,尝试删除最后一个子网)

最终用户影响

无。默认行为保持不变。通过指定 force 参数,用户表示他们了解后果并承担最终中断的责任。此 API 仅供管理员使用。

实现

负责人

主要负责人

工作项

  • 实现强制删除共享子网 API。

  • 在 SDK 中实现相应的功能。

  • 实现 tempest 测试。

  • 更新文档。

测试

  • 单元测试

  • Tempest 测试

文档影响

  • 用户指南

  • 管理员指南

  • API 参考