重置通用卷组和组快照状态

https://blueprints.launchpad.net/cinder/+spec/reset-cg-and-cgs-status

问题描述

目前我们支持管理员重置卷、快照、备份等的状态,但通用卷组和组快照也可能进入错误状态,管理员只能在数据库中修改状态。这对管理员来说很不方便。

用例

主要用例是手动恢复通用卷组状态(包括快照)的某种问题。这有助于从由于系统实际问题或错误导致的错误状态中恢复这两种资源。

提议的变更

以通用卷组为例,可以为资源添加一个新的管理员通用组操作。逻辑可以与已存在的卷操作 reset_status 相同,例如,要将通用组的状态重置为错误,将会是

POST /v3/{tenant_id}/groups/{group_id}/action
{
    'reset_status': {
       'status': 'error'
    }
}

‘status’ 应该是通用的组状态之一,API 将验证输入的 status,然后更新数据库中的状态。

备选方案

我们可以将其保留为手动数据库操作,但这需要管理员手动更新数据库才能实现相同的目标。

数据模型影响

REST API 影响

API 的微版本需要更新以支持以下新的 API。

新的 GroupAdminController

POST /v3/{tenant_id}/groups/{group_id}/action

以及新的管理员操作

reset_status

新的 GroupSnapshotAdminController

POST /v3/{tenant_id}/group_snapshots/{group_snapshot_id}/action

以及新的管理员操作

reset_status

它们都需要相同的请求体,并且 ‘status’ 应该作为字符串传递。

{
    'reset_status': {
       'status': 'error'
    }
}

对于返回码,如果状态无效,我们将返回 400 Bad Request,如果资源未找到,将返回 404 Not Found,否则将返回 202。

Cinder 客户端影响

cinder-client 将添加命令来暴露这些新的 API(使用 ‘state’ 代替 ‘status’ 以保持与现有重置命令的一致性)

新的命令来重置通用组状态

group-reset-state <group> –state <state>

‘group’ 应该是指定组的名称或 ID。

新的命令来重置组快照状态

group-snapshot-reset-state <group-snapshot> –state <state>

‘group-snapshot’ 应该是指定组快照的名称或 ID。

安全影响

通知影响

我们将添加 reset_group_statusreset_group_snapshot_status 通知,其行为方式与 reset_status 通知相同。将有一个 startend 通知。

其他最终用户影响

新的 API 将通过 python-cinderclient 暴露给用户。

性能影响

虽然它正在执行数据库操作,但应该影响很小。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

tommylikehu(TommyLikeHu@gmail.com)

工作项

  • 在 Cinder 中实现新的管理员操作和测试。

  • 在 python-cinderclient 中添加支持。

依赖项

测试

  • Cinder 中的单元测试。

  • Cinder 中的 Tempest 测试。

  • Cinder 中的功能测试。

  • python-cinderclient 中的单元测试。

文档影响

新的管理员文档,解释如何使用 API。

参考资料