标签(Tag)服务插件允许用户在其资源上设置标签。标签资源可由外部系统或Neutron REST API的任何客户使用(而不是后端驱动程序)。
以下用例描述添加标签到网络资源,但也适用于任何其它Neutron资源:
-
映射不同网络到同一个逻辑网络的不同OpenStack位置的能力(用于多站点OpenStack)
-
混合环境下,映射不同的管理/编排系统ID到OpenStack网络的能力,以项目Kuryr为例,将Docker网络ID映射到Neutron网络ID
-
部署工具可使用标签
-
允许运营者对有关provider网络的信息加标签(例如,高带宽、低延迟等)
-
新功能,如get-me-a-network或类似的端口调度程序可以根据标签为端口选择网络
哪些资源
标签系统使用standardattr机制,因此它的目标是具有此机制的资源。某些具有标准属性的资源不适合标签支持的用法(如security_group_rule)。如果新的标签支持资源被添加,资源模型应继承HasStandardAttributes,然后必须实现属性“api_parent”和“tag_support”。还有添加资源时必须为API用户包含发布声明。
当前由标签扩展增添的API资源如下:
- floatingips
- networks
- policies
- ports
- routers
- security_groups
- subnetpools
- subnets
- trunks
模型
Tag标签不是标准的资源。Tag总是关联与已有的资源。以下显示Tag模型:
+------------------+ +------------------+
| Network | | Tag |
+------------------+ +------------------+
| standard_attr_id +------> | standard_attr_id |
| | | tag |
| | | |
+------------------+ +------------------+
Tag仅有两列,并且tag列为字符串类型。这些tag为每个资源而定义。在单个资源内tag是唯一的,但是它可以重叠.
API
以下显示tag的基础API。Tag被认为是资源的子资源,所有API总是包含关联与此tag的资源的ID.
在网络上增加一个tag:
PUT /v2.0/networks/{network_id}/tags/{tag}
返回201 Created
. 如果tag已经存在,不触发错误,仅返回201 Created
,因为在OpenStack Development Mailing List 中的讨论结果是: PUT应安全的处理已有tag的更新问题。
替换网络中的一组tag:
PUT /v2.0/networks/{network_id}/tags
带有请求负荷:
{
'tags': ['foo', 'bar', 'baz']
}
响应:
{
'tags': ['foo', 'bar', 'baz']
}
检查tag是否存在,或不在网络上:
GET /v2.0/networks/{network_id}/tags/{tag}
移除网络上的一个tag:
DELETE /v2.0/networks/{network_id}/tags/{tag}
移除网络上的所有tag:
DELETE /v2.0/networks/{network_id}/tags
对于collection的PUT 和 DELETE 是`extending the API framework的动力。