Example usage for com.amazonaws.services.ec2.model DescribeClassicLinkInstancesResult getNextToken

List of usage examples for com.amazonaws.services.ec2.model DescribeClassicLinkInstancesResult getNextToken

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model DescribeClassicLinkInstancesResult getNextToken.

Prototype


public String getNextToken() 

Source Link

Document

The token to use to retrieve the next page of results.

Usage

From source file:com.netflix.spinnaker.clouddriver.aws.agent.ReconcileClassicLinkSecurityGroupsAgent.java

License:Apache License

@Override
public void run() {
    if (!deployDefaults.isReconcileClassicLinkAccount(account)) {
        return;//from   w  ww .  ja va  2s  .  c o  m
    }
    log.info("Checking classic link security groups in {}/{}", account.getName(), region);
    AmazonEC2 ec2 = amazonClientProvider.getAmazonEC2(account, region, true);
    List<String> classicLinkVpcIds = ec2.describeVpcClassicLink().getVpcs().stream()
            .filter(VpcClassicLink::getClassicLinkEnabled).map(VpcClassicLink::getVpcId)
            .collect(Collectors.toList());
    if (classicLinkVpcIds.size() > 1) {
        log.warn("Multiple classicLinkVpcs found: {}", classicLinkVpcIds);
        throw new IllegalStateException("More than 1 classicLinkVpc found: " + classicLinkVpcIds);
    }

    if (classicLinkVpcIds.isEmpty()) {
        return;
    }
    String classicLinkVpcId = classicLinkVpcIds.get(0);

    RateLimiter apiRequestRateLimit = RateLimiter.create(5);
    final Map<String, ClassicLinkInstance> classicLinkInstances = new HashMap<>();
    DescribeInstancesRequest describeInstances = new DescribeInstancesRequest().withMaxResults(500);
    while (true) {
        apiRequestRateLimit.acquire();
        DescribeInstancesResult instanceResult = ec2.describeInstances(describeInstances);
        instanceResult.getReservations().stream().flatMap(r -> r.getInstances().stream())
                .filter(i -> i.getVpcId() == null)
                .filter(i -> Optional
                        .ofNullable(i.getState()).filter(is -> is.getCode() == RUNNING_STATE).isPresent())
                .filter(this::isInstanceOldEnough)
                .map(i -> new ClassicLinkInstance().withInstanceId(i.getInstanceId())
                        .withVpcId(classicLinkVpcId).withTags(i.getTags()))
                .forEach(cli -> classicLinkInstances.put(cli.getInstanceId(), cli));

        if (instanceResult.getNextToken() == null) {
            break;
        }
        describeInstances.setNextToken(instanceResult.getNextToken());
    }

    DescribeClassicLinkInstancesRequest request = new DescribeClassicLinkInstancesRequest()
            .withMaxResults(1000);
    while (true) {
        apiRequestRateLimit.acquire();
        DescribeClassicLinkInstancesResult result = ec2.describeClassicLinkInstances(request);
        result.getInstances().forEach(i -> classicLinkInstances.put(i.getInstanceId(), i));
        if (result.getNextToken() == null) {
            break;
        }
        request.setNextToken(result.getNextToken());
    }

    log.info("{} existing classic instances in {}/{}", classicLinkInstances.size(), account.getName(), region);

    Map<String, String> groupNamesToIds = ec2
            .describeSecurityGroups(new DescribeSecurityGroupsRequest()
                    .withFilters(new Filter("vpc-id").withValues(classicLinkVpcId)))
            .getSecurityGroups().stream()
            .collect(Collectors.toMap(SecurityGroup::getGroupName, SecurityGroup::getGroupId));

    reconcileInstances(ec2, groupNamesToIds, classicLinkInstances.values());
}