use of com.sequenceiq.it.cloudbreak.util.aws.amazonec2.client.EC2Client 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);
}
}
}
use of com.sequenceiq.it.cloudbreak.util.aws.amazonec2.client.EC2Client in project cloudbreak by hortonworks.
the class EC2ClientActions method instanceSubnet.
public Map<String, String> instanceSubnet(List<String> instanceIds) {
AmazonEC2 ec2Client = buildEC2Client();
DescribeInstancesResult result = ec2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceIds));
return result.getReservations().stream().flatMap(it -> it.getInstances().stream()).collect(Collectors.toMap(Instance::getInstanceId, Instance::getSubnetId));
}
use of com.sequenceiq.it.cloudbreak.util.aws.amazonec2.client.EC2Client in project cloudbreak by hortonworks.
the class EC2ClientActions method deleteHostGroupInstances.
public void deleteHostGroupInstances(List<String> instanceIds) {
AmazonEC2 ec2Client = buildEC2Client();
TerminateInstancesResult terminateInstancesResult = ec2Client.terminateInstances(new TerminateInstancesRequest().withInstanceIds(instanceIds));
for (String instanceId : instanceIds) {
try {
Log.log(LOGGER, format(" EC2 instance [%s] state is [%s] ", instanceId, Objects.requireNonNull(terminateInstancesResult.getTerminatingInstances().stream().filter(instance -> instance.getInstanceId().equals(instanceId)).findAny().orElse(null)).getCurrentState().getName()));
ec2Client.waiters().instanceTerminated().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 (TERMINATED_STATE.equals(actualInstanceState.getName())) {
Log.log(LOGGER, format(" EC2 Instance: %s state is: %s ", instanceId, TERMINATED_STATE));
} else {
LOGGER.error("EC2 Instance: {} termination has not been successful. So the actual state is: {} ", instanceId, actualInstanceState.getName());
throw new TestFailException(" EC2 Instance: " + instanceId + " termination has not been successful, because of the actual state is: " + actualInstanceState.getName());
}
} catch (WaiterUnrecoverableException e) {
LOGGER.error("EC2 Instance {} termination has not been successful, because of WaiterUnrecoverableException: {}", instanceId, e);
} catch (WaiterTimedOutException e) {
LOGGER.error("EC2 Instance {} termination has not been successful, because of WaiterTimedOutException: {}", instanceId, e);
} catch (EC2UnexpectedException e) {
LOGGER.error("EC2 Instance {} termination has not been successful, because of EC2UnexpectedException: {}", instanceId, e);
}
}
}
use of com.sequenceiq.it.cloudbreak.util.aws.amazonec2.client.EC2Client in project cloudbreak by hortonworks.
the class EC2ClientActions method getInstanceVolumeIds.
public List<String> getInstanceVolumeIds(List<String> instanceIds, boolean rootVolumes) {
AmazonEC2 ec2Client = buildEC2Client();
DescribeInstancesResult describeInstancesResult = ec2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceIds));
Map<String, Set<String>> instanceIdVolumeIdMap = describeInstancesResult.getReservations().stream().map(Reservation::getInstances).flatMap(Collection::stream).collect(Collectors.toMap(Instance::getInstanceId, instance -> instance.getBlockDeviceMappings().stream().filter(dev -> {
if (BooleanUtils.isTrue(rootVolumes)) {
return "/dev/xvda".equals(dev.getDeviceName());
} else {
return !"/dev/xvda".equals(dev.getDeviceName());
}
}).map(InstanceBlockDeviceMapping::getEbs).map(EbsInstanceBlockDevice::getVolumeId).collect(Collectors.toSet())));
instanceIdVolumeIdMap.forEach((instanceId, volumeIds) -> Log.log(LOGGER, format(" Attached volume IDs are %s for [%s] EC2 instance ", volumeIds.toString(), instanceId)));
return instanceIdVolumeIdMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
}
use of com.sequenceiq.it.cloudbreak.util.aws.amazonec2.client.EC2Client in project cloudbreak by hortonworks.
the class EC2ClientActions method enaSupport.
public Map<String, Boolean> enaSupport(List<String> instanceIds) {
AmazonEC2 ec2Client = buildEC2Client();
DescribeInstancesResult describeInstanceResult = ec2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(instanceIds));
return describeInstanceResult.getReservations().stream().flatMap(it -> it.getInstances().stream()).collect(Collectors.toMap(Instance::getInstanceId, Instance::getEnaSupport));
}
Aggregations