use of software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest in project cloudbreak by hortonworks.
the class AwsDownscaleService method waitTermination.
private void waitTermination(List<String> instanceIds, Waiter<DescribeInstancesRequest> instanceTerminatedWaiter, StackCancellationCheck stackCancellationCheck) {
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest().withInstanceIds(instanceIds);
run(instanceTerminatedWaiter, describeInstancesRequest, stackCancellationCheck, String.format("There was an error when application are deleting instances %s", String.join(",", instanceIds)));
}
use of software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest in project cloudbreak by hortonworks.
the class AwsDownscaleService method getExistingInstances.
private List<String> getExistingInstances(List<String> instanceIdsToDelete, AmazonEc2Client amazonEC2Client) {
DescribeInstancesResult instancesResult = amazonEC2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceIdsToDelete));
List<String> existingInstances = instancesResult.getReservations().stream().flatMap(reservation -> reservation.getInstances().stream()).map(com.amazonaws.services.ec2.model.Instance::getInstanceId).collect(Collectors.toList());
List<String> missingInstances = new ArrayList<>(instanceIdsToDelete);
missingInstances.removeAll(existingInstances);
LOGGER.debug("Known instances on AWS: {} Missing instances: {}", existingInstances, missingInstances);
return existingInstances;
}
use of software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest in project cloudbreak by hortonworks.
the class AwsAutoScalingService method waitForGroup.
private void waitForGroup(AmazonEc2Client amClient, AmazonAutoScalingClient asClient, String autoScalingGroupName, Integer requiredInstanceCount, Long stackId, List<String> knownInstances) throws AmazonAutoscalingFailed {
Waiter<DescribeAutoScalingGroupsRequest> groupInServiceWaiter = asClient.waiters().groupInService();
PollingStrategy backoff = getBackoffCancellablePollingStrategy(new StackCancellationCheck(stackId));
try {
groupInServiceWaiter.run(new WaiterParameters<>(new DescribeAutoScalingGroupsRequest().withAutoScalingGroupNames(autoScalingGroupName)).withPollingStrategy(backoff));
} catch (Exception e) {
throw new AmazonAutoscalingFailed(e.getMessage(), e);
}
Waiter<DescribeAutoScalingGroupsRequest> instancesInServiceWaiter = customAmazonWaiterProvider.getAutoscalingInstancesInServiceWaiter(asClient, requiredInstanceCount);
try {
instancesInServiceWaiter.run(new WaiterParameters<>(new DescribeAutoScalingGroupsRequest().withAutoScalingGroupNames(autoScalingGroupName)).withPollingStrategy(backoff));
} catch (WaiterTimedOutException e) {
String message = String.format("Polling timed out. Not all the %s instance(s) reached InService state.", requiredInstanceCount);
throw new AmazonAutoscalingFailed(message, e);
} catch (Exception e) {
throw new AmazonAutoscalingFailed(e.getMessage(), e);
}
List<String> instanceIds = cloudFormationStackUtil.getInstanceIds(asClient, autoScalingGroupName);
List<String> instanceIdsForWait = getInstanceIdsForWait(instanceIds, knownInstances);
if (requiredInstanceCount != 0) {
List<List<String>> partitionedInstanceIdsList = Lists.partition(instanceIdsForWait, MAX_INSTANCE_ID_SIZE);
Waiter<DescribeInstancesRequest> instanceRunningStateWaiter = amClient.waiters().instanceRunning();
for (List<String> partitionedInstanceIds : partitionedInstanceIdsList) {
try {
instanceRunningStateWaiter.run(new WaiterParameters<>(new DescribeInstancesRequest().withInstanceIds(partitionedInstanceIds)).withPollingStrategy(backoff));
} catch (AmazonServiceException e) {
LOGGER.error("Cannot describeInstances", e);
e.setErrorMessage("Cannot describeInstances. " + e.getErrorMessage());
throw e;
} catch (Exception e) {
throw new AmazonAutoscalingFailed("Error occurred in describeInstances: " + e.getMessage(), e);
}
}
}
}
use of software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest in project cloudbreak by hortonworks.
the class AwsNativeMetadataCollector method describeInstances.
private List<CloudVmMetaDataStatus> describeInstances(List<CloudInstance> vms, List<String> instanceIdList, Map<String, CloudResource> resourcesByInstanceId, AmazonEc2Client ec2Client) {
LOGGER.info("Collecting metadata for instance IDs: '{}'", String.join(", ", instanceIdList));
List<CloudVmMetaDataStatus> result = new ArrayList<>();
DescribeInstancesRequest instancesRequest = new DescribeInstancesRequest().withInstanceIds(instanceIdList);
DescribeInstancesResult instancesResult = ec2Client.describeInstances(instancesRequest);
List<Instance> instances = instancesResult.getReservations().stream().flatMap(reservation -> reservation.getInstances().stream()).collect(Collectors.toList());
for (Instance instance : instances) {
String instanceId = instance.getInstanceId();
CloudResource connectedResource = findCloudResourceByInstanceId(resourcesByInstanceId, instanceId);
CloudInstance matchedInstance = findCloudInstanceByPrivateId(vms, connectedResource);
CloudInstance updatedInstance = new CloudInstance(connectedResource.getInstanceId(), matchedInstance.getTemplate(), matchedInstance.getAuthentication(), matchedInstance.getSubnetId(), matchedInstance.getAvailabilityZone());
CloudInstanceMetaData cloudInstanceMetaData = new CloudInstanceMetaData(instance.getPrivateIpAddress(), instance.getPublicIpAddress(), awsLifeCycleMapper.getLifeCycle(instance));
CloudVmInstanceStatus cloudVmInstanceStatus = new CloudVmInstanceStatus(updatedInstance, updatedInstance.getTemplate().getStatus());
CloudVmMetaDataStatus newMetadataStatus = new CloudVmMetaDataStatus(cloudVmInstanceStatus, cloudInstanceMetaData);
result.add(newMetadataStatus);
}
return result;
}
use of software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest in project cloudbreak by hortonworks.
the class EC2ClientActions method stopHostGroupInstances.
public void stopHostGroupInstances(List<String> instanceIds) {
AmazonEC2 ec2Client = buildEC2Client();
StopInstancesResult stopInstancesResult = ec2Client.stopInstances(new StopInstancesRequest().withInstanceIds(instanceIds));
for (String instanceId : instanceIds) {
try {
Log.log(LOGGER, format(" EC2 instance [%s] state is [%s] ", instanceId, Objects.requireNonNull(stopInstancesResult.getStoppingInstances().stream().filter(instance -> instance.getInstanceId().equals(instanceId)).findAny().orElse(null)).getCurrentState().getName()));
ec2Client.waiters().instanceStopped().run(new WaiterParameters<DescribeInstancesRequest>(new DescribeInstancesRequest().withInstanceIds(instanceId)).withPollingStrategy(new PollingStrategy(new MaxAttemptsRetryStrategy(80), new FixedDelayStrategy(30))));
DescribeInstancesResult describeInstanceResult = ec2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceId));
InstanceState actualInstanceState = describeInstanceResult.getReservations().get(0).getInstances().get(0).getState();
if (STOPPED_STATE.equals(actualInstanceState.getName())) {
Log.log(LOGGER, format(" EC2 Instance: %s state is: %s ", instanceId, STOPPED_STATE));
} else {
LOGGER.error("EC2 Instance: {} stop has not been successful. So the actual state is: {} ", instanceId, actualInstanceState.getName());
throw new TestFailException(" EC2 Instance: " + instanceId + " stop has not been successful, because of the actual state is: " + actualInstanceState.getName());
}
} catch (WaiterUnrecoverableException e) {
LOGGER.error("EC2 Instance {} stop has not been successful, because of WaiterUnrecoverableException: {}", instanceId, e);
} catch (WaiterTimedOutException e) {
LOGGER.error("EC2 Instance {} stop has not been successful, because of WaiterTimedOutException: {}", instanceId, e);
} catch (EC2UnexpectedException e) {
LOGGER.error("EC2 Instance {} stop has not been successful, because of EC2UnexpectedException: {}", instanceId, e);
}
}
}
Aggregations