数据存储可见性

Launchpad蓝图

https://blueprints.launchpad.net/trove/+spec/datastore-visibility

动机:由于 Trove 支持多种数据存储类型,因此 Trove 需要对这些数据存储类型的客户可见性有更大的控制权。此更改使 Trove 能够控制各种数据存储类型的可见性。

问题描述

可能存在一些部署者要求在生产环境中激活但尚未对客户可见的数据存储类型。例如,我们希望在生产环境中激活数据存储 A,但尚未将其暴露给客户。

提议的变更

此更改建议向数据存储版本添加一个可见性属性。这使得数据存储仍然可以处于活动状态,但对用户不可见。可见性标志将确保它仅对管理员在数据存储列表调用中可见。

  1. 数据存储版本的可见性属性。它可以是:public(公开)/private(私有)/unlisted(未列出)/deprecated(已弃用)。

  2. 添加一个数据存储版本成员表,以添加私有数据存储的租户。

  3. 如果可见性是 public

    • 所有用户都可以在列表中查看它。

    • 所有用户都可以对数据存储版本进行 GET 调用。

    • 所有管理员都可以在列表中查看它。

    • 所有管理员都可以对数据存储版本进行 GET 调用。

  4. 如果可见性是 private

    • 只有成员才能在列表中查看它。

    • 只有成员才能对数据存储版本进行 GET 调用。

    • 所有管理员都可以在列表中查看它。

    • 所有管理员都可以对数据存储版本进行 GET 调用。

    • 所有管理员都可以添加和删除租户作为数据存储版本的成员。

  5. 如果可见性是 unlisted

    • 所有用户都可以对数据存储版本进行 GET 调用。

    • 所有管理员都可以在列表中查看它。

    • 所有管理员都可以对数据存储版本进行 GET 调用。

  6. 如果可见性是 deprecated

    • 所有管理员都可以在列表中查看它。

    • 所有管理员都可以对数据存储版本进行 GET 调用。

    • 只有管理员才能创建“deprecated(已弃用)”实例。

配置

数据库

  1. 向 datastore_versions 表添加“visibility(可见性)”列的数据库迁移。

表 datastore_versions

Field          | Type        | Null | Key     | Default | Extra|
---------------------------------------------------------------|
id             | varchar(36) | NO   | PRIMARY | NULL    |      |
datastore_id   | varchar(36) | YES  | MUL     | NULL    |      |
name           | varchar(255)| YES  |         | NULL    |      |
image_id       | varchar(36) | NO   |         | NULL    |      |
packages       | varchar(511)| YES  |         | NULL    |      |
active         | tinyint(1)  | NO   |         | NULL    |      |
manager        | varchar(255)| YES  |         | NULL    |      |
visibility     | varchar(255)| NO   |         | public  |      |
  1. 新表 datastore_version_members,包含列 - id、datastore_version_id、tenant_id。

表 datastore_version_members

Field               | Type        | Null | Key         | Default | Extra|
------------------------------------------------------------------------|
id                  | varchar(36) | NO   | PRIMARY     | NULL    |      |
datastore_version_id| varchar(36) | YES  | Foreign [1] | NULL    |      |
tenant_id           | varchar(36) | NO   |             | NULL    |      |

[1] datastore_version_id is a Foreign-Key on datastore_version.id

公共 API

公共 API 安全

内部 API

Guest Agent

备选方案

实现

负责人

主要负责人
联合作者

里程碑

Kilo-1 Kilo-2

工作项

已在评审流程中 - 参考 [1]。

实现

正在评审中 - 参考 [1]。

依赖项

测试

单元测试、模拟测试和真实模式测试。

文档影响

由于已添加/修改 API 调用,因此需要在 API 文档中包含各自的示例。