概览
ZStack提供两类标签帮助用户和插件管理资源, 引入额外的资源属性,以及指挥ZStack执行特殊的业务逻辑。
用户标签(User Tags)
- 用户可以在所拥有的资源上创建用户标签,这对于管理相似资源的聚集特别有用。例如,用户可以为作为网页服务器的云主机设置一个标签web:
-
CreateUserTag resourceType=VmInstanceVO \ resourceUuid=613af3fe005914c1643a15c36fd578c6 tag=web
CreateUserTag resourceType=VmInstanceVO \ resourceUuid=5eb55c39db015c1782c7d814900a9609 tag=web
CreateUserTag 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章节中, 我们有解释需用什么资源类型来创建对应的标签。