use of software.amazon.awssdk.services.ec2.model.Filter in project druid by druid-io.
the class EC2AutoScaler method ipToIdLookup.
@Override
public List<String> ipToIdLookup(List<String> ips) {
final List<String> retVal = FluentIterable.from(Lists.partition(ips, MAX_AWS_FILTER_VALUES)).transformAndConcat(new Function<List<String>, Iterable<Reservation>>() {
@Override
public Iterable<Reservation> apply(List<String> input) {
return amazonEC2Client.describeInstances(new DescribeInstancesRequest().withFilters(new Filter("private-ip-address", input))).getReservations();
}
}).transformAndConcat(new Function<Reservation, Iterable<Instance>>() {
@Override
public Iterable<Instance> apply(Reservation reservation) {
return reservation.getInstances();
}
}).transform(new Function<Instance, String>() {
@Override
public String apply(Instance instance) {
return instance.getInstanceId();
}
}).toList();
log.debug("Performing lookup: %s --> %s", ips, retVal);
return retVal;
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSEnumerationAndCreationAdapterService method createAWSRequestAndAsyncHandler.
/**
* Initializes and saves a reference to the request object that is sent to AWS to get a page of
* instances. Also saves an instance to the async handler that will be used to handle the
* responses received from AWS. It sets the nextToken value in the request object sent to AWS
* for getting the next page of results from AWS.
*/
private void createAWSRequestAndAsyncHandler(EnumerationCreationContext aws, AWSEnumerationRefreshSubStage next) {
DescribeInstancesRequest request = new DescribeInstancesRequest();
Filter runningInstanceFilter = getAWSNonTerminatedInstancesFilter();
request.getFilters().add(runningInstanceFilter);
request.setMaxResults(getQueryPageSize());
request.setNextToken(aws.nextToken);
aws.describeInstancesRequest = request;
aws.resultHandler = new AWSEnumerationAsyncHandler(this, aws, next);
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSEnumerationAndDeletionAdapterService method getRemoteInstances.
/**
* Get the instances from AWS filtered by the instances Ids known to the local system.
*/
public void getRemoteInstances(EnumerationDeletionContext aws, AWSEnumerationDeletionSubStage next) {
if (aws.localInstanceIds == null || aws.localInstanceIds.size() == 0) {
logFine(() -> "No local records found. No states need to be fetched from the AWS" + " endpoint.");
aws.subStage = next;
deleteResourcesInLocalSystem(aws);
return;
}
DescribeInstancesRequest request = new DescribeInstancesRequest();
Filter runningInstanceFilter = getAWSNonTerminatedInstancesFilter();
request.getFilters().add(runningInstanceFilter);
// Get only the instances from the remote system for which a compute state exists in the
// local system.
logFine(() -> String.format("Fetching instance details for %d instances on the AWS" + " endpoint.", aws.localInstanceIds.keySet().size()));
request.getInstanceIds().addAll(new ArrayList<>(aws.localInstanceIds.keySet()));
AsyncHandler<DescribeInstancesRequest, DescribeInstancesResult> resultHandler = new AWSEnumerationAsyncHandler(this, aws, next);
aws.amazonEC2Client.describeInstancesAsync(request, resultHandler);
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSUtils method waitForTransitionCompletion.
public static void waitForTransitionCompletion(ServiceHost host, List<InstanceStateChange> stateChangeList, final String desiredState, AmazonEC2AsyncClient client, BiConsumer<InstanceState, Exception> callback) {
InstanceStateChange stateChange = stateChangeList.get(0);
try {
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.withInstanceIds(stateChange.getInstanceId());
DescribeInstancesResult result = client.describeInstances(request);
Instance instance = result.getReservations().stream().flatMap(r -> r.getInstances().stream()).filter(i -> i.getInstanceId().equalsIgnoreCase(stateChange.getInstanceId())).findFirst().orElseThrow(() -> new IllegalArgumentException(String.format("%s instance not found", stateChange.getInstanceId())));
String state = instance.getState().getName();
if (state.equals(desiredState)) {
callback.accept(instance.getState(), null);
} else {
host.schedule(() -> waitForTransitionCompletion(host, stateChangeList, desiredState, client, callback), 5, TimeUnit.SECONDS);
}
} catch (AmazonServiceException | IllegalArgumentException ase) {
callback.accept(null, ase);
}
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSUtils method getAWSNonTerminatedInstancesFilter.
/**
* Creates a filter for the instances that are in non terminated state on the AWS endpoint.
*
* @return
*/
public static Filter getAWSNonTerminatedInstancesFilter() {
// Create a filter to only get non terminated instances from the remote instance.
List<String> stateValues = new ArrayList<>(Arrays.asList(INSTANCE_STATE_RUNNING, INSTANCE_STATE_PENDING, INSTANCE_STATE_STOPPING, INSTANCE_STATE_STOPPED, INSTANCE_STATE_SHUTTING_DOWN));
Filter runningInstanceFilter = new Filter();
runningInstanceFilter.setName(INSTANCE_STATE);
runningInstanceFilter.setValues(stateValues);
return runningInstanceFilter;
}
Aggregations