Example usage for com.amazonaws.services.elasticloadbalancing.model DeregisterInstancesFromLoadBalancerRequest DeregisterInstancesFromLoadBalancerRequest

List of usage examples for com.amazonaws.services.elasticloadbalancing.model DeregisterInstancesFromLoadBalancerRequest DeregisterInstancesFromLoadBalancerRequest

Introduction

In this page you can find the example usage for com.amazonaws.services.elasticloadbalancing.model DeregisterInstancesFromLoadBalancerRequest DeregisterInstancesFromLoadBalancerRequest.

Prototype

public DeregisterInstancesFromLoadBalancerRequest(String loadBalancerName, java.util.List<Instance> instances) 

Source Link

Document

Constructs a new DeregisterInstancesFromLoadBalancerRequest object.

Usage

From source file:com.mentation.alfonso.aws.ElasticLoadBalancer.java

License:Apache License

public boolean detachInstance() {
    List<Instance> instances = new ArrayList<>();
    instances.add(_instance);/*from  w  ww . j a v  a  2 s.c  om*/
    System.out.println("Attempt to deregister " + _instance.getInstanceId());

    DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(
            _name, instances);

    DeregisterInstancesFromLoadBalancerResult deregisterInstancesFromLoadBalancerResult = _elbClient
            .deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);

    System.out.println(deregisterInstancesFromLoadBalancerResult.getInstances());

    for (Instance instance : deregisterInstancesFromLoadBalancerResult.getInstances()) {
        if (instance.getInstanceId().equals(_instance.getInstanceId())) {
            return false;
        }
    }

    _instance = null;

    return true;
}

From source file:com.proofpoint.discovery.elb.ElasticLoadBalancerUpdater.java

License:Apache License

private void deregisterInstances(String elbName, Collection<String> instanceIds) {
    List<Instance> instances = copyOf(transform(instanceIds, NEW_INSTANCE));
    log.debug("removing instances from load balancer: %s: %s", elbName, instanceIds);
    elbClient.deregisterInstancesFromLoadBalancer(
            new DeregisterInstancesFromLoadBalancerRequest(elbName, instances));
    log.info("removed instances from load balancer: %s: %s", elbName, instanceIds);
}

From source file:com.swap.aws.elb.client.AWSHelper.java

License:Apache License

/**
 * Detaches provided instances from the load balancer, associated with some
 * cluster. Useful when instances are removed from the cluster with which
 * this load balancer is associated.//from w  w  w . jav a 2 s . c o  m
 * 
 * @param loadBalancerName
 * @param instances
 */
public void deregisterInstancesFromLoadBalancer(String loadBalancerName, List<Instance> instances) {
    try {
        DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(
                loadBalancerName, instances);

        AmazonElasticLoadBalancingClient lbClient = new AmazonElasticLoadBalancingClient(awsCredentials,
                clientConfiguration);

        lbClient.setEndpoint("elasticloadbalancing." + this.region + ".amazonaws.com");

        DeregisterInstancesFromLoadBalancerResult result = lbClient
                .deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
    } catch (Exception e) {
        log.error("Could not de-register instances from load balancer " + loadBalancerName);
    }
}

From source file:fr.xebia.demo.amazon.aws.PetclinicInfrastructureEnforcer.java

License:Apache License

/**
 * //from  ww w  .  j  a  v a 2 s  . co  m
 * @param healthCheckUri
 *            start with slash. E.g. "/myapp/healthcheck.jsp
 * @param applicationIdentifier
 *            used to name the load balancer and to filter the instances on
 *            their "Role" tag.
 * @return created load balancer description
 */
