支持访问规则的元数据¶
https://blueprints.launchpad.net/manila/+spec/metadata-for-access-rule
为访问规则资源添加一个新的“metadata”属性。
问题描述¶
访问规则资源缺乏获取/设置元数据属性的能力。
用例¶
这里的元数据指的是描述性元数据,用于发现和识别。用户可以为访问规则添加键值对来描述它们。用户也可以在请求访问规则列表时,使用指定的元数据来过滤访问规则。
提议的变更¶
“metadata”属性将被添加到访问规则对象中。
将创建一个新的数据库表“share_access_rules_metadata”。
访问规则创建 API 将被更新以支持“metadata”。
将创建一组 API 用于访问规则元数据的 CRUD 操作。
备选方案¶
我们只能通过 access_to 获取所需的访问规则值。没有办法通过用户标记访问规则,或者为访问添加一些特殊信息。
数据模型影响¶
新的“share_access_rules_metadata”表将在数据库中创建,并包含访问规则 ID。主键为“id”。我们可以通过访问规则 ID 获取 access_rules 表的信息。
+-------------------+--------------+-------------+-------------+-----------------+
| key | value | id | deleted | access_id |
+-------------------+--------------+-------------+-------------+-----------------+
| varchar(255) | varchar(255) | varchar(36) | varchar(36) | varchar(36) |
+-------------------+--------------+-------------+-------------+-----------------+
| varchar(255) | varchar(255) | varchar(36) | varchar(36) | varchar(36) |
+-------------------+--------------+-------------+-------------+-----------------+`
REST API 影响¶
它将遵循微版本规则。
访问规则创建 API 的请求体将被更新以支持“metadata”。
POST /v2/{project_id}/shares/{share_id}/action the request body can contain "metadata". { "allow_access":{ "metadata":{ "key1": "value1", "key2": "value2" } ... } }
将创建一组与访问规则元数据相关的新的 API。
显示访问规则的元数据
GET /v2/{project_id}/share-access-rules/{access_id} Response { "access": { "access_level": "rw", "state": "error", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "access_type": "cert", "access_to": "example.com", "access_key": null, "metadata": { "key1": "value1", "key2": "value2" } } }
列出根据访问规则元数据过滤的访问规则
GET /v2/{project_id}/share-access-rules?share_id={share-id}&key1=value1&key2=value2 Response { "accesses": [ { "access_level": "rw", "state": "active", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "access_type": "cert", "access_to": "example.com", "access_key": null, "metadata": { "key1": "value1", "key2": "value2" } }, { "access_level": "rw", "state": "error", "id": "329bf795-2cd5-69s2-cs8d-857985ca3652", "access_type": "ip", "access_to": "10.0.0.2", "access_key": null, "metadata": { "key1": "value1", "key2": "value2" } }, ] }“share_id”是一个强制查询键,如果未提供“share_id”,API 将返回 HTTP 400 错误。
注意
当前的 访问规则列表 API 接受 HTTP POST 请求。为了确保围绕幂等性和安全信息检索的正确 HTTP 语义,我们将引入一个新的 API,该 API 接受 GET 请求。旧的 API 将被限制在最大微版本中,即它将不可用于引入此新 API 的微版本中。
删除一个指定的元数据
DELETE /v2/{project_id}/share-access-rules/{access_id}/metadata/{key}
如果我们不输入“key”值,manila 将不会删除任何元数据并返回 HTTP 400 错误。
更新一个指定的元数据
PUT /v2/{project_id}/share-access-rules/{access_id}/metadata Request { "metadata":{ "key1": "value1", "key2": "value2" } }
如果我们不输入“key”值,它将不会更新任何元数据并返回错误。
安全影响¶
无
通知影响¶
新的 API 也会发送新的通知。
其他最终用户影响¶
Manila 客户端和 CLI 将被扩展以支持访问元数据。
支持访问元数据的 access-allow 命令将如下所示
manila access-allow [--metadata <key=value> [<key=value> ...]] [--access-level <access_level>] <share> <access_type> <access_to>
新的 access-metadata 命令将如下所示
manila access-metadata <access_id> <action> <key=value> [<key=value> ...] Set or delete metadata on a access rule. Positional arguments: <access_id> ID of the access rule to update metadata on. <action> Actions: "set" or "unset" to set or delete metadata on a access rule. <key=value> Metadata to set or unset, only key is necessary to unset.
支持访问元数据的新的 access-show 命令将如下所示
manila access-show <access_id> Show information of given access rule. Positional arguments: <access_id> ID of the access rule to update metadata on.
access-deny 命令将删除所有访问规则元数据。命令语法不会改变
manila access-deny <share> <id>
access-list 命令将添加元数据过滤器。命令将如下所示
manila access-list [--columns <columns>] <share> [--metadata [<key=value> [<key=value> ...]]] Show access list for share. Positional arguments: <share> Name or ID of the share. Optional arguments: --columns Comma separated list of columns to be displayed example –columns “access_type,access_to”. --metadata Filters results by a metadata key and value. OPTIONAL: Default=None.
性能影响¶
将创建一个新的“share_access_rules_metadata”表。数据库连接操作可能会导致现有访问规则 API 的搜索性能降低。
其他部署者影响¶
无
开发人员影响¶
驱动程序将无法访问元数据,并且 update_access 的驱动程序接口将不会被修改。
实现¶
负责人¶
- 主要负责人
zhongjun
工作项¶
为访问规则对象添加元数据属性并提升 API 版本。
创建一个新的数据库表“share_access_rules_metadata”并添加数据库升级脚本。
更新访问规则创建/列表 API。
添加访问规则元数据的更新/删除 API。
在 openstack/manila-tempest-plugin 中添加新的测试用例,用于新的 API。
允许在 Manila UI 和 python-manilaclient 中添加/更新/删除访问规则元数据。
依赖项¶
无
测试¶
单元测试
Tempest 测试
文档影响¶
Api-ref 需要更新。
更新用户文档和 CLI 文档
参考资料¶
无