EC2 API 中卷和卷快照的支持标签

https://blueprints.launchpad.net/nova/+spec/ec2-volume-and-snapshot-tags

将卷和卷快照元数据作为 EC2 标签暴露在 EC2 API 中。

问题描述

OpenStack 的 EC2 API 对“标签”(资源元数据)的支持有限。 只有实例元数据暴露在 EC2 API 中,因此用户只能创建、删除和列出实例元数据。 OpenStack Cinder API 也支持卷和卷快照的元数据,我们只需要将其暴露到 EC2 API 中。 本蓝图旨在实现这一点。

用例

由于元数据功能已经在 OpenStack API 中提供,因此最终用户现在可以为卷和卷快照使用标签。 这将增加 OpenStack 和 EC2 API 之间的对等性。

项目优先级

提议的变更

  • EC2 API 的“CreateTags”方法以前仅在创建实例资源标签时才有效。 在此补丁之后,用户也可以为卷和卷快照资源创建标签。

  • 用户可以调用“DeleteTags”API 来删除与卷或卷快照关联的任何标签。

  • 在调用“DescribeTags”API 时,将列出卷和卷快照的标签以及实例标签(前提是这些资源的标签存在,显然)。

  • 添加了在调用“DescribeTags”时,将卷和卷快照 ID 以及“volume”和“snapshot”作为资源参数进行指定的支持。

  • 由于这是标签支持的资源数量首次变为复数,因此代码被设计得更通用,以便更容易添加进一步的资源。

  • 实现细节:在 DescribeInstances API 中,用户可以指定资源 ID 和资源类型作为过滤器。 如果查询表示按资源 ID(vol-00000001 和 ami-00000001)和资源类型(实例和卷)进行过滤,则当前实现方式是获取资源的交集(在本例中为卷),然后检查这些资源是否已实现。

备选方案

另一种方法是:使用作用域键使 EC2 标签与卷标签不同。 因此,用户在 EC2 API 中创建的标签 stack=beta,在 Cinder API 中将显示为 EC2:stack=beta。 这样,使用 Cinder API 的用户可以清楚地看到哪些元数据条目是使用 EC2 API 创建的,哪些是由 OpenStack API 创建的。

我认为保持 EC2 API 层尽可能透明是有意义的。 这意味着不采用上述建议的替代方案。 这也符合我们目前实例元数据的方式。

关于上述指定的实现细节,另一种方法是:不允许在同一个查询中指定资源 ID 和资源类型。

没有 AWS 文档表明这种 API 调用是不允许的(至少我找不到)。 这种实现更简单,但 IMO 目前的实现方式提供了更好的用户体验。 如果我们从查询中删除资源 ID 或资源类型,记录可能会有所帮助。

数据模型影响

REST API 影响

只有 EC2 API 会受到影响。 受影响的 API 调用是:CreateTags、DeleteTags DescribeTags。

安全影响

通知影响

其他最终用户影响

性能影响

微不足道。 请注意,对于 DescribeTags,随着我们不断添加资源,当在不指定资源类型的情况下发出 DescribeTags 调用时,将向所有资源(例如 Glance、Cinder 等)发出 API 调用。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

rushiagr (Rushi Agrawal)

工作项

  • 重组 EC2 “标签”代码以允许添加新资源

  • 为卷添加 EC2 标签支持

  • 为卷快照添加 EC2 标签支持

依赖项

测试

将编写全面的单元测试来测试该功能。

文档影响

EC2 API 文档应更新以反映对本蓝图下的 EC2 API 所做的更改。

参考资料

EC2 API 参考:* CreateTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateTags.html * DeleteTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteTags.html * DescribeTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html