@Nonnull
public LoadBalancerDescription createOrUpdateElasticLoadBalancer(@Nonnull String healthCheckUri,
        @Nonnull String applicationIdentifier) {
    LOGGER.info("ENFORCE LOAD BALANCER");

    DescribeInstancesRequest describeInstancesWithRoleRequest = new DescribeInstancesRequest(). //
            withFilters(new Filter("tag:Role", Arrays.asList(applicationIdentifier)));
    DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesWithRoleRequest);

    Iterable<Instance> expectedEc2Instances = toEc2Instances(describeInstancesResult.getReservations());

    Set<String> expectedAvailabilityZones = Sets
            .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_AVAILABILITY_ZONE));
    Listener expectedListener = new Listener("HTTP", 80, 8080);

    String loadBalancerName = applicationIdentifier;

    LoadBalancerDescription actualLoadBalancerDescription;
    try {
        DescribeLoadBalancersResult describeLoadBalancers = elb
                .describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName)));
        if (describeLoadBalancers.getLoadBalancerDescriptions().isEmpty()) {
            // unexpected, this should have been a
            // LoadBalancerNotFoundException
            actualLoadBalancerDescription = null;
        } else {
            // re-query to get updated config

            actualLoadBalancerDescription = Iterables
                    .getFirst(describeLoadBalancers.getLoadBalancerDescriptions(), null);
        }
    } catch (LoadBalancerNotFoundException e) {
        actualLoadBalancerDescription = null;
    }

    Set<String> actualAvailabilityZones;
    Set<String> actualInstanceIds;
    Policies actualPolicies;
    HealthCheck actualHealthCheck;
    ListenerDescription actualListenerDescription = null;
    if (actualLoadBalancerDescription == null) {
        CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withAvailabilityZones(expectedAvailabilityZones) //
                .withListeners(expectedListener);
        elb.createLoadBalancer(createLoadBalancerRequest);

        actualListenerDescription = new ListenerDescription().withListener(expectedListener);
        actualAvailabilityZones = expectedAvailabilityZones;
        actualInstanceIds = Collections.emptySet();
        actualHealthCheck = new HealthCheck();
        actualPolicies = new Policies();
    } else {
        // check listeners
        List<ListenerDescription> actualListenerDescriptions = actualLoadBalancerDescription
                .getListenerDescriptions();
        boolean loadBalancerMustBeRecreated;

        if (actualListenerDescriptions.size() == 1) {
            actualListenerDescription = Iterables.getOnlyElement(actualListenerDescriptions);
            Listener actualListener = actualListenerDescription.getListener();
            if (ObjectUtils.equals(expectedListener.getProtocol(), actualListener.getProtocol()) && //
                    ObjectUtils.equals(expectedListener.getLoadBalancerPort(),
                            actualListener.getLoadBalancerPort())
                    && //
                    ObjectUtils.equals(expectedListener.getInstancePort(), actualListener.getInstancePort())) {
                loadBalancerMustBeRecreated = false;
            } else {
                loadBalancerMustBeRecreated = true;
            }
        } else {
            loadBalancerMustBeRecreated = true;
        }

        if (loadBalancerMustBeRecreated) {
            LOGGER.info("Recreate miss configured load balancer actualListeners:{}, expectedListener:{}",
                    actualListenerDescriptions, expectedListener);
            elb.deleteLoadBalancer(new DeleteLoadBalancerRequest(loadBalancerName));
            return createOrUpdateElasticLoadBalancer(healthCheckUri, applicationIdentifier);
        }

        //
        actualAvailabilityZones = Sets.newHashSet(actualLoadBalancerDescription.getAvailabilityZones());
        actualInstanceIds = Sets.newHashSet(
                Iterables.transform(actualLoadBalancerDescription.getInstances(), ELB_INSTANCE_TO_INSTANCE_ID));

        actualHealthCheck = actualLoadBalancerDescription.getHealthCheck();

        actualPolicies = actualLoadBalancerDescription.getPolicies();
    }

    // HEALTH CHECK
    if (!healthCheckUri.startsWith("/")) {
        healthCheckUri = "/" + healthCheckUri;
    }

    HealthCheck expectedHealthCheck = new HealthCheck() //
            .withTarget("HTTP:8080" + healthCheckUri) //
            .withHealthyThreshold(2) //
            .withUnhealthyThreshold(2) //
            .withInterval(30) //
            .withTimeout(2);
    if (Objects.equal(expectedHealthCheck.getTarget(), actualHealthCheck.getTarget()) && //
            Objects.equal(expectedHealthCheck.getHealthyThreshold(), actualHealthCheck.getHealthyThreshold()) && //
            Objects.equal(expectedHealthCheck.getInterval(), actualHealthCheck.getInterval()) && //
            Objects.equal(expectedHealthCheck.getTimeout(), actualHealthCheck.getTimeout()) && //
            Objects.equal(expectedHealthCheck.getUnhealthyThreshold(),
                    actualHealthCheck.getHealthyThreshold())) {
        // health check is ok
    } else {
        LOGGER.info("Set Healthcheck: {}", expectedHealthCheck);
        elb.configureHealthCheck(new ConfigureHealthCheckRequest(loadBalancerName, expectedHealthCheck));
    }

    // AVAILABILITY ZONES
    // enable
    Iterable<String> availabilityZonesToEnable = Sets.difference(expectedAvailabilityZones,
            actualAvailabilityZones);
    LOGGER.info("Enable availability zones: {}", availabilityZonesToEnable);
    if (!Iterables.isEmpty(availabilityZonesToEnable)) {
        elb.enableAvailabilityZonesForLoadBalancer(new EnableAvailabilityZonesForLoadBalancerRequest(
                loadBalancerName, Lists.newArrayList(availabilityZonesToEnable)));
    }

    // disable
    Iterable<String> availabilityZonesToDisable = Sets.difference(actualAvailabilityZones,
            expectedAvailabilityZones);
    LOGGER.info("Disable availability zones: {}", availabilityZonesToDisable);
    if (!Iterables.isEmpty(availabilityZonesToDisable)) {
        elb.disableAvailabilityZonesForLoadBalancer(new DisableAvailabilityZonesForLoadBalancerRequest(
                loadBalancerName, Lists.newArrayList(availabilityZonesToDisable)));
    }

    // STICKINESS
    List<AppCookieStickinessPolicy> appCookieStickinessPoliciesToDelete = actualPolicies
            .getAppCookieStickinessPolicies();
    LOGGER.info("Delete app cookie stickiness policies: {}", appCookieStickinessPoliciesToDelete);
    for (AppCookieStickinessPolicy appCookieStickinessPolicyToDelete : appCookieStickinessPoliciesToDelete) {
        elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName,
                appCookieStickinessPolicyToDelete.getPolicyName()));
    }

    final LBCookieStickinessPolicy expectedLbCookieStickinessPolicy = new LBCookieStickinessPolicy(
            applicationIdentifier + "-stickiness-policy", null);
    Predicate<LBCookieStickinessPolicy> isExpectedPolicyPredicate = new Predicate<LBCookieStickinessPolicy>() {
        @Override
        public boolean apply(LBCookieStickinessPolicy lbCookieStickinessPolicy) {
            return Objects.equal(expectedLbCookieStickinessPolicy.getPolicyName(),
                    lbCookieStickinessPolicy.getPolicyName()) && //
            Objects.equal(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod(),
                    lbCookieStickinessPolicy.getCookieExpirationPeriod());
        }
    };
    Collection<LBCookieStickinessPolicy> lbCookieStickinessPoliciesToDelete = Collections2
            .filter(actualPolicies.getLBCookieStickinessPolicies(), Predicates.not(isExpectedPolicyPredicate));
    LOGGER.info("Delete lb cookie stickiness policies: {}", lbCookieStickinessPoliciesToDelete);
    for (LBCookieStickinessPolicy lbCookieStickinessPolicy : lbCookieStickinessPoliciesToDelete) {
        elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName,
                lbCookieStickinessPolicy.getPolicyName()));
    }

    Collection<LBCookieStickinessPolicy> matchingLbCookieStyckinessPolicy = Collections2
            .filter(actualPolicies.getLBCookieStickinessPolicies(), isExpectedPolicyPredicate);
    if (matchingLbCookieStyckinessPolicy.isEmpty()) {
        // COOKIE STICKINESS
        CreateLBCookieStickinessPolicyRequest createLbCookieStickinessPolicy = new CreateLBCookieStickinessPolicyRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withPolicyName(expectedLbCookieStickinessPolicy.getPolicyName())
                //
                .withCookieExpirationPeriod(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod());
        LOGGER.info("Create LBCookieStickinessPolicy: {}", createLbCookieStickinessPolicy);
        elb.createLBCookieStickinessPolicy(createLbCookieStickinessPolicy);

    } else {
        // what ?
    }

    // TODO verify load balancer policy is associated with the listener
    List<String> expectedListenerDescriptionPolicyNames = Lists
            .newArrayList(expectedLbCookieStickinessPolicy.getPolicyName());

    boolean mustOverWriteListenerPolicy = !ObjectUtils.equals(expectedListenerDescriptionPolicyNames,
            actualListenerDescription.getPolicyNames());

    if (mustOverWriteListenerPolicy) {

        SetLoadBalancerPoliciesOfListenerRequest setLoadBalancerPoliciesOfListenerRequest = new SetLoadBalancerPoliciesOfListenerRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withLoadBalancerPort(expectedListener.getLoadBalancerPort()) //
                .withPolicyNames(expectedLbCookieStickinessPolicy.getPolicyName());
        LOGGER.debug("setLoadBalancerPoliciesOfListener: {}", setLoadBalancerPoliciesOfListenerRequest);
        elb.setLoadBalancerPoliciesOfListener(setLoadBalancerPoliciesOfListenerRequest);
    }

    // INSTANCES
    Set<String> expectedEc2InstanceIds = Sets
            .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_INSTANCE_ID));
    // register
    Iterable<String> instanceIdsToRegister = Sets.difference(expectedEc2InstanceIds, actualInstanceIds);
    LOGGER.info("Register {} instances: {}", applicationIdentifier, instanceIdsToRegister);
    if (!Iterables.isEmpty(instanceIdsToRegister)) {
        elb.registerInstancesWithLoadBalancer(new RegisterInstancesWithLoadBalancerRequest(loadBalancerName,
                Lists.newArrayList(Iterables.transform(instanceIdsToRegister, INSTANCE_ID_TO_ELB_INSTANCE))));
    }

    // deregister
    Iterable<String> instanceIdsToDeregister = Sets.difference(actualInstanceIds, expectedEc2InstanceIds);
    LOGGER.info("Deregister {} instances: {}", applicationIdentifier, instanceIdsToDeregister);
    if (!Iterables.isEmpty(instanceIdsToDeregister)) {
        elb.deregisterInstancesFromLoadBalancer(new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName,
                Lists.newArrayList(Iterables.transform(instanceIdsToDeregister, INSTANCE_ID_TO_ELB_INSTANCE))));
    }

    // QUERY TO GET UP TO DATE LOAD BALANCER DESCRIPTION
    LoadBalancerDescription elasticLoadBalancerDescription = Iterables.getOnlyElement(
            elb.describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName)))
                    .getLoadBalancerDescriptions());

    return elasticLoadBalancerDescription;
}

