diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index fe9303832ff..e20966237ee 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -1269,6 +1269,11 @@ public class EC2RestServlet extends HttpServlet { } if (0 == count) { response.sendError(530, "Missing InstanceId parameter" ); return; } + String[] force = request.getParameterValues("Force"); + if ( force != null) { + EC2request.setForce( Boolean.parseBoolean(force[0])); + } + // -> execute the request StopInstancesResponse EC2response = EC2SoapServiceImpl.toStopInstancesResponse( ServiceProvider.getInstance().getEC2Engine().stopInstances( EC2request )); serializeResponse(response, EC2response); diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java index 4e9445e8089..9fc581be86f 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java +++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java @@ -773,6 +773,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { public StopInstancesResponse stopInstances(StopInstances stopInstances) { EC2StopInstances request = new EC2StopInstances(); StopInstancesType sit = stopInstances.getStopInstances(); + Boolean force = sit.getForce(); // -> toEC2StopInstances InstanceIdSetType iist = sit.getInstancesSet(); @@ -780,6 +781,8 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { if (null != items) { // -> should not be empty for( int i=0; i < items.length; i++ ) request.addInstanceId( items[i].getInstanceId()); } + + if (force) request.setForce(sit.getForce()); return toStopInstancesResponse( engine.stopInstances( request )); } 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 277cdc80f8c..a835d8a258b 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -1512,6 +1512,7 @@ public class EC2Engine extends ManagerBase { // -> first determine the current state of each VM (becomes it previous state) try { String[] instanceSet = request.getInstancesSet(); + Boolean forced = request.getForce(); EC2DescribeInstancesResponse previousState = listVirtualMachines( instanceSet, null, null ); virtualMachines = previousState.getInstanceSet(); @@ -1533,7 +1534,7 @@ public class EC2Engine extends ManagerBase { instances.addInstance(vm); continue; } - resp = getApi().stopVirtualMachine(vm.getId(), false); + resp = getApi().stopVirtualMachine(vm.getId(), forced); if(logger.isDebugEnabled()) logger.debug("Stopping VM " + vm.getId() + " job " + resp.getJobId()); } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java index 13e23d1a51f..be140008019 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java @@ -23,6 +23,7 @@ public class EC2StopInstances { private List instancesSet = new ArrayList(); // a list of strings identifying instances private boolean destroyInstances; // we are destroying the instances rather than stopping them + private Boolean force = false; public EC2StopInstances() { destroyInstances = false; @@ -43,5 +44,13 @@ public class EC2StopInstances { public boolean getDestroyInstances() { return this.destroyInstances; } + + public void setForce( Boolean force ) { + this.force = force; + } + + public Boolean getForce() { + return this.force; + } }