diff --git a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java index f45d8c9e771..9367057a224 100644 --- a/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListSecurityGroupsCmd.java @@ -51,6 +51,9 @@ public class ListSecurityGroupsCmd extends BaseListCmd { @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.LONG, description="lists security groups by virtual machine id") private Long virtualMachineId; + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list the security group by the id provided") + private Long id; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -70,6 +73,10 @@ public class ListSecurityGroupsCmd extends BaseListCmd { public Long getVirtualMachineId() { return virtualMachineId; } + + public Long getId(){ + return id; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index d0a68ec1f5e..f564137caac 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -1203,6 +1203,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG Long instanceId = cmd.getVirtualMachineId(); String networkGroup = cmd.getSecurityGroupName(); Boolean recursive = Boolean.FALSE; + Long id = cmd.getId(); // permissions check if ((account == null) || isAdmin(account.getType())) { @@ -1253,6 +1254,15 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } } + List securityRulesList = new ArrayList(); + + if(id != null){ + SecurityGroupRulesVO secGrp = _securityGroupRulesDao.findById(id); + if(secGrp != null) + securityRulesList.add(secGrp); + return securityRulesList; + } + Filter searchFilter = new Filter(SecurityGroupVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); Object keyword = cmd.getKeyword(); @@ -1288,20 +1298,19 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG } } - List networkGroups = _securityGroupDao.search(sc, searchFilter); - List networkRulesList = new ArrayList(); - for (SecurityGroupVO group : networkGroups) { - networkRulesList.addAll(_securityGroupRulesDao.listSecurityRulesByGroupId(group.getId())); + List securityGroups = _securityGroupDao.search(sc, searchFilter); + for (SecurityGroupVO group : securityGroups) { + securityRulesList.addAll(_securityGroupRulesDao.listSecurityRulesByGroupId(group.getId())); } if (instanceId != null) { - return listNetworkGroupRulesByVM(instanceId.longValue()); + return listSecurityGroupRulesByVM(instanceId.longValue()); } - return networkRulesList; + return securityRulesList; } - private List listNetworkGroupRulesByVM(long vmId) { + private List listSecurityGroupRulesByVM(long vmId) { List results = new ArrayList(); List networkGroupMappings = _securityGroupVMMapDao.listByInstanceId(vmId); if (networkGroupMappings != null) {