From source file:fr.xebia.workshop.infrastructureascode.AmazonAwsPetclinicInfrastructureEnforcer.java

License:Apache License

/**
 * /*from  ww w .  j a v a2s.com*/
 * @param healthCheckUri
 *            start with slash. E.g. "/myapp/healthcheck.jsp
 * @param applicationIdentifier
 *            used to name the load balancer and to filter the instances on
 *            their "Role" tag.
 * @return created load balancer description
 */
@Nonnull
public LoadBalancerDescription createOrUpdateElasticLoadBalancer(@Nonnull String healthCheckUri,
        @Nonnull String applicationIdentifier) {
    logger.info("ENFORCE LOAD BALANCER");

    DescribeInstancesRequest describeInstancesWithRoleRequest = new DescribeInstancesRequest(). //
            withFilters(new Filter("tag:Role", Arrays.asList(applicationIdentifier)));
    DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesWithRoleRequest);

    Iterable<Instance> expectedEc2Instances = toEc2Instances(describeInstancesResult.getReservations());

    Set<String> expectedAvailabilityZones = Sets
            .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_AVAILABILITY_ZONE));
    Listener expectedListener = new Listener("HTTP", 80, 8080);

    String loadBalancerName = applicationIdentifier;

    LoadBalancerDescription actualLoadBalancerDescription;
    try {
        DescribeLoadBalancersResult describeLoadBalancers = elb
                .describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName)));
        if (describeLoadBalancers.getLoadBalancerDescriptions().isEmpty()) {
            // unexpected, this should have been a
            // LoadBalancerNotFoundException
            actualLoadBalancerDescription = null;
        } else {
            // re-query to get updated config

            actualLoadBalancerDescription = Iterables
                    .getFirst(describeLoadBalancers.getLoadBalancerDescriptions(), null);
        }
    } catch (LoadBalancerNotFoundException e) {
        actualLoadBalancerDescription = null;
    }

    Set<String> actualAvailabilityZones;
    Set<String> actualInstanceIds;
    Policies actualPolicies;
    HealthCheck actualHealthCheck;
    ListenerDescription actualListenerDescription = null;
    if (actualLoadBalancerDescription == null) {
        CreateLoadBalancerRequest createLoadBalancerRequest = new CreateLoadBalancerRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withAvailabilityZones(expectedAvailabilityZones) //
                .withListeners(expectedListener);
        elb.createLoadBalancer(createLoadBalancerRequest);

        actualListenerDescription = new ListenerDescription().withListener(expectedListener);
        actualAvailabilityZones = expectedAvailabilityZones;
        actualInstanceIds = Collections.emptySet();
        actualHealthCheck = new HealthCheck();
        actualPolicies = new Policies();
    } else {
        // check listeners
        List<ListenerDescription> actualListenerDescriptions = actualLoadBalancerDescription
                .getListenerDescriptions();
        boolean loadBalancerMustBeRecreated;

        if (actualListenerDescriptions.size() == 1) {
            actualListenerDescription = Iterables.getOnlyElement(actualListenerDescriptions);
            Listener actualListener = actualListenerDescription.getListener();
            if (ObjectUtils.equals(expectedListener.getProtocol(), actualListener.getProtocol()) && //
                    ObjectUtils.equals(expectedListener.getLoadBalancerPort(),
                            actualListener.getLoadBalancerPort())
                    && //
                    ObjectUtils.equals(expectedListener.getInstancePort(), actualListener.getInstancePort())) {
                loadBalancerMustBeRecreated = false;
            } else {
                loadBalancerMustBeRecreated = true;
            }
        } else {
            loadBalancerMustBeRecreated = true;
        }

        if (loadBalancerMustBeRecreated) {
            logger.info("Recreate miss configured load balancer actualListeners:{}, expectedListener:{}",
                    actualListenerDescriptions, expectedListener);
            elb.deleteLoadBalancer(new DeleteLoadBalancerRequest(loadBalancerName));
            return createOrUpdateElasticLoadBalancer(healthCheckUri, applicationIdentifier);
        }

        //
        actualAvailabilityZones = Sets.newHashSet(actualLoadBalancerDescription.getAvailabilityZones());
        actualInstanceIds = Sets.newHashSet(
                Iterables.transform(actualLoadBalancerDescription.getInstances(), ELB_INSTANCE_TO_INSTANCE_ID));

        actualHealthCheck = actualLoadBalancerDescription.getHealthCheck();

        actualPolicies = actualLoadBalancerDescription.getPolicies();
    }

    // HEALTH CHECK
    if (!healthCheckUri.startsWith("/")) {
        healthCheckUri = "/" + healthCheckUri;
    }

    HealthCheck expectedHealthCheck = new HealthCheck() //
            .withTarget("HTTP:8080" + healthCheckUri) //
            .withHealthyThreshold(2) //
            .withUnhealthyThreshold(2) //
            .withInterval(30) //
            .withTimeout(2);
    if (Objects.equal(expectedHealthCheck.getTarget(), actualHealthCheck.getTarget()) && //
            Objects.equal(expectedHealthCheck.getHealthyThreshold(), actualHealthCheck.getHealthyThreshold()) && //
            Objects.equal(expectedHealthCheck.getInterval(), actualHealthCheck.getInterval()) && //
            Objects.equal(expectedHealthCheck.getTimeout(), actualHealthCheck.getTimeout()) && //
            Objects.equal(expectedHealthCheck.getUnhealthyThreshold(),
                    actualHealthCheck.getHealthyThreshold())) {
        // health check is ok
    } else {
        logger.info("Set Healthcheck: " + expectedHealthCheck);
        elb.configureHealthCheck(new ConfigureHealthCheckRequest(loadBalancerName, expectedHealthCheck));
    }

    // AVAILABILITY ZONES
    // enable
    Iterable<String> availabilityZonesToEnable = Sets.difference(expectedAvailabilityZones,
            actualAvailabilityZones);
    logger.info("Enable availability zones: " + availabilityZonesToEnable);
    if (!Iterables.isEmpty(availabilityZonesToEnable)) {
        elb.enableAvailabilityZonesForLoadBalancer(new EnableAvailabilityZonesForLoadBalancerRequest(
                loadBalancerName, Lists.newArrayList(availabilityZonesToEnable)));
    }

    // disable
    Iterable<String> availabilityZonesToDisable = Sets.difference(actualAvailabilityZones,
            expectedAvailabilityZones);
    logger.info("Disable availability zones: " + availabilityZonesToDisable);
    if (!Iterables.isEmpty(availabilityZonesToDisable)) {
        elb.disableAvailabilityZonesForLoadBalancer(new DisableAvailabilityZonesForLoadBalancerRequest(
                loadBalancerName, Lists.newArrayList(availabilityZonesToDisable)));
    }

    // STICKINESS
    List<AppCookieStickinessPolicy> appCookieStickinessPoliciesToDelete = actualPolicies
            .getAppCookieStickinessPolicies();
    logger.info("Delete app cookie stickiness policies:" + appCookieStickinessPoliciesToDelete);
    for (AppCookieStickinessPolicy appCookieStickinessPolicyToDelete : appCookieStickinessPoliciesToDelete) {
        elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName,
                appCookieStickinessPolicyToDelete.getPolicyName()));
    }

    final LBCookieStickinessPolicy expectedLbCookieStickinessPolicy = new LBCookieStickinessPolicy(
            applicationIdentifier + "-stickiness-policy", null);
    Predicate<LBCookieStickinessPolicy> isExpectedPolicyPredicate = new Predicate<LBCookieStickinessPolicy>() {
        @Override
        public boolean apply(LBCookieStickinessPolicy lbCookieStickinessPolicy) {
            return Objects.equal(expectedLbCookieStickinessPolicy.getPolicyName(),
                    lbCookieStickinessPolicy.getPolicyName()) && //
            Objects.equal(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod(),
                    lbCookieStickinessPolicy.getCookieExpirationPeriod());
        }
    };
    Collection<LBCookieStickinessPolicy> lbCookieStickinessPoliciesToDelete = Collections2
            .filter(actualPolicies.getLBCookieStickinessPolicies(), Predicates.not(isExpectedPolicyPredicate));
    logger.info("Delete lb cookie stickiness policies: " + lbCookieStickinessPoliciesToDelete);
    for (LBCookieStickinessPolicy lbCookieStickinessPolicy : lbCookieStickinessPoliciesToDelete) {
        elb.deleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName,
                lbCookieStickinessPolicy.getPolicyName()));
    }

    Collection<LBCookieStickinessPolicy> matchingLbCookieStyckinessPolicy = Collections2
            .filter(actualPolicies.getLBCookieStickinessPolicies(), isExpectedPolicyPredicate);
    if (matchingLbCookieStyckinessPolicy.isEmpty()) {
        // COOKIE STICKINESS
        CreateLBCookieStickinessPolicyRequest createLbCookieStickinessPolicy = new CreateLBCookieStickinessPolicyRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withPolicyName(expectedLbCookieStickinessPolicy.getPolicyName()) //
                .withCookieExpirationPeriod(expectedLbCookieStickinessPolicy.getCookieExpirationPeriod());
        logger.info("Create LBCookieStickinessPolicy: " + createLbCookieStickinessPolicy);
        elb.createLBCookieStickinessPolicy(createLbCookieStickinessPolicy);

    } else {
        // what ?
    }

    // TODO verify load balancer policy is associated with the listener
    List<String> expectedListenerDescriptionPolicyNames = Lists
            .newArrayList(expectedLbCookieStickinessPolicy.getPolicyName());

    boolean mustOverWriteListenerPolicy = !ObjectUtils.equals(expectedListenerDescriptionPolicyNames,
            actualListenerDescription.getPolicyNames());

    if (mustOverWriteListenerPolicy) {

        SetLoadBalancerPoliciesOfListenerRequest setLoadBalancerPoliciesOfListenerRequest = new SetLoadBalancerPoliciesOfListenerRequest() //
                .withLoadBalancerName(loadBalancerName) //
                .withLoadBalancerPort(expectedListener.getLoadBalancerPort()) //
                .withPolicyNames(expectedLbCookieStickinessPolicy.getPolicyName());
        logger.debug("setLoadBalancerPoliciesOfListener: {}", setLoadBalancerPoliciesOfListenerRequest);
        elb.setLoadBalancerPoliciesOfListener(setLoadBalancerPoliciesOfListenerRequest);
    }

    // INSTANCES
    Set<String> expectedEc2InstanceIds = Sets
            .newHashSet(Iterables.transform(expectedEc2Instances, EC2_INSTANCE_TO_INSTANCE_ID));
    // register
    Iterable<String> instanceIdsToRegister = Sets.difference(expectedEc2InstanceIds, actualInstanceIds);
    logger.info("Register " + applicationIdentifier + " instances: " + instanceIdsToRegister);
    if (!Iterables.isEmpty(instanceIdsToRegister)) {
        elb.registerInstancesWithLoadBalancer(new RegisterInstancesWithLoadBalancerRequest(loadBalancerName,
                Lists.newArrayList(Iterables.transform(instanceIdsToRegister, INSTANCE_ID_TO_ELB_INSTANCE))));
    }

    // deregister
    Iterable<String> instanceIdsToDeregister = Sets.difference(actualInstanceIds, expectedEc2InstanceIds);
    logger.info("Deregister " + applicationIdentifier + " instances: " + instanceIdsToDeregister);
    if (!Iterables.isEmpty(instanceIdsToDeregister)) {
        elb.deregisterInstancesFromLoadBalancer(new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName,
                Lists.newArrayList(Iterables.transform(instanceIdsToDeregister, INSTANCE_ID_TO_ELB_INSTANCE))));
    }

    // QUERY TO GET UP TO DATE LOAD BALANCER DESCRIPTION
    LoadBalancerDescription elasticLoadBalancerDescription = Iterables.getOnlyElement(
            elb.describeLoadBalancers(new DescribeLoadBalancersRequest(Arrays.asList(loadBalancerName)))
                    .getLoadBalancerDescriptions());

    return elasticLoadBalancerDescription;
}

