卷类型描述

https://blueprints.launchpad.net/cinder/+spec/volume-type-description

此蓝图建议为卷类型添加描述信息,并允许用户了解默认卷类型是什么。卷类型描述和默认卷类型可以帮助用户在创建卷时做出明智的决定。

问题描述

  • Cinder 卷类型只有像 gold、silver 和 bronze 这样的抽象名称,或者 Openstack 管理员想到的任何名称。当用户创建卷并选择要使用的卷类型时,目前用户很难了解卷类型代表什么。

  • 当用户在不指定卷类型的情况下创建卷时,卷创建后,分配给该卷的卷类型可能是默认卷类型或 None。没有办法让用户了解默认卷类型是什么。

用例

提议的变更

  • 当管理员创建卷类型时,允许他/她为卷类型输入一些描述。描述的长度应在 0 - 255 之间。它应该采用字符串的形式。

  • 管理员还可以更新现有卷类型的描述。

  • 用户应该能够获取所有卷类型的描述。

  • 用户应该能够获取卷类型的描述。

  • 用户应该能够了解默认卷类型是什么。

备选方案

数据模型影响

数据库模式更改

  • 将在 volume_types 表中添加一个新的描述列。

mysql> DESC volume_types;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| created_at   | datetime     | YES  |     | NULL    |       |
| updated_at   | datetime     | YES  |     | NULL    |       |
| deleted_at   | datetime     | YES  |     | NULL    |       |
| deleted      | tinyint(1)   | YES  |     | NULL    |       |
| id           | varchar(36)  | NO   | PRI | NULL    |       |
| name         | varchar(255) | YES  |     | NULL    |       |
| qos_specs_id | varchar(36)  | YES  | MUL | NULL    |       |
| description  | varchar(255) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

数据库数据迁移

  • 现有的卷类型将具有空的描述。

REST API 影响

  • 更新“创建卷类型”REST 请求,以包含描述字段。

  • 更新“列出卷类型”REST 响应,以包含每个卷类型的描述字段

  • 更新“显示卷类型信息”REST 响应,以包含描述字段。

  • 添加“更新卷类型”REST API 以更新现有的卷类型。 * PUT /v2/{tenant_id}/types/{volume_type_id}

    • JSON 请求模式定义

      'volume_type': {
          'name': 'gold',
          'description': 'gold means very important'
      }
      
    • JSON 响应模式定义

      'volume_type': {
          'id': '4b502fcb-1f26-45f8-9fe5-3b9a0a52eaf2',
          'name': 'gold',
          'description': 'gold means very important',
          'extra_specs':{}
      }
      
    • 正常的 http 响应代码:200

    • 预期的错误 http 响应代码:400, 404, 500, 409

  • 添加“获取默认卷类型”REST API

  • GET /v2/{tenant_id}/types/default

  • JSON 响应模式定义

    'volume_type': {
        'id': '4b502fcb-1f26-45f8-9fe5-3b9a0a52eaf2',
        'name': 'bronze',
        'description': 'bronze means limited storage',
        'extra_specs':{}
    }
    
  • 正常的 http 响应代码:200

  • 预期的错误 http 响应代码:404

安全影响

创建或更新卷类型描述通常仅允许管理员用户。

普通用户应该能够获取卷类型、列出卷类型和获取默认卷类型。

API 访问将由安全策略控制。

通知影响

卷类型创建已经在创建结束或出现错误时发送了通知。将在更新卷类型结束或出现错误时发送通知。

其他最终用户影响

  • python-cinderclient 将更改以反映 API 的更改。

    volume_types.create 将更新为包含描述。volume_types.get_default 将添加以显示默认卷类型。volume_types.update 将添加以更新卷类型的描述。

  • Horizon 将在 python-cinderclient 实现后进行相应的 UI 更改,以处理卷类型的描述。

性能影响

在卷类型字段中添加另一个数据库列意味着每次获取卷类型都会提取描述。对于单个卷类型读取,影响很小。不太可能创建大量具有大量描述的卷类型。因此,性能影响应该很小。

其他部署者影响

DB volume_types 表迁移和相关的卷服务重启需要编排和短时间的停机时间。在模式迁移和新代码部署(无论以何种顺序完成)之间,可能会发生瞬态 API 错误。

开发人员影响

实现

负责人

主要负责人

gloria-gu

其他贡献者

工作项

  • 实现 Cinder API 更改。

  • 实现 DB 模式更改。

  • 实现 DB 迁移脚本更改。

    cinder/db/sqlalchemy/migrate_repo/versions

  • 实现 python-cinderclient 更改。

  • Cinder API 单元测试。

  • DB 迁移单元测试更改。

    cinder/tests/test_migrations.py

依赖项

Horizon 蓝图将依赖于此规范

测试

  • 更新单元测试以反映 API 的更改。

  • 更新 DB 迁移测试。

文档影响

  • Cinder API 文档需要更新以反映 API 的更改。

  • Cinder 客户端文档需要更新以反映更改。

参考资料