List of usage examples for com.amazonaws.services.ec2.model DescribeClassicLinkInstancesResult getNextToken
public String getNextToken()
The token to use to retrieve the next page of results.
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()); }