use of com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsRequest in project cloudbreak by hortonworks.
the class LoadBalancerServiceTest method testRemoveLoadBalancerTargetsWhenDeregisterCalled.
@Test
public void testRemoveLoadBalancerTargetsWhenDeregisterCalled() {
CloudResource instanceToRemove = CloudResource.builder().type(ResourceType.AWS_INSTANCE).status(CommonStatus.CREATED).name("name").instanceId("instanceId").params(Collections.emptyMap()).build();
ArgumentCaptor<DeregisterTargetsRequest> argumentCaptor = ArgumentCaptor.forClass(DeregisterTargetsRequest.class);
when(ac.getCloudContext()).thenReturn(cloudContext);
when(cloudContext.getLocation()).thenReturn(Location.location(Region.region(REGION_NAME), AvailabilityZone.availabilityZone(AZ)));
when(awsClient.createElasticLoadBalancingClient(any(), any())).thenReturn(amazonElbClient);
underTest.removeLoadBalancerTargets(ac, List.of("targetArn"), List.of(instanceToRemove));
verify(awsClient).createElasticLoadBalancingClient(any(), any());
verify(amazonElbClient).deregisterTargets(argumentCaptor.capture());
DeregisterTargetsRequest deregisterTargetsRequest = argumentCaptor.getValue();
Assertions.assertEquals("targetArn", deregisterTargetsRequest.getTargetGroupArn());
Assertions.assertEquals("instanceId", deregisterTargetsRequest.getTargets().get(0).getId());
}
use of com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsRequest in project cloudbreak by hortonworks.
the class LoadBalancerService method removeLoadBalancerTargets.
public void removeLoadBalancerTargets(AuthenticatedContext ac, List<String> targetGroupArns, List<CloudResource> resourcesToRemove) {
if (targetGroupArns.isEmpty()) {
LOGGER.info("Cannot find target group for the stack, skip the removing of the targets");
return;
}
for (String targetGroupArn : targetGroupArns) {
String region = ac.getCloudContext().getLocation().getRegion().value();
AmazonElasticLoadBalancingClient amazonElbClient = awsClient.createElasticLoadBalancingClient(new AwsCredentialView(ac.getCloudCredential()), region);
LOGGER.debug("Get a list of the instance ids to remove");
Set<String> instancesToRemove = getInstanceIdsForGroups(resourcesToRemove);
LOGGER.debug("Deregister any instances that no longer exist");
if (!instancesToRemove.isEmpty()) {
try {
List<TargetDescription> targetsToRemove = instancesToRemove.stream().map(instanceId -> new TargetDescription().withId(instanceId)).collect(Collectors.toList());
amazonElbClient.deregisterTargets(new DeregisterTargetsRequest().withTargetGroupArn(targetGroupArn).withTargets(targetsToRemove));
LOGGER.debug("Targets deregistered: {}", targetsToRemove);
} catch (InvalidTargetException ignored) {
LOGGER.debug("no-op - we tried to remove a target that wasn't in the target group, which is fine");
}
}
}
}
use of com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsRequest in project titus-control-plane by Netflix.
the class AwsLoadBalancerConnector method deregisterAll.
@Override
public Completable deregisterAll(String loadBalancerId, Set<String> ipAddresses) {
if (CollectionsExt.isNullOrEmpty(ipAddresses)) {
return Completable.complete();
}
// TODO: retry logic
// TODO: handle partial failures in the batch
// TODO: timeouts
final DeregisterTargetsRequest request = new DeregisterTargetsRequest().withTargetGroupArn(loadBalancerId).withTargets(ipAddresses.stream().map(ipAddress -> new TargetDescription().withId(ipAddress)).collect(Collectors.toSet()));
long startTime = registry.clock().wallTime();
// force observeOn(scheduler) since the callback will be called from the AWS SDK threadpool
return AwsObservableExt.asyncActionCompletable(supplier -> getClient(loadBalancerId).deregisterTargetsAsync(request, supplier.handler((req, resp) -> {
logger.debug("Deregistered targets {}", resp);
connectorMetrics.success(AwsLoadBalancerConnectorMetrics.AwsLoadBalancerMethods.DeregisterTargets, startTime);
}, (t) -> {
logger.error("Error deregistering targets on " + loadBalancerId, t);
connectorMetrics.failure(AwsLoadBalancerConnectorMetrics.AwsLoadBalancerMethods.DeregisterTargets, t, startTime);
}))).observeOn(scheduler);
}
use of com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsRequest in project cloudbreak by hortonworks.
the class CloudFormationStackUtil method removeLoadBalancerTargets.
public void removeLoadBalancerTargets(AuthenticatedContext ac, CloudLoadBalancer loadBalancer, List<CloudResource> resourcesToRemove) {
String region = ac.getCloudContext().getLocation().getRegion().value();
AmazonElasticLoadBalancingClient amazonElbClient = awsClient.createElasticLoadBalancingClient(new AwsCredentialView(ac.getCloudCredential()), region);
for (Map.Entry<TargetGroupPortPair, Set<Group>> entry : loadBalancer.getPortToTargetGroupMapping().entrySet()) {
// Get a list of the instance ids to remove
Set<String> instancesToRemove = getInstanceIdsForGroups(resourcesToRemove, entry.getValue());
// Find target group ARN
AwsLoadBalancerScheme scheme = loadBalancerTypeConverter.convert(loadBalancer.getType());
String targetGroupArn = getResourceArnByLogicalId(ac, AwsTargetGroup.getTargetGroupName(entry.getKey().getTrafficPort(), scheme), region);
// Deregister any instances that no longer exist
if (!instancesToRemove.isEmpty()) {
try {
List<TargetDescription> targetsToRemove = instancesToRemove.stream().map(instanceId -> new TargetDescription().withId(instanceId)).collect(Collectors.toList());
DeregisterTargetsResult deregisterTargetsResult = amazonElbClient.deregisterTargets(new DeregisterTargetsRequest().withTargetGroupArn(targetGroupArn).withTargets(targetsToRemove));
} catch (InvalidTargetException ignored) {
// no-op - we tried to remove a target that wasn't in the target group, which is fine
}
}
}
}
Aggregations