diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index a4a3bc3eb73..347b3732f4b 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -130,8 +130,8 @@ public class UserVmResponse extends BaseResponse { @SerializedName("rootdevicetype") @Param(description="device type of the root volume") private String rootDeviceType; - @SerializedName("securitygrouplist") @Param(description="list of security groups associated with the virtual machine") - private String securityGroupList; + @SerializedName("securitygroup") @Param(description="list of security groups associated with the virtual machine", responseObject = SecurityGroupResponse.class) + private List securityGroupList; @SerializedName(ApiConstants.PASSWORD) @Param(description="the password (if exists) of the virtual machine") private String password; @@ -432,14 +432,6 @@ public class UserVmResponse extends BaseResponse { this.rootDeviceType = rootDeviceType; } - public String getSecurityGroupList() { - return securityGroupList; - } - - public void setSecurityGroupList(String securityGroupList) { - this.securityGroupList = securityGroupList; - } - public String getPassword() { return password; } @@ -479,4 +471,12 @@ public class UserVmResponse extends BaseResponse { public void setNics(List nics) { this.nics = nics; } + + public List getSecurityGroupList() { + return securityGroupList; + } + + public void setSecurityGroupList(List securityGroups) { + this.securityGroupList = securityGroups; + } } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index ac8a97f07b9..49c627ac1a7 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -43,6 +43,7 @@ import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkRuleConfigDao; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; +import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -250,6 +251,10 @@ public class ApiDBUtils { public static String getNetworkGroupsNamesForVm(long vmId) { return _networkGroupMgr.getSecurityGroupsNamesForVm(vmId); } + + public static List getSecurityGroupsForVm(long vmId) { + return _networkGroupMgr.getSecurityGroupsForVm(vmId); + } public static String getSnapshotIntervalTypes(long snapshotId) { String intervalTypes = ""; diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index ebb447ad075..cff3164c95c 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -112,6 +112,7 @@ import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.security.IngressRule; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupRules; +import com.cloud.network.security.SecurityGroupVO; import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; @@ -1097,9 +1098,20 @@ public class ApiResponseHelper implements ResponseGenerator { } userVmResponse.setGuestOsId(userVm.getGuestOSId()); - // network groups - userVmResponse.setSecurityGroupList(ApiDBUtils.getNetworkGroupsNamesForVm(userVm.getId())); - + // security groups + List securityGroups = ApiDBUtils.getSecurityGroupsForVm(userVm.getId()); + List securityGroupResponse = new ArrayList(); + for(SecurityGroupVO grp : securityGroups) { + SecurityGroupResponse resp = new SecurityGroupResponse(); + resp.setId(grp.getId()); + resp.setName(grp.getName()); + resp.setDescription(grp.getDescription()); + resp.setObjectName("securitygroup"); + securityGroupResponse.add(resp); + } + + userVmResponse.setSecurityGroupList(securityGroupResponse); + List nicProfiles = ApiDBUtils.getNics(userVm); List nicResponses = new ArrayList(); for (NicProfile singleNicProfile : nicProfiles) { diff --git a/server/src/com/cloud/network/security/SecurityGroupManager.java b/server/src/com/cloud/network/security/SecurityGroupManager.java index 0a8d1ae6020..10a9aa6934b 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManager.java +++ b/server/src/com/cloud/network/security/SecurityGroupManager.java @@ -43,4 +43,6 @@ public interface SecurityGroupManager { public void fullSync(long agentId, HashMap> newGroupStates); public String getSecurityGroupsNamesForVm(long vmId); + + public List getSecurityGroupsForVm(long vmId); } diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index c26a0c9baf1..813fd7c1476 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -1309,6 +1309,19 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } } + + @Override + public List getSecurityGroupsForVm(long vmId) { + ListsecurityGroupsToVmMap = _securityGroupVMMapDao.listByInstanceId(vmId); + List secGrps = new ArrayList(); + if(securityGroupsToVmMap != null && securityGroupsToVmMap.size() > 0) { + for(SecurityGroupVMMapVO sG : securityGroupsToVmMap) { + SecurityGroupVO currSg = _securityGroupDao.findById(sG.getSecurityGroupId()); + secGrps.add(currSg); + } + } + return secGrps; + } @Override public boolean preStateTransitionEvent(State oldState, Event event, State newState, VirtualMachine vo, boolean status, Long id) {