Skip to content

Commit 03f4887

Browse files
Boris Schrijverwido
authored andcommitted
CLOUDSTACK-8133 Added Virtualmachine count and ID's to listSecurityGroups response.
See issue CLOUDSTACK-8133 for more information. Added null check by comment of Koushik Das. Added brackets by comment of Wido den Hollander. Removed a call to findById() by comment of Koushik Das. Signed-off-by: Wido den Hollander <wido@widodh.nl>
1 parent 792c27c commit 03f4887

3 files changed

Lines changed: 45 additions & 7 deletions

File tree

api/src/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ public class ApiConstants {
271271
public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
272272
public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
273273
public static final String VIRTUAL_MACHINE_ID_IP = "vmidipmap";
274+
public static final String VIRTUAL_MACHINE_COUNT = "virtualmachinecount";
274275
public static final String USAGE_ID = "usageid";
275276

276277
public static final String VLAN = "vlan";

api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@
1919
import java.util.LinkedHashSet;
2020
import java.util.Set;
2121

22-
import com.google.gson.annotations.SerializedName;
23-
2422
import org.apache.cloudstack.api.ApiConstants;
2523
import org.apache.cloudstack.api.BaseResponse;
2624
import org.apache.cloudstack.api.EntityReference;
2725

2826
import com.cloud.network.security.SecurityGroup;
2927
import com.cloud.serializer.Param;
28+
import com.google.gson.annotations.SerializedName;
3029

3130
@SuppressWarnings("unused")
3231
@EntityReference(value = SecurityGroup.class)
@@ -76,7 +75,16 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
7675
@Param(description = "the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class)
7776
private Set<ResourceTagResponse> tags;
7877

78+
@SerializedName(ApiConstants.VIRTUAL_MACHINE_COUNT)
79+
@Param(description = "the number of virtualmachines associated with this securitygroup", since = "4.6.0")
80+
private Integer virtualMachineCount;
81+
82+
@SerializedName(ApiConstants.VIRTUAL_MACHINE_IDS)
83+
@Param(description = "the list of virtualmachine ids associated with this securitygroup", since = "4.6.0")
84+
private Set<String> virtualMachineIds;
85+
7986
public SecurityGroupResponse() {
87+
this.virtualMachineIds = new LinkedHashSet<String>();
8088
this.ingressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
8189
this.egressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
8290
this.tags = new LinkedHashSet<ResourceTagResponse>();
@@ -176,4 +184,16 @@ public void setTags(Set<ResourceTagResponse> tags) {
176184
public void addTag(ResourceTagResponse tag) {
177185
this.tags.add(tag);
178186
}
187+
188+
public void setVirtualMachineCount(Integer virtualMachineCount) {
189+
this.virtualMachineCount = virtualMachineCount;
190+
}
191+
192+
public void setVirtualMachineIds(Set<String> virtualMachineIds) {
193+
this.virtualMachineIds = virtualMachineIds;
194+
}
195+
196+
public void addVirtualMachineId(String virtualMachineId) {
197+
this.virtualMachineIds.add(virtualMachineId);
198+
}
179199
}

server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,28 @@
2424
import javax.ejb.Local;
2525
import javax.inject.Inject;
2626

27-
import com.cloud.server.ResourceTag;
2827
import org.apache.cloudstack.api.response.ResourceTagResponse;
29-
import org.apache.log4j.Logger;
30-
import org.springframework.stereotype.Component;
31-
3228
import org.apache.cloudstack.api.response.SecurityGroupResponse;
3329
import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
3430
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
31+
import org.apache.log4j.Logger;
32+
import org.springframework.stereotype.Component;
3533

3634
import com.cloud.api.ApiDBUtils;
3735
import com.cloud.api.ApiResponseHelper;
3836
import com.cloud.api.query.vo.ResourceTagJoinVO;
3937
import com.cloud.api.query.vo.SecurityGroupJoinVO;
4038
import com.cloud.network.security.SecurityGroup;
39+
import com.cloud.network.security.SecurityGroupVMMapVO;
4140
import com.cloud.network.security.SecurityRule.SecurityRuleType;
41+
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
42+
import com.cloud.server.ResourceTag;
4243
import com.cloud.user.Account;
4344
import com.cloud.utils.db.GenericDaoBase;
4445
import com.cloud.utils.db.SearchBuilder;
4546
import com.cloud.utils.db.SearchCriteria;
47+
import com.cloud.vm.UserVmVO;
48+
import com.cloud.vm.dao.UserVmDao;
4649

4750
@Component
4851
@Local(value = {SecurityGroupJoinDao.class})
@@ -51,9 +54,12 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
5154

5255
@Inject
5356
private ConfigurationDao _configDao;
54-
5557
@Inject
5658
private ResourceTagJoinDao _resourceTagJoinDao;
59+
@Inject
60+
private SecurityGroupVMMapDao _securityGroupVMMapDao;
61+
@Inject
62+
private UserVmDao _userVmDao;
5763

5864
private final SearchBuilder<SecurityGroupJoinVO> sgSearch;
5965

@@ -125,6 +131,17 @@ public SecurityGroupResponse newSecurityGroupResponse(SecurityGroupJoinVO vsg, A
125131
}
126132
}
127133

134+
List<SecurityGroupVMMapVO> securityGroupVmMap = _securityGroupVMMapDao.listBySecurityGroup(vsg.getId());
135+
s_logger.debug("newSecurityGroupResponse() -> virtualmachine count: " + securityGroupVmMap.size());
136+
sgResponse.setVirtualMachineCount(securityGroupVmMap.size());
137+
138+
for(SecurityGroupVMMapVO securityGroupVMMapVO : securityGroupVmMap) {
139+
final UserVmVO userVmVO = _userVmDao.findById(securityGroupVMMapVO.getInstanceId());
140+
if (userVmVO != null) {
141+
sgResponse.addVirtualMachineId(userVmVO.getUuid());
142+
}
143+
}
144+
128145
// update tag information
129146
Long tag_id = vsg.getTagId();
130147
if (tag_id != null && tag_id.longValue() > 0) {

0 commit comments

Comments
 (0)