资源标签¶
各种虚拟网络资源支持标签,供外部系统或网络服务 API 的任何其他客户端使用。
所有支持标准属性的资源都可用于标记。这包括
networks
子网
子网池
ports
路由器
浮动 IP
日志
安全组
安全组规则
段
策略
中继
网络段范围
用例¶
以下用例指的是向网络添加标签,但同样适用于任何其他受支持的网络服务资源
能够将不同 OpenStack 位置的不同网络映射到逻辑上相同的网络(用于多站点 OpenStack)。
能够在混合环境中将来自不同管理/编排系统的 ID 映射到 OpenStack 网络。例如,在 Kuryr 项目中,Docker 网络 ID 被映射到 Neutron 网络 ID。
能够让部署工具利用标签。
能够标记有关提供商网络的信息(例如,高带宽、低延迟等)。
使用标签进行过滤¶
API 允许搜索/过滤 GET /v2.0/networks API。支持以下查询参数
tagstags-anynot-tagsnot-tags-any
要请求具有单个标签的网络列表,tags 参数应设置为所需的标签名称。示例
GET /v2.0/networks?tags=red
要请求具有两个或多个标签的网络列表,tags 参数应设置为标签列表,用逗号分隔。在这种情况下,必须同时存在所有给定的标签,网络才能包含在查询结果中。一个返回具有“red”和“blue”标签的网络示例
GET /v2.0/networks?tags=red,blue
要请求具有给定标签列表中的一个或多个标签的网络列表,tags-any 参数应设置为标签列表,用逗号分隔。在这种情况下,只要存在一个给定的标签,网络就会包含在查询结果中。一个返回具有“red”或“blue”标签的网络示例
GET /v2.0/networks?tags-any=red,blue
要请求不具有一个或多个标签的网络列表,not-tags 参数应设置为标签列表,用逗号分隔。在这种情况下,只有不具有任何给定标签的网络才会包含在查询结果中。一个返回不具有“red”或“blue”标签的网络示例
GET /v2.0/networks?not-tags=red,blue
要请求不具有给定标签列表中的至少一个标签的网络列表,not-tags-any 参数应设置为标签列表,用逗号分隔。在这种情况下,只有不具有给定标签中的至少一个标签的网络才会包含在查询结果中。一个返回不具有“red”标签或不具有“blue”标签的网络示例
GET /v2.0/networks?not-tags-any=red,blue
可以将 tags、tags-any、not-tags 和 not-tags-any 参数组合起来构建更复杂的查询。示例
GET /v2.0/networks?tags=red,blue&tags-any=green,orange
上面的示例返回具有“red”和“blue”标签,以及“green”和“orange”标签中的至少一个标签的任何网络。
复杂的查询可能包含矛盾的参数。示例
GET /v2.0/networks?tags=blue¬-tags=blue
在这种情况下,我们应该让网络服务找到这些网络。显然,没有这样的网络,服务将返回一个空列表。
用户流程¶
向资源添加标签
$ openstack network set --tag red ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field | Value |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | nova |
| created_at | 2018-07-11T09:44:50Z |
| description | |
| dns_domain | None |
| id | ab442634-1cc9-49e5-bd49-0dac9c811f69 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1450 |
| name | net |
| port_security_enabled | True |
| project_id | e6710680bfd14555891f265644e1dd5c |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 1047 |
| qos_policy_id | None |
| revision_number | 5 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | red |
| updated_at | 2018-07-16T06:22:01Z |
+---------------------------+----------------------------------------------------------------------------+
从资源中删除标签
$ openstack network unset --tag red ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field | Value |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | nova |
| created_at | 2018-07-11T09:44:50Z |
| description | |
| dns_domain | None |
| id | ab442634-1cc9-49e5-bd49-0dac9c811f69 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1450 |
| name | net |
| port_security_enabled | True |
| project_id | e6710680bfd14555891f265644e1dd5c |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 1047 |
| qos_policy_id | None |
| revision_number | 5 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| updated_at | 2018-07-16T06:32:11Z |
+---------------------------+----------------------------------------------------------------------------+
替换资源上的所有标签
$ openstack network set --tag red --tag blue ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field | Value |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | nova |
| created_at | 2018-07-11T09:44:50Z |
| description | |
| dns_domain | None |
| id | ab442634-1cc9-49e5-bd49-0dac9c811f69 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1450 |
| name | net |
| port_security_enabled | True |
| project_id | e6710680bfd14555891f265644e1dd5c |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 1047 |
| qos_policy_id | None |
| revision_number | 5 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | blue, red |
| updated_at | 2018-07-16T06:50:19Z |
+---------------------------+----------------------------------------------------------------------------+
清除资源上的标签
$ openstack network unset --all-tag ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field | Value |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | nova |
| created_at | 2018-07-11T09:44:50Z |
| description | |
| dns_domain | None |
| id | ab442634-1cc9-49e5-bd49-0dac9c811f69 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| is_vlan_transparent | None |
| mtu | 1450 |
| name | net |
| port_security_enabled | True |
| project_id | e6710680bfd14555891f265644e1dd5c |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 1047 |
| qos_policy_id | None |
| revision_number | 5 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| updated_at | 2018-07-16T07:03:02Z |
+---------------------------+----------------------------------------------------------------------------+
从网络获取带有标签过滤器的资源列表。这些网络是:带有“red”标签的 test-net1,带有“red”和“blue”标签的 test-net2,带有“red”、“blue”和“green”标签的 test-net3,以及带有“green”标签的 test-net4。
使用 tags 过滤器获取资源列表
$ openstack network list --tags red,blue
+--------------------------------------+-----------+---------+
| ID | Name | Subnets |
+--------------------------------------+-----------+---------+
| 8ca3b9ed-f578-45fa-8c44-c53f13aec05a | test-net3 | |
| e736e63d-42e4-4f4c-836c-6ad286ffd68a | test-net2 | |
+--------------------------------------+-----------+---------+
使用 any-tags 过滤器获取资源列表
$ openstack network list --any-tags red,blue
+--------------------------------------+-----------+---------+
| ID | Name | Subnets |
+--------------------------------------+-----------+---------+
| 30491224-3855-431f-a688-fb29df004d82 | test-net1 | |
| 8ca3b9ed-f578-45fa-8c44-c53f13aec05a | test-net3 | |
| e736e63d-42e4-4f4c-836c-6ad286ffd68a | test-net2 | |
+--------------------------------------+-----------+---------+
使用 not-tags 过滤器获取资源列表
$ openstack network list --not-tags red,blue
+--------------------------------------+-----------+---------+
| ID | Name | Subnets |
+--------------------------------------+-----------+---------+
| 30491224-3855-431f-a688-fb29df004d82 | test-net1 | |
| cdb3ed08-ca63-4090-ba12-30b366372993 | test-net4 | |
+--------------------------------------+-----------+---------+
使用 not-any-tags 过滤器获取资源列表
$ openstack network list --not-any-tags red,blue
+--------------------------------------+-----------+---------+
| ID | Name | Subnets |
+--------------------------------------+-----------+---------+
| cdb3ed08-ca63-4090-ba12-30b366372993 | test-net4 | |
+--------------------------------------+-----------+---------+
限制¶
不支持名称包含逗号的标签进行过滤。因此,请勿将此类标签名称放在资源上。
未来支持¶
在未来的版本中,网络服务可能会支持为其他资源设置标签。