Skip to content

Commit d94ad99

Browse files
committed
api,server,ui: support tags for domains
Fixes #11608 Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent bfc4f60 commit d94ad99

5 files changed

Lines changed: 59 additions & 30 deletions

File tree

api/src/main/java/com/cloud/server/ResourceTag.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
// under the License.
1717
package com.cloud.server;
1818

19-
import org.apache.cloudstack.acl.ControlledEntity;
20-
import org.apache.cloudstack.api.Identity;
21-
import org.apache.cloudstack.api.InternalIdentity;
22-
2319
import java.util.HashMap;
2420
import java.util.Locale;
2521
import java.util.Map;
2622

23+
import org.apache.cloudstack.acl.ControlledEntity;
24+
import org.apache.cloudstack.api.Identity;
25+
import org.apache.cloudstack.api.InternalIdentity;
26+
2727
public interface ResourceTag extends ControlledEntity, Identity, InternalIdentity {
2828

2929
// FIXME - extract enum to another interface as its used both by resourceTags and resourceMetaData code
@@ -70,7 +70,7 @@ public enum ResourceObjectType {
7070
GuestOs(false, true),
7171
NetworkOffering(false, true),
7272
VpcOffering(true, false),
73-
Domain(false, false, true),
73+
Domain(true, false, true),
7474
ObjectStore(false, false, true);
7575

7676

api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.response;
1818

19-
import com.google.gson.annotations.SerializedName;
19+
import java.util.Date;
20+
import java.util.List;
21+
import java.util.Map;
22+
import java.util.Set;
2023

2124
import org.apache.cloudstack.api.ApiConstants;
22-
import org.apache.cloudstack.api.BaseResponseWithAnnotations;
25+
import org.apache.cloudstack.api.BaseResponseWithTagInformation;
2326
import org.apache.cloudstack.api.EntityReference;
2427

2528
import com.cloud.domain.Domain;
2629
import com.cloud.serializer.Param;
27-
28-
import java.util.Date;
29-
import java.util.List;
30-
import java.util.Map;
30+
import com.google.gson.annotations.SerializedName;
3131

3232
@EntityReference(value = Domain.class)
33-
public class DomainResponse extends BaseResponseWithAnnotations implements ResourceLimitAndCountResponse, SetResourceIconResponse {
33+
public class DomainResponse extends BaseResponseWithTagInformation implements ResourceLimitAndCountResponse, SetResourceIconResponse {
3434
@SerializedName(ApiConstants.ID)
3535
@Param(description = "the ID of the domain")
3636
private String id;
@@ -589,4 +589,8 @@ public void setDetails(Map<String, String> details) {
589589
public void setTaggedResourceLimitsAndCounts(List<TaggedResourceLimitAndCountResponse> taggedResourceLimitsAndCounts) {
590590
this.taggedResources = taggedResourceLimitsAndCounts;
591591
}
592+
593+
public void setTags(Set<ResourceTagResponse> tags) {
594+
this.tags = tags;
595+
}
592596
}

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,6 @@
3939

4040
import javax.inject.Inject;
4141

42-
import com.cloud.bgp.ASNumber;
43-
import com.cloud.bgp.ASNumberRange;
44-
import com.cloud.configuration.ConfigurationService;
45-
import com.cloud.dc.ASNumberRangeVO;
46-
import com.cloud.dc.ASNumberVO;
47-
import com.cloud.dc.VlanDetailsVO;
48-
import com.cloud.dc.dao.ASNumberDao;
49-
import com.cloud.dc.dao.ASNumberRangeDao;
50-
import com.cloud.dc.dao.VlanDetailsDao;
51-
import com.cloud.hypervisor.Hypervisor;
52-
import com.cloud.network.vpc.VpcGateway;
53-
import com.cloud.storage.BucketVO;
5442
import org.apache.cloudstack.acl.ControlledEntity;
5543
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
5644
import org.apache.cloudstack.affinity.AffinityGroup;
@@ -276,14 +264,19 @@
276264
import com.cloud.api.query.vo.VolumeJoinVO;
277265
import com.cloud.api.query.vo.VpcOfferingJoinVO;
278266
import com.cloud.api.response.ApiResponseSerializer;
267+
import com.cloud.bgp.ASNumber;
268+
import com.cloud.bgp.ASNumberRange;
279269
import com.cloud.capacity.Capacity;
280270
import com.cloud.capacity.CapacityVO;
281271
import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
282272
import com.cloud.configuration.ConfigurationManager;
273+
import com.cloud.configuration.ConfigurationService;
283274
import com.cloud.configuration.Resource.ResourceOwnerType;
284275
import com.cloud.configuration.Resource.ResourceType;
285276
import com.cloud.configuration.ResourceCount;
286277
import com.cloud.configuration.ResourceLimit;
278+
import com.cloud.dc.ASNumberRangeVO;
279+
import com.cloud.dc.ASNumberVO;
287280
import com.cloud.dc.ClusterDetailsDao;
288281
import com.cloud.dc.ClusterVO;
289282
import com.cloud.dc.DataCenter;
@@ -294,7 +287,11 @@
294287
import com.cloud.dc.StorageNetworkIpRange;
295288
import com.cloud.dc.Vlan;
296289
import com.cloud.dc.Vlan.VlanType;
290+
import com.cloud.dc.VlanDetailsVO;
297291
import com.cloud.dc.VlanVO;
292+
import com.cloud.dc.dao.ASNumberDao;
293+
import com.cloud.dc.dao.ASNumberRangeDao;
294+
import com.cloud.dc.dao.VlanDetailsDao;
298295
import com.cloud.domain.Domain;
299296
import com.cloud.domain.DomainVO;
300297
import com.cloud.event.Event;
@@ -303,6 +300,7 @@
303300
import com.cloud.host.ControlState;
304301
import com.cloud.host.Host;
305302
import com.cloud.host.HostVO;
303+
import com.cloud.hypervisor.Hypervisor;
306304
import com.cloud.hypervisor.HypervisorCapabilities;
307305
import com.cloud.network.GuestVlan;
308306
import com.cloud.network.GuestVlanRange;
@@ -366,6 +364,7 @@
366364
import com.cloud.network.vpc.PrivateGateway;
367365
import com.cloud.network.vpc.StaticRoute;
368366
import com.cloud.network.vpc.Vpc;
367+
import com.cloud.network.vpc.VpcGateway;
369368
import com.cloud.network.vpc.VpcOffering;
370369
import com.cloud.network.vpc.VpcVO;
371370
import com.cloud.network.vpc.dao.VpcOfferingDao;
@@ -387,6 +386,7 @@
387386
import com.cloud.server.ResourceTag;
388387
import com.cloud.server.ResourceTag.ResourceObjectType;
389388
import com.cloud.service.ServiceOfferingVO;
389+
import com.cloud.storage.BucketVO;
390390
import com.cloud.storage.DataStoreRole;
391391
import com.cloud.storage.DiskOfferingVO;
392392
import com.cloud.storage.GuestOS;
@@ -583,6 +583,16 @@ public DomainResponse createDomainResponse(Domain domain) {
583583
if (domain.getChildCount() > 0) {
584584
domainResponse.setHasChild(true);
585585
}
586+
List<ResourceTagJoinVO> tags = ApiDBUtils.listResourceTagViewByResourceUUID(domain.getUuid(),
587+
ResourceTag.ResourceObjectType.Domain);
588+
if (CollectionUtils.isNotEmpty(tags)) {
589+
Set<ResourceTagResponse> tagResponses = new HashSet<>();
590+
for (ResourceTagJoinVO tag : tags) {
591+
ResourceTagResponse tagResponse = ApiDBUtils.newResourceTagResponse(tag, true);
592+
tagResponses.add(tagResponse);
593+
}
594+
domainResponse.setTags(tagResponses);
595+
}
586596
domainResponse.setObjectName("domain");
587597
return domainResponse;
588598
}

server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,37 @@
1818

1919
import java.util.ArrayList;
2020
import java.util.EnumSet;
21+
import java.util.HashSet;
2122
import java.util.List;
23+
import java.util.Set;
2224

25+
import javax.inject.Inject;
2326

24-
import com.cloud.api.ApiResponseHelper;
25-
import com.cloud.configuration.Resource;
26-
import com.cloud.user.AccountManager;
2727
import org.apache.cloudstack.annotation.AnnotationService;
2828
import org.apache.cloudstack.annotation.dao.AnnotationDao;
2929
import org.apache.cloudstack.api.ApiConstants.DomainDetails;
3030
import org.apache.cloudstack.api.ResponseObject.ResponseView;
3131
import org.apache.cloudstack.api.response.DomainResponse;
3232
import org.apache.cloudstack.api.response.ResourceLimitAndCountResponse;
33+
import org.apache.cloudstack.api.response.ResourceTagResponse;
3334
import org.apache.cloudstack.context.CallContext;
3435
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
36+
import org.apache.commons.collections.CollectionUtils;
3537
import org.springframework.stereotype.Component;
3638

3739
import com.cloud.api.ApiDBUtils;
40+
import com.cloud.api.ApiResponseHelper;
3841
import com.cloud.api.query.vo.DomainJoinVO;
42+
import com.cloud.api.query.vo.ResourceTagJoinVO;
43+
import com.cloud.configuration.Resource;
3944
import com.cloud.configuration.Resource.ResourceType;
4045
import com.cloud.domain.Domain;
46+
import com.cloud.server.ResourceTag;
47+
import com.cloud.user.AccountManager;
4148
import com.cloud.utils.db.GenericDaoBase;
4249
import com.cloud.utils.db.SearchBuilder;
4350
import com.cloud.utils.db.SearchCriteria;
4451

45-
import javax.inject.Inject;
46-
4752
@Component
4853
public class DomainJoinDaoImpl extends GenericDaoBase<DomainJoinVO, Long> implements DomainJoinDao {
4954

@@ -110,6 +115,16 @@ public DomainResponse newDomainResponse(ResponseView view, EnumSet<DomainDetails
110115
}
111116

112117
domainResponse.setDetails(ApiDBUtils.getDomainDetails(domain.getId()));
118+
List<ResourceTagJoinVO> tags = ApiDBUtils.listResourceTagViewByResourceUUID(domain.getUuid(),
119+
ResourceTag.ResourceObjectType.Domain);
120+
if (CollectionUtils.isNotEmpty(tags)) {
121+
Set<ResourceTagResponse> tagResponses = new HashSet<>();
122+
for (ResourceTagJoinVO tag : tags) {
123+
ResourceTagResponse tagResponse = ApiDBUtils.newResourceTagResponse(tag, true);
124+
tagResponses.add(tagResponse);
125+
}
126+
domainResponse.setTags(tagResponses);
127+
}
113128
domainResponse.setObjectName("domain");
114129

115130
return domainResponse;

ui/src/components/view/InfoCard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ export default {
10941094
return ['UserVm', 'Template', 'ISO', 'Volume', 'Snapshot', 'Backup', 'Network',
10951095
'LoadBalancer', 'PortForwardingRule', 'FirewallRule', 'SecurityGroup', 'SecurityGroupRule',
10961096
'PublicIpAddress', 'Project', 'Account', 'Vpc', 'NetworkACL', 'StaticRoute', 'VMSnapshot',
1097-
'RemoteAccessVpn', 'User', 'SnapshotPolicy', 'VpcOffering']
1097+
'RemoteAccessVpn', 'User', 'SnapshotPolicy', 'VpcOffering', 'Domain']
10981098
},
10991099
name () {
11001100
return this.resource.displayname || this.resource.name || this.resource.displaytext || this.resource.username ||

0 commit comments

Comments
 (0)