From source file:org.apache.stratos.aws.extension.AWSHelper.java

License:Apache License

/**
 * Detaches provided instances from the load balancer, associated with some
 * cluster. Useful when instances are removed from the cluster with which
 * this load balancer is associated.//w w  w  .ja  v  a  2 s . com
 *
 * @param loadBalancerName
 * @param instances        to be de-registered from load balancer
 * @param region           of the load balancer
 */
public void deregisterInstancesFromLoadBalancer(String loadBalancerName, List<Instance> instances,
        String region) {

    log.info("De-registering following instance(s) from load balancer " + loadBalancerName);

    for (Instance instance : instances) {
        log.info(instance.getInstanceId());
    }

    DeregisterInstancesFromLoadBalancerRequest deregisterInstancesFromLoadBalancerRequest = new DeregisterInstancesFromLoadBalancerRequest(
            loadBalancerName, instances);

    try {
        elbClient.setEndpoint(String.format(Constants.ELB_ENDPOINT_URL_FORMAT, region));

        elbClient.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);

    } catch (AmazonClientException e) {
        log.error("Could not de-register instances from load balancer " + loadBalancerName, e);
    }
}

From source file:web.component.impl.aws.AWSELBImpl.java

@Override
public DeregisterInstancesFromLoadBalancerResult deregisterInstancesFromLoadBalancer(String loadBalancerName,
        Collection<Instance> instances) {

    if (loadBalancerName == null || loadBalancerName.isEmpty())
        throw new IllegalArgumentException("Load Balancer Name not specified.");
    if (instances == null || instances.isEmpty())
        throw new IllegalArgumentException("Instances not specified.");

    return awsHttpClient.deregisterInstancesFromLoadBalancer(
            new DeregisterInstancesFromLoadBalancerRequest(loadBalancerName, new ArrayList<>(instances)));
}