in discovery-aws-api/src/main/scala/org/apache/pekko/discovery/awsapi/ec2/Ec2TagBasedServiceDiscovery.scala [130:158]
private def getInstances(
client: AmazonEC2,
filters: List[Filter],
nextToken: Option[String],
accumulator: List[String] = Nil): List[String] = {
val describeInstancesRequest = new DescribeInstancesRequest()
.withFilters(filters.asJava) // withFilters is a set operation (i.e. calls setFilters, be careful with chaining)
.withNextToken(nextToken.orNull)
val describeInstancesResult = client.describeInstances(describeInstancesRequest)
val ips: List[String] =
describeInstancesResult.getReservations.asScala.toList
.flatMap((r: Reservation) => r.getInstances.asScala.toList)
.map(instance => instance.getPrivateIpAddress)
val accumulatedIps = accumulator ++ ips
Option(describeInstancesResult.getNextToken) match {
case None =>
accumulatedIps // aws api has no more results to return, so we return what we have accumulated so far
case nextPageToken @ Some(_) =>
// more result items available
log.debug("aws api returned paginated result, fetching next page!")
getInstances(client, filters, nextPageToken, accumulatedIps)
}
}