概览
ZStack提供两类标签帮助用户和插件管理资源, 引入额外的资源属性,以及指挥ZStack执行特殊的业务逻辑。
用户标签(User Tags)
- 用户可以在所拥有的资源上创建用户标签,这对于管理相似资源的聚集特别有用。例如,用户可以为作为网页服务器的云主机设置一个标签web:
-
CreateUserTag resourceType=VmInstanceVO \ resourceUuid=613af3fe005914c1643a15c36fd578c6 tag=webCreateUserTag resourceType=VmInstanceVO \ resourceUuid=5eb55c39db015c1782c7d814900a9609 tag=webCreateUserTag resourceType=VmInstanceVO \ resourceUuid=0cd1ef8c9b9e0ba82e0cc9cc17226a26 tag=web - 之后,可以通过Query API with tags <query with
tags>来获取这些云主机:
QueryVmInstance __userTag__=web
用户也可以在创建云主机的时候设置多个标签,标签之间用","分隔,这样可以实现多个usertags-
CreateVmInstance instanceOfferingUuid=1cf417bfd0e94175aea92131f1000011 \ imageUuid=ee14c7c8cc46309d821c51bbae3adb70 l3NetworkUuids=ac5c7e736f1b499bbd0c12763b30051d \ name=tesd2 userTags=capability::liveSnapshot,os::centos::7.4 - 用户可以标识:容量40G,OS Centos7.4,密码是123456,用于Apache 场景。这些跟 ::
没有特别的关系
CreateVmInstance instanceOfferingUuid=1cf417bfd0e94175aea92131f1000011 \ imageUuid=ee14c7c8cc46309d821c51bbae3adb70 l3NetworkUuids=ac5c7e736f1b499bbd0c12763b30051d name=tesd2 \ userTags=capability:40G,OS:CentOS7.4,password:123456,usage:Apache
-
- 用户也可以通过用户标签和系统标签(system
tags)合作来改变业务逻辑。
例如,用户想在所有作为网页服务器的云主机上,在一个特定的通过SSD提高IO性能的主存储上,创建他们的根云盘。
要达到这一目的,用户可以这样做:- 在主存储上创建一个用户标签forWebTierVM:
CreateUserTag tag=forWebTierVM resourceType=PrimaryStorageVO \ resourceUuid=6572ce44c3f6422d8063b0fb262cbc62 - 然后,在计算规格上创建一个系统标签:
CreateSystemTag tag=primaryStorage::allocator::userTag::forWebTierVM \ resourceType=InstanceOfferingVO resourceUuid=8f69ef6c2c444cdf8c019fa0969d56a5 - 这样,当用户通过计算规格(UUID:8f69ef6c2c444cdf8c019fa0969d56a5)创建云主机时,ZStack会保证云主机的根云盘都会被创建在拥有用户标签forWebTierVM的主存储(UUID:6572ce44c3f6422d8063b0fb262cbc62)上。
- 在主存储上创建一个用户标签forWebTierVM:
系统标签(System Tags)
系统标签相比用户标签有更广泛的用途。就像上节中的例子一样,用户可以灵活使用它们来指挥ZStack执行特殊的业务逻辑。
- 内部系统标签
扩展ZStack功能的插件,可以通过使用系统标签来引入额外的资源属性,或记录和资源紧密相关的元数据。
例如,用户想在KVM云主机上实施在线迁移或者在线快照。
ZStack需要知道KVM云主机的libvirt版本和QEMU版本,这些信息都是元数据,ZStack将它们作为云主机的系统标签存储起来。
- 管理员可以通过以下命令查看一个KVM云主机的系统标签:
QuerySystemTag fields=tag resourceUuid=d07066c4de02404a948772e131139eb4 - d07066c4de02404a948772e131139eb4是该KVM云主机的UUID,查询结果为:
{ "inventories": [ { "tag": "capability:liveSnapshot" }, { "tag": "qemu-img::version::2.0.0" }, { "tag": "os::version::14.04" }, { "tag": "libvirt::version::1.2.2" }, { "tag": "os::release::trusty" }, { "tag": "os::distribution::Ubuntu" } ], "success": true }
这类系统标签,被称为内部系统标签。内部系统标签只能被ZStack的服务或插件创建,并且不能被DeleteTag API删除。
- 管理员可以通过以下命令查看一个KVM云主机的系统标签:
- 非内部系统标签
为了增加新的功能,插件通常需要为一个资源添加新的属性。虽然插件不能通过改变一个资源的数据库模式来增加一个新的列,但它可以为一个资源创建作为系统标签的新属性。
例如,当创建一个云主机时,用户可以为云主机某L3网络上的网卡绑定一个可以通过网络访问的主机名:-
CreateVmInstance name=testTag systemTags=hostname::web-server-1 \ l3NetworkUuids=6572ce44c3f6422d8063b0fb262cbc62 \ instanceOfferingUuid=04b5419ca3134885be90a48e372d3895 \ imageUuid=f1205825ec405cd3f2d259730d47d1d8 - 这个主机名被实现为一个系统标签;
- 如果查看VM inventory in chapter ‘Virtual Machine’, 那里没有叫做hostname的属性;
- 然而,可以在云主机的系统标签中发现它:
QuerySystemTag fields=tag uuid resourceUuid=76e119bf9e16461aaf3d1b47c645c7b7{ "inventories": [ { "tag": "hostname::web-server-1", "uuid": "596070a6276746edbf0f54ef721f654e" } ], "success": true }
这类系统标签就是非内部的,用户可以通过DeleteTag API删除它。
例如,用户想把一个之前的云主机的主机名更改为web-server-nginx,可以这样做:-
DeleteTag uuid=596070a6276746edbf0f54ef721f654e -
CreateSystemTag resourceType=VmInstanceVO tag=hostname::web-server-nginx \ resourceUuid=76e119bf9e16461aaf3d1b47c645c7b7 - 停止和启动云主机之后,云主机中的系统会接受到web-server-nginx作为新的主机名。
-
命名约定(Name Convention)
用户标签和系统标签最多都只能有2048个字符。
- 对于用户标签,没有强制的命名约定,但推荐使用可读的有意义的字符串。
- 对于系统标签,和ZStack中服务和插件定义的一样, 他们使用
::作为分隔符。
资源类型(Resource Type)
创建一个标签时, 用户必须制定标签所关联的资源类型。
资源类型示例见下表:
|
AccountResourceRefVO |
| AccountVO |
| AffinityGroupUsageVO |
| AffinityGroupVO |
| AlarmLabelVO |
| AlarmVO |
| AlertVO |
| AliyunDiskVO |
| AliyunSnapshotVO |
| ApplianceVmFirewallRuleVO |
| ApplianceVmVO |
| AsyncRestVO |
| AvailableInstanceTypesVO |
| BackupStorageVO |
| BackupStorageZoneRefVO |
| BaremetalChassisVO |
| BaremetalConsoleProxyVO |
| BaremetalHardwareInfoVO |
| BaremetalHostBondingVO |
| BaremetalHostCfgVO |
| BaremetalHostNicCfgVO |
| BaremetalPxeServerVO |
| CephBackupStorageMonVO |
| CephBackupStorageVO |
| CephCapacityVO |
| CephPrimaryStorageMonVO |
| CephPrimaryStoragePoolVO |
| CephPrimaryStorageVO |
| ClusterVO |
| ConnectionAccessPointVO |
| ConnectionRelationShipVO |
| ConsoleProxyAgentVO |
| ConsoleProxyVO |
| DataCenterVO |
| DataVolumeUsageVO |
| DeleteVO |
| DiskOfferingVO |
| ESXHostVO |
| EcsImageUsageVO |
| EcsImageVO |
| EcsInstanceVO |
| EcsSecurityGroupRuleVO |
| EcsSecurityGroupVO |
| EcsVSwitchVO |
| EcsVpcVO |
| EipVO |
| EmailMediaVO |
| EmailTriggerActionVO |
| GarbageCollectorVO |
| GlobalConfigVO |
| HostCapacityVO |
| HostTagVO |
| HostVO |
| HybridAccountVO |
| HybridConnectionRefVO |
| HybridEipAddressVO |
| IPsecConnectionVO |
| IPsecL3NetworkRefVO |
| IPsecPeerCidrVO |
| IdentityZoneVO |
| ImageBackupStorageRefVO |
| ImageCacheShadowVO |
| ImageCacheVO |
| ImageCacheVolumeRefVO |
| ImageStoreBackupStorageVO |
| ImageVO |
| InsertVO |
| InstanceOfferingVO |
| IpRangeVO |
| IscsiFileSystemBackendPrimaryStorageVO |
| IscsiIsoVO |
| JobQueueEntryVO |
| JobQueueVO |
| JsonLabelVO |
| KVMHostVO |
| KeyValueBinaryVO |
| KeyValueVO |
| L2NetworkClusterRefVO |
| L2NetworkVO |
| L2VlanNetworkVO |
| L3NetworkDnsVO |
| L3NetworkVO |
| LdapAccountRefVO |
| LdapServerVO |
| LoadBalancerListenerVO |
| LoadBalancerListenerVmNicRefVO |
| LoadBalancerVO |
| LocalStorageHostRefVO |
| LocalStorageResourceRefVO |
| LogVO |
| LongJobVO |
| ManagementNodeContextVO |
| ManagementNodeVO |
| MediaVO |
| MonitorTriggerActionRefVO |
| MonitorTriggerActionVO |
| MonitorTriggerVO |
| NetworkServiceL3NetworkRefVO |
| NetworkServiceProviderL2NetworkRefVO |
| NetworkServiceProviderVO |
| NetworkServiceTypeVO |
| NotificationSubscriptionVO |
| NotificationVO |
| OssBucketVO |
| OssUploadPartsVO |
| PciDeviceOfferingVO |
| PciDevicePciDeviceOfferingRefVO |
| PciDeviceVO |
| PolicyVO |
| PortForwardingRuleVO |
| PriceVO |
| PrimaryStorageCapacityVO |
| PrimaryStorageClusterRefVO |
| PrimaryStorageHostRefVO |
| PrimaryStorageVO |
| QuartzJdbcJobVO |
| QuotaVO |
| ResourceVO |
| RootVolumeUsageVO |
| SchedulerJobSchedulerTriggerRefVO |
| SchedulerJobVO |
| SchedulerTriggerVO |
| SchedulerVO |
| SecurityGroupFailureHostVO |
| SecurityGroupL3NetworkRefVO |
| SecurityGroupRuleVO |
| SecurityGroupSequenceNumberVO |
| SecurityGroupVO |
| SessionVO |
| SftpBackupStorageVO |
| ShareableVolumeVmInstanceRefVO |
| SharedResourceVO |
| SimulatorHostVO |
| SnapShotUsageVO |
| SystemTagVO |
| TaskProgressVO |
| UpdateVO |
| UsbDeviceVO |
| UsedIpVO |
| UserGroupPolicyRefVO |
| UserGroupUserRefVO |
| UserGroupVO |
| UserPolicyRefVO |
| UserTagVO |
| UserVO |
| VCenterBackupStorageVO |
| VCenterClusterVO |
| VCenterDatacenterVO |
| VCenterPrimaryStorageVO |
| VCenterVO |
| VRouterRouteEntryVO |
| VRouterRouteTableVO |
| VipPeerL3NetworkRefVO |
| VipQosVO |
| VipVO |
| VirtualBorderRouterVO |
| VirtualRouterBootstrapIsoVO |
| VirtualRouterEipRefVO |
| VirtualRouterInterfaceVO |
| VirtualRouterLoadBalancerRefVO |
| VirtualRouterOfferingVO |
| VirtualRouterPortForwardingRuleRefVO |
| VirtualRouterVRouterRouteTableRefVO |
| VirtualRouterVipVO |
| VirtualRouterVmVO |
| VmInstanceSequenceNumberVO |
| VmInstanceVO |
| VmNicSecurityGroupRefVO |
| VmNicVO |
| VmUsageVO |
| VniRangeVO |
| VolumeSnapshotBackupStorageRefVO |
| VolumeSnapshotTreeVO |
| VolumeSnapshotVO |
| VolumeVO |
| VpcUserVpnGatewayVO |
| VpcVirtualRouteEntryVO |
| VpcVirtualRouterVO |
| VpcVpnConnectionVO |
| VpcVpnGatewayVO |
| VpcVpnIkeConfigVO |
| VpcVpnIpSecConfigVO |
| VtepVO |
| VxlanNetworkPoolVO |
| VxlanNetworkVO |
| WebhookVO |
| WorkFlowChainVO |
| WorkFlowVO |
| ZoneVO |
在每个资源的对应Tags章节中, 我们有解释需用什么资源类型来创建对应的标签。