diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index ca910e03ba3..5788b352a82 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -86,6 +86,7 @@ import com.amazon.ec2.DescribeVolumesResponse; import com.amazon.ec2.DetachVolumeResponse; import com.amazon.ec2.DisassociateAddressResponse; import com.amazon.ec2.GetPasswordDataResponse; +import com.amazon.ec2.GroupItemType; import com.amazon.ec2.ImportKeyPairResponse; import com.amazon.ec2.LaunchPermissionItemType; import com.amazon.ec2.ModifyImageAttributeResponse; @@ -1168,6 +1169,16 @@ public class EC2RestServlet extends HttpServlet { EC2request.setKeyName(keyName[0]); } + Enumeration names = request.getParameterNames(); + while( names.hasMoreElements()) { + String key = (String)names.nextElement(); + if ( key.startsWith("SecurityGroup")) { + String[] value = request.getParameterValues(key); + if (null != value && 0 < value.length) + EC2request.addGroupName( value[0]); + } + } + // -> execute the request EC2Engine engine = ServiceProvider.getInstance().getEC2Engine(); RunInstancesResponse EC2response = EC2SoapServiceImpl.toRunInstancesResponse( engine.runInstances( EC2request ), engine); @@ -1681,10 +1692,10 @@ public class EC2RestServlet extends HttpServlet { Enumeration names = request.getParameterNames(); while( names.hasMoreElements()) { String key = (String)names.nextElement(); - if (key.startsWith("KeyName")) { - String[] value = request.getParameterValues( key ); + if ( key.startsWith("KeyName")) { + String[] value = request.getParameterValues( key); if (null != value && 0 < value.length) - ec2Request.addKeyName(value[0]); + ec2Request.addKeyName( value[0]); } } diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java index 6fae480e222..bf3c13eda9c 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java +++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java @@ -1354,15 +1354,15 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { GroupSetType param4 = new GroupSetType(); - String[] groups = inst.getGroupSet(); + EC2SecurityGroup[] groups = inst.getGroupSet(); if (null == groups || 0 == groups.length) { GroupItemType param5 = new GroupItemType(); param5.setGroupId(""); param4.addItem( param5 ); } else { - for (String group : groups) { + for (EC2SecurityGroup group : groups) { GroupItemType param5 = new GroupItemType(); - param5.setGroupId(group); + param5.setGroupId(group.getId()); param4.addItem( param5 ); } } @@ -1681,16 +1681,16 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param1.setOwnerId(ownerId); - String[] groups = inst.getGroupSet(); + EC2SecurityGroup[] groups = inst.getGroupSet(); GroupSetType param2 = new GroupSetType(); if (null == groups || 0 == groups.length) { GroupItemType param3 = new GroupItemType(); param3.setGroupId(""); param2.addItem( param3 ); } else { - for (String group : groups) { + for (EC2SecurityGroup group : groups) { GroupItemType param3 = new GroupItemType(); - param3.setGroupId(group); + param3.setGroupId(group.getId()); param2.addItem( param3 ); } } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java index 2f45b03ae06..e64cdfc49c9 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -1459,10 +1459,12 @@ public class EC2Engine extends ManagerBase { vm.setZoneName(resp.getZoneName()); vm.setTemplateId(resp.getTemplateId().toString()); if (resp.getSecurityGroupList() != null && resp.getSecurityGroupList().size() > 0) { - // TODO, we have a list of security groups, just return the first one? List securityGroupList = resp.getSecurityGroupList(); for (CloudStackSecurityGroup securityGroup : securityGroupList) { - vm.addGroupName(securityGroup.getName()); + EC2SecurityGroup param = new EC2SecurityGroup(); + param.setId(securityGroup.getId()); + param.setName(securityGroup.getName()); + vm.addGroupName(param); } } vm.setState(resp.getState()); @@ -1883,10 +1885,12 @@ public class EC2Engine extends ManagerBase { } if (cloudVm.getSecurityGroupList() != null && cloudVm.getSecurityGroupList().size() > 0) { - // TODO, we have a list of security groups, just return the first one? List securityGroupList = cloudVm.getSecurityGroupList(); for (CloudStackSecurityGroup securityGroup : securityGroupList) { - ec2Vm.addGroupName(securityGroup.getName()); + EC2SecurityGroup param = new EC2SecurityGroup(); + param.setId(securityGroup.getId()); + param.setName(securityGroup.getName()); + ec2Vm.addGroupName(param); } } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java index 9b43cb74299..9dfd1ca8ad2 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java @@ -41,7 +41,7 @@ public class EC2Instance { private String rootDeviceType; private String rootDeviceId; private String keyPairName; - private List groupSet; + private List groupSet; private List tagsSet; public EC2Instance() { @@ -62,7 +62,7 @@ public class EC2Instance { rootDeviceType = null; rootDeviceId = null; keyPairName = null; - groupSet = new ArrayList(); + groupSet = new ArrayList(); tagsSet = new ArrayList(); } @@ -202,12 +202,12 @@ public class EC2Instance { keyPairName = param; } - public void addGroupName( String param ) { + public void addGroupName( EC2SecurityGroup param ) { groupSet.add( param ); } - - public String[] getGroupSet() { - return groupSet.toArray(new String[0]); + + public EC2SecurityGroup[] getGroupSet() { + return groupSet.toArray(new EC2SecurityGroup[0]); } public void addResourceTag( EC2TagKeyValue param ) { diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java index 449d89e2180..e0aae7364d9 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java @@ -159,9 +159,10 @@ public class EC2InstanceFilterSet { } else if (filterName.equalsIgnoreCase( "group-id")) { - String[] groupSet = vm.getGroupSet(); - for (String group : groupSet) - if (containsString(group, valueSet)) return true; + EC2SecurityGroup[] groupSet = vm.getGroupSet(); + for (EC2SecurityGroup group: groupSet) { + if( containsString(group.getId(), valueSet)) return true; + } return false; } else if (filterName.equalsIgnoreCase("tag-key"))