/**
* {@inheritdoc}
* @see \Scalr\Modules\PlatformModuleInterface::getOrphanedServers()
*/
public function getOrphanedServers(Entity\Account\Environment $environment, $cloudLocation, $instanceIds = null)
{
if (empty($cloudLocation)) {
return [];
}
$aws = $environment->aws($cloudLocation);
$orphans = [];
$nextToken = null;
do {
try {
/* @var $results ReservationList */
$results = $aws->ec2->instance->describe($instanceIds, null, $nextToken, empty($instanceIds) ? 1000 : null);
} catch (Exception $e) {
throw new Exception(sprintf("Cannot get list of servers for platform ec2: %s", $e->getMessage()));
}
if (count($results)) {
foreach ($results as $reservation) {
/* @var $reservation ReservationData */
foreach ($reservation->instancesSet as $instance) {
/* @var $instance InstanceData */
if (StatusAdapter::load($instance->instanceState->name)->isTerminated()) {
continue;
}
// check whether scalr tag exists
foreach ($instance->tagSet as $tag) {
/* @var $tag ResourceTagSetData */
if ($tag->key == "scalr-meta") {
continue 2;
}
}
$orphans[] = new OrphanedServer($instance->instanceId, $instance->instanceType, $instance->imageId, $instance->instanceState->name, $instance->launchTime->setTimezone(new \DateTimeZone("UTC")), $instance->privateIpAddress, $instance->ipAddress, $instance->keyName, $instance->vpcId, $instance->subnetId, $instance->architecture, $instance->groupSet->toArray(), $instance->tagSet->toArray());
}
}
}
if (empty($instanceIds)) {
$nextToken = $results->getNextToken();
}
unset($results);
} while ($nextToken);
return $orphans;
}