List of usage examples for com.amazonaws.services.ec2.model InstanceStateChange getCurrentState
public InstanceState getCurrentState()
The current state of the instance.
From source file:ca.roussil.ec2instancestarter.SimpleEc2Service.java
License:Open Source License
/** * Wait for a instance to complete transitioning (i.e. status not being in * INSTANCE_STATE_IN_PROGRESS_SET or the instance no longer existing). * //from w ww . j a va 2 s . co m * @param stateChangeList * @param instancebuilder * @param instanceId * @param BuildLogger * @throws InterruptedException * @throws Exception */ private final String waitForTransitionCompletion(List<InstanceStateChange> stateChangeList, final String desiredState, String instanceId) throws InterruptedException { Boolean transitionCompleted = false; InstanceStateChange stateChange = stateChangeList.get(0); String previousState = stateChange.getPreviousState().getName(); String currentState = stateChange.getCurrentState().getName(); String transitionReason = ""; while (!transitionCompleted) { try { Instance instance = getSingleEc2InstanceById(instanceId); currentState = instance.getState().getName(); if (previousState.equals(currentState)) { log.info("... '" + instanceId + "' is still in state " + currentState + " ..."); } else { log.info("... '" + instanceId + "' entered state " + currentState + " ..."); transitionReason = instance.getStateTransitionReason(); } previousState = currentState; if (currentState.equals(desiredState)) { transitionCompleted = true; } } catch (AmazonServiceException ase) { log.error("Failed to describe instance '" + instanceId + "'!", ase); throw ase; } // Sleep for WAIT_FOR_TRANSITION_INTERVAL seconds until transition // has completed. if (!transitionCompleted) { Thread.sleep(WAIT_FOR_TRANSITION_INTERVAL); } } log.info("Transition of instance '" + instanceId + "' completed with state " + currentState + " (" + (StringUtils.isEmpty(transitionReason) ? "Unknown transition reason" : transitionReason) + ")."); return currentState; }
From source file:com.github.vatbub.awsvpnlauncher.Main.java
License:Apache License
/** * Terminates all AWS instances that were started using this app * * @see #launch()/*from ww w . j a v a2s . c om*/ */ private static void terminate() { String instanceIdsPrefValue = prefs.getPreference("instanceIDs", ""); if (instanceIdsPrefValue.equals("")) { throw new IllegalStateException( "No instance was started with this script so no instance can be terminated. Launch a new instance using the launch command prior to terminate it."); } FOKLogger.info(Main.class.getName(), "Sending the termination request to AWS EC2..."); List<String> instanceIds = Arrays.asList(instanceIdsPrefValue.split(";")); for (String instanceId : instanceIds) { try { List<String> instanceIdCopy = new ArrayList<>(); instanceIdCopy.add(instanceId); TerminateInstancesRequest request = new TerminateInstancesRequest(instanceIdCopy); TerminateInstancesResult result = client.terminateInstances(request); for (InstanceStateChange item : result.getTerminatingInstances()) { FOKLogger.info(Main.class.getName(), "Terminated instance: " + item.getInstanceId() + ", instance state changed from " + item.getPreviousState() + " to " + item.getCurrentState()); } } catch (AmazonEC2Exception e) { FOKLogger.severe(Main.class.getName(), "Could not terminate instance " + instanceId + ": " + e.getMessage()); } } try { String cloudflareAPIKey = prefs.getPreference(Property.cloudflareAPIKey); String cloudflareEmail = prefs.getPreference(Property.cloudflareEmail); String targetDomain = prefs.getPreference(Property.cloudflareTargetZoneId); String cloudflareRecordID = prefs.getPreference("cloudflareRecordID", "0"); CloudflareAccess cloudflareAccess = new CloudflareAccess(cloudflareEmail, cloudflareAPIKey); DNSDeleteRecord cloudFlareDeleteDNSRecordRequest = new DNSDeleteRecord(cloudflareAccess, targetDomain, cloudflareRecordID); FOKLogger.info(Main.class.getName(), "Deleting the DNS record on cloudflare..."); JSONObject cloudflareResult = cloudFlareDeleteDNSRecordRequest.executeBasic(); if (cloudflareResult == null) { FOKLogger.severe(Main.class.getName(), "Something went wrong while deleting the DNS record for the vpn server on Cloudflare."); } else { prefs.setPreference("cloudflareRecordID", "0"); FOKLogger.info(Main.class.getName(), "The DNS record for the VPN Server was successfully deleted"); FOKLogger.fine(Main.class.getName(), "Cloudflare request result:"); FOKLogger.fine(Main.class.getName(), cloudflareResult.toString()); } } catch (PropertyNotConfiguredException e) { FOKLogger.info(Main.class.getName(), "Cloudflare config is not defined, not sending the ip to cloudflare"); } catch (CloudflareError e) { FOKLogger.log(Main.class.getName(), Level.SEVERE, "Something went wrong while deleting the DNS record for the vpn server on Cloudflare.", e); } // Delete the config value prefs.setPreference("instanceIDs", ""); }
From source file:com.intuit.tank.vmManager.environment.amazon.AmazonDataConverter.java
License:Open Source License
public List<VMInformation> processStateChange(List<InstanceStateChange> changes) { List<VMInformation> output = new ArrayList<VMInformation>(); try {// w ww .j ava2 s. c o m for (InstanceStateChange instance : changes) { VMInformation info = new VMInformation(); info.setInstanceId(instance.getInstanceId()); info.setState(instance.getCurrentState().getName()); output.add(info); } return output; } catch (Exception ex) { LOG.error(ex.getMessage(), ex); if (ex instanceof RuntimeException) { throw (RuntimeException) ex; } throw new RuntimeException(ex); } }
From source file:com.lunabeat.pooper.commands.AppCommand.java
License:Apache License
private void terminateCluster(String clusterName) { HadoopCluster cluster = new HadoopCluster(clusterName, _config); TerminateInstancesResult tr = cluster.terminateCluster(); if (tr == null || tr.getTerminatingInstances().isEmpty()) { out.println("no instances terminated."); System.exit(0);/*from www .j a va2s. c o m*/ } out.println("Terminating " + tr.getTerminatingInstances().size() + " instances."); for (InstanceStateChange i : tr.getTerminatingInstances()) { out.println("\t" + i.getInstanceId() + " " + i.getPreviousState().getName() + " -> " + i.getCurrentState().getName()); } out.println("Success."); }
From source file:com.lunabeat.pooper.commands.AppCommand.java
License:Apache License
private void terminateSlaves(String[] args) { String clusterName = args[0]; int nodes = Integer.parseInt(args[1]); HadoopCluster cluster = new HadoopCluster(clusterName, _config); TerminateInstancesResult tr = cluster.terminateSlaves(nodes); if (tr == null || tr.getTerminatingInstances().isEmpty()) { out.println("no instances terminated."); System.exit(0);/*from ww w.j a v a 2 s . c om*/ } out.println("Terminating " + tr.getTerminatingInstances().size() + " instances."); for (InstanceStateChange i : tr.getTerminatingInstances()) { out.println("\t" + i.getInstanceId() + " " + i.getPreviousState().getName() + "-> " + i.getCurrentState().getName()); } out.println("Success."); }
From source file:com.rmn.qa.aws.AwsVmManager.java
License:Open Source License
/** * Terminates the specified instance.// w w w .jav a 2 s . c o m * * @param instanceId Id of the instance to terminate */ public boolean terminateInstance(final String instanceId) { TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest(); terminateRequest.withInstanceIds(instanceId); AmazonEC2Client localClient = getClient(); if (localClient == null) { throw new RuntimeException("The client is not initialized"); } TerminateInstancesResult result; try { result = localClient.terminateInstances(terminateRequest); } catch (AmazonServiceException ase) { // If the node was terminated outside of this plugin, handle the error appropriately if (ase.getErrorCode().equals("InvalidInstanceID.NotFound")) { log.error("Node not found when attempting to remove: " + instanceId); return false; } else { throw ase; } } List<InstanceStateChange> stateChanges = result.getTerminatingInstances(); boolean terminatedInstance = false; for (InstanceStateChange stateChange : stateChanges) { if (instanceId.equals(stateChange.getInstanceId())) { terminatedInstance = true; InstanceState currentState = stateChange.getCurrentState(); if (currentState.getCode() != 32 && currentState.getCode() != 48) { log.error(String.format( "Machine state for id %s should be terminated (48) or shutting down (32) but was %s instead", instanceId, currentState.getCode())); return false; } } } if (!terminatedInstance) { log.error("Matching terminated instance was not found for instance " + instanceId); return false; } log.info(String.format("Node [%s] successfully terminated", instanceId)); return true; }
From source file:de.fischer.thotti.ec2.clients.EC2Starter.java
License:Apache License
private void executeRequest(EC2RequestData<StartInstancesRequest> requestData) throws AWSCommunicationException { int requestID = 1; Map<String, SortedSet<Instance>> instances = new HashMap<String, SortedSet<Instance>>(); List<Region> awsRegions = getAWSRegions(); // @todo this should be a separate method for (Region region : awsRegions) { EC2RunnerContext context = new EC2RunnerContext(); context.regionName = region.getRegionName(); context.endPoint = region.getEndpoint(); getRegionContextCache().put(context.regionName, context); }/*from w w w. ja v a2 s . c om*/ for (String regionName : requestData.getAllRegions()) { EC2RunnerContext ctx = getRegionContextCache().get(regionName); Comparator comparator = new EC2Executor.InstaceAvailabilityComparator(); SortedSet<Instance> describedInstances = new TreeSet<Instance>(comparator); setRegionContext(ctx); switchCommunicationEndPoint(); RegionRequests regionRequests = requestData.getRegion(regionName); List<StartInstancesRequest> runRequests = regionRequests.getRequests(); for (StartInstancesRequest request : runRequests) { if (logger.isInfoEnabled()) { List<String> idList = request.getInstanceIds(); for (String id : idList) { logger.info( "Going to start instance {} in " + "region {} ({}). Internal request ID is #{}.", new Object[] { id, regionName, requestID }); } } StartInstancesResult result = null; try { result = getClient().startInstances(request); } catch (AmazonServiceException ase) { handleAmazonServiceException(ase); } catch (AmazonClientException ace) { handleAmazonClientException(ace); } // @todo here we should check, if Amazon started all requested instances, Oliver Fischer, 15. June 2011 if (logger.isInfoEnabled()) { for (InstanceStateChange stateChange : result.getStartingInstances()) { logger.info("Amazon AWS changed state of instance {} from {} to {}", new Object[] { stateChange.getInstanceId(), stateChange.getPreviousState(), stateChange.getCurrentState() }); } requestID++; // For the next request instances.put(regionName, describedInstances); } } } }
From source file:de.fischer.thotti.ec2.clients.EC2Stopper.java
License:Apache License
private void executeRequest(EC2RequestData<StopInstancesRequest> requestData) throws AWSCommunicationException { int requestID = 1; Map<String, SortedSet<Instance>> instances = new HashMap<String, SortedSet<Instance>>(); List<Region> awsRegions = getAWSRegions(); // @todo this should be a separate method for (Region region : awsRegions) { EC2RunnerContext context = new EC2RunnerContext(); context.regionName = region.getRegionName(); context.endPoint = region.getEndpoint(); getRegionContextCache().put(context.regionName, context); }/* w ww .ja v a 2 s . c o m*/ for (String regionName : requestData.getAllRegions()) { EC2RunnerContext ctx = getRegionContextCache().get(regionName); Comparator comparator = new EC2Executor.InstaceAvailabilityComparator(); SortedSet<Instance> describedInstances = new TreeSet<Instance>(comparator); setRegionContext(ctx); switchCommunicationEndPoint(); RegionRequests regionRequests = requestData.getRegion(regionName); List<StopInstancesRequest> runRequests = regionRequests.getRequests(); for (StopInstancesRequest request : runRequests) { if (logger.isInfoEnabled()) { List<String> idList = request.getInstanceIds(); for (String id : idList) { logger.info("Going to stop instance {} in " + "region {} ({}). Internal request ID is #{}.", new Object[] { id, regionName, requestID }); } } StopInstancesResult result = null; try { result = getClient().stopInstances(request); } catch (AmazonServiceException ase) { handleAmazonServiceException(ase); } catch (AmazonClientException ace) { handleAmazonClientException(ace); } // @todo here we should check, if Amazon terminated all requested instances, Oliver Fischer, 15. June 2011 if (logger.isInfoEnabled()) { for (InstanceStateChange stateChange : result.getStoppingInstances()) { logger.info("Amazon AWS changed state of instance {} from {} to {}", new Object[] { stateChange.getInstanceId(), stateChange.getPreviousState(), stateChange.getCurrentState() }); } requestID++; // For the next request instances.put(regionName, describedInstances); } } } }
From source file:de.fischer.thotti.ec2.clients.EC2Terminator.java
License:Apache License
private void executeRequest(EC2RequestData<TerminateInstancesRequest> requestData) throws AWSCommunicationException { int requestID = 1; Map<String, SortedSet<Instance>> instances = new HashMap<String, SortedSet<Instance>>(); List<Region> awsRegions = getAWSRegions(); // @todo this should be a separate method for (Region region : awsRegions) { EC2RunnerContext context = new EC2RunnerContext(); context.regionName = region.getRegionName(); context.endPoint = region.getEndpoint(); getRegionContextCache().put(context.regionName, context); }/* w w w. j av a 2 s.co m*/ for (String regionName : requestData.getAllRegions()) { EC2RunnerContext ctx = getRegionContextCache().get(regionName); Comparator comparator = new EC2Executor.InstaceAvailabilityComparator(); SortedSet<Instance> describedInstances = new TreeSet<Instance>(comparator); setRegionContext(ctx); switchCommunicationEndPoint(); RegionRequests regionRequests = requestData.getRegion(regionName); List<TerminateInstancesRequest> runRequests = regionRequests.getRequests(); for (TerminateInstancesRequest request : runRequests) { if (logger.isInfoEnabled()) { List<String> idList = request.getInstanceIds(); for (String id : idList) { logger.info( "Going to request description of instance {} in " + "region {} ({}). Internal request ID is #{}.", new Object[] { id, regionName, requestID }); } } TerminateInstancesResult result = null; try { result = getClient().terminateInstances(request); } catch (AmazonServiceException ase) { handleAmazonServiceException(ase); } catch (AmazonClientException ace) { handleAmazonClientException(ace); } // @todo here we should check, if Amazon terminated all requested instances, Oliver Fischer, 15. June 2011 if (logger.isInfoEnabled()) { for (InstanceStateChange stateChange : result.getTerminatingInstances()) { logger.info("Amazon AWS changed state of instance {} from {} to {}", new Object[] { stateChange.getInstanceId(), stateChange.getPreviousState(), stateChange.getCurrentState() }); } requestID++; // For the next request instances.put(regionName, describedInstances); } } } }
From source file:hu.mta.sztaki.lpds.cloud.entice.imageoptimizer.iaashandler.amazontarget.EC2VirtualMachine.java
License:Apache License
@Override protected void terminateInstance() throws VMManagementException { try {//from w w w . j a v a 2 s .c o m int requests = reqCounter.decrementAndGet(); if (requests < 0) { Shrinker.myLogger.severe("Terminating shrinking process, too much VM termination requests"); Thread.dumpStack(); } Shrinker.myLogger.info("Instance " + getInstanceId() + " received a terminate request"); TerminateInstancesRequest terminateInstancesRequest = new TerminateInstancesRequest(); terminateInstancesRequest.withInstanceIds(getInstanceIds()); TerminateInstancesResult res = this.amazonEC2Client.terminateInstances(terminateInstancesRequest); Shrinker.myLogger.info("Terminate request dispatched for instance " + getInstanceId()); List<InstanceStateChange> stateChanges = res.getTerminatingInstances(); InstanceStateChange state = null; for (InstanceStateChange stateChange : stateChanges) if (getInstanceId().contains(stateChange.getInstanceId())) state = stateChange; if (state != null) Shrinker.myLogger.info("State of instance " + getInstanceId() + ": " + state.getPreviousState().getName() + " -> " + state.getCurrentState().getName()); else Shrinker.myLogger.info("null state for instance " + getInstanceId()); // re-send terminate if (state == null || !TERMINATED_STATE.equals(state.getCurrentState().getName())) { int timeout = 0; int counter = 1; while (timeout < TERMINATE_TIMEOUT) { try { Thread.sleep(5000); } catch (Exception x) { } Shrinker.myLogger.info("Re-sending (" + counter + "x) terminate request dispatched for instance " + getInstanceId()); try { res = this.amazonEC2Client.terminateInstances(terminateInstancesRequest); stateChanges = res.getTerminatingInstances(); for (InstanceStateChange stateChange : stateChanges) if (getInstanceId().contains(stateChange.getInstanceId())) state = stateChange; if (state != null) Shrinker.myLogger.info("State of instance " + getInstanceId() + ": " + state.getPreviousState().getName() + " -> " + state.getCurrentState().getName()); else Shrinker.myLogger.info("null state for instance " + getInstanceId()); } catch (AmazonServiceException x) { // terminated correctly // it can happen that terminate seemingly didn't succeed for the first time (remains running), // but then the instance id is gone (correctly) so re-sending terminate will cause exception if ("InvalidInstanceID.NotFound".equals(x.getErrorCode())) break; else throw x; } if (state != null && TERMINATED_STATE.equals(state.getCurrentState().getName())) break; timeout += 5000; // repeat every 5 second counter++; } if (timeout >= TERMINATE_TIMEOUT) { Shrinker.myLogger.info("ERROR: Cannot terminate instance: " + getInstanceId()); System.exit(1); } } } catch (AmazonServiceException x) { Shrinker.myLogger.info("terminateInstance error: " + x.getMessage()); throw new VMManagementException("terminateInstance exception", x); } catch (AmazonClientException x) { Shrinker.myLogger.info("terminateInstance error: " + x.getMessage()); throw new VMManagementException("terminateInstance exception", x); } System.out.println("[T" + (Thread.currentThread().getId() % 100) + "] VM terminated: " + getInstanceId() + " " + this.ip + " (@" + new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) + ")"); }