Example usage for com.amazonaws.services.elasticloadbalancing.model ListenerDescription getListener

List of usage examples for com.amazonaws.services.elasticloadbalancing.model ListenerDescription getListener

Introduction

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

Prototype


public Listener getListener() 

Source Link

Document

The listener.

Usage

From source file:com.haskins.cloudtrailviewer.dialog.resourcedetail.detailpanels.ElbDetail.java

License:Open Source License

private void buildUI(DescribeLoadBalancersResult detail) {

    JTabbedPane tabs = new JTabbedPane();

    tabs.add("Load Balancer", primaryScrollPane);

    final JTable healthCheckTable = new JTable(healthCheckTableModel);
    JScrollPane healthCheckScrollPane = new JScrollPane(healthCheckTable);
    tabs.add("Health Check", healthCheckScrollPane);

    final JTable listenersTable = new JTable(listenersTableModel);
    JScrollPane listenersScrollPane = new JScrollPane(listenersTable);
    tabs.add("Listeners", listenersScrollPane);

    this.add(tabs, BorderLayout.CENTER);

    List<LoadBalancerDescription> elbs = detail.getLoadBalancerDescriptions();
    if (!elbs.isEmpty()) {

        LoadBalancerDescription elb = elbs.get(0);

        if (!elb.getAvailabilityZones().isEmpty()) {

            StringBuilder azs = new StringBuilder();
            for (String az : elb.getAvailabilityZones()) {
                azs.append(az).append(", ");
            }/*w w w  . j  a v a 2  s . com*/

            primaryTableModel.addRow(new Object[] { "Availability Zones", azs.toString() });
        }

        if (elb.getCanonicalHostedZoneName() != null) {
            primaryTableModel
                    .addRow(new Object[] { "Canonical Hosted Zone name", elb.getCanonicalHostedZoneName() });
        }
        if (elb.getCanonicalHostedZoneNameID() != null) {
            primaryTableModel.addRow(
                    new Object[] { "Canonical Hosted Zone name Id", elb.getCanonicalHostedZoneNameID() });
        }
        if (elb.getCreatedTime() != null) {
            primaryTableModel.addRow(new Object[] { "Created", elb.getCreatedTime() });
        }
        if (elb.getDNSName() != null) {
            primaryTableModel.addRow(new Object[] { "DNS Name", elb.getDNSName() });
        }

        if (!elb.getInstances().isEmpty()) {

            StringBuilder instances = new StringBuilder();
            for (Instance instance : elb.getInstances()) {
                instances.append(instance.getInstanceId()).append(", ");
            }

            primaryTableModel.addRow(new Object[] { "Instances", instances.toString() });
        }

        if (elb.getLoadBalancerName() != null) {
            primaryTableModel.addRow(new Object[] { "Load Balander Name", elb.getLoadBalancerName() });
        }
        if (elb.getScheme() != null) {
            primaryTableModel.addRow(new Object[] { "Scheme", elb.getScheme() });
        }

        if (!elb.getSecurityGroups().isEmpty()) {

            StringBuilder sgs = new StringBuilder();
            for (String sg : elb.getSecurityGroups()) {
                sgs.append(sg).append(", ");
            }

            primaryTableModel.addRow(new Object[] { "Security Groups", sgs.toString() });
        }

        if (elb.getSourceSecurityGroup() != null) {
            primaryTableModel.addRow(
                    new Object[] { "Source Security Group", elb.getSourceSecurityGroup().getGroupName() });
        }

        if (!elb.getSubnets().isEmpty()) {

            StringBuilder subnets = new StringBuilder();
            for (String subnet : elb.getSubnets()) {
                subnets.append(subnet).append(", ");
            }

            primaryTableModel.addRow(new Object[] { "Subnets", subnets.toString() });
        }

        if (elb.getVPCId() != null) {
            primaryTableModel.addRow(new Object[] { "VPC Id", elb.getVPCId() });
        }

        /**
         * Health Check
         */

        healthCheckTableModel.addColumn("Property");
        healthCheckTableModel.addColumn("Value");

        HealthCheck healthCheck = elb.getHealthCheck();
        if (healthCheck.getHealthyThreshold() != null) {
            healthCheckTableModel.addRow(new Object[] { "Threshold", healthCheck.getHealthyThreshold() });
        }
        if (healthCheck.getInterval() != null) {
            healthCheckTableModel.addRow(new Object[] { "Interval", healthCheck.getInterval() });
        }
        if (healthCheck.getTarget() != null) {
            healthCheckTableModel.addRow(new Object[] { "Target", healthCheck.getTarget() });
        }
        if (healthCheck.getTimeout() != null) {
            healthCheckTableModel.addRow(new Object[] { "Timeout", healthCheck.getTimeout() });
        }
        if (healthCheck.getUnhealthyThreshold() != null) {
            healthCheckTableModel
                    .addRow(new Object[] { "Unhealth Threshold", healthCheck.getUnhealthyThreshold() });
        }

        /**
         * Listeners
         */

        listenersTableModel.addColumn("Instance Port");
        listenersTableModel.addColumn("Instance Protocol");
        listenersTableModel.addColumn("Load Balancer Port");
        listenersTableModel.addColumn("Load Balancer Protocol");
        listenersTableModel.addColumn("SSL Certificate Id");

        List<ListenerDescription> listenerDescriptions = elb.getListenerDescriptions();
        for (ListenerDescription description : listenerDescriptions) {

            Listener listener = description.getListener();

            String ssl = "";
            if (listener.getSSLCertificateId() != null) {
                ssl = listener.getSSLCertificateId();
            }

            listenersTableModel
                    .addRow(new Object[] { listener.getInstancePort(), listener.getInstanceProtocol(),
                            listener.getLoadBalancerPort(), listener.getProtocol(), ssl });
        }
    }
}

From source file:com.kixeye.chassis.bootstrap.aws.ServerInstanceContext.java

License:Apache License

private void initExhibitor() {
    LOGGER.info("Initializing exhibitor info...");

    List<LoadBalancerDescription> loadBalancers = AwsUtils.findLoadBalancers(amazonElasticLoadBalancing,
            new ZookeeperElbFilter(environment));

    if (loadBalancers.size() == 0) {
        LOGGER.info("No Zookeeper ELBs for environment " + environment);
        return;//from www  . jav  a  2  s .  c om
    } else if (loadBalancers.size() != 1) {
        throw new BootstrapException("Found multiple Zookeeper ELBs for environment " + environment);
    }

    LoadBalancerDescription loadBalancer = loadBalancers.get(0);

    ListenerDescription exhibitorListenerDescription = getExhibitorListenerDescription(loadBalancer);

    this.exhibitorHost = loadBalancer.getDNSName();
    this.exhibitorPort = exhibitorListenerDescription.getListener().getLoadBalancerPort();

    LOGGER.info("Initialized exhibitor info with: exhibitorHost: {}, exhibitorPort: {}", exhibitorHost,
            exhibitorPort);
}

From source file:com.kixeye.chassis.bootstrap.aws.ServerInstanceContext.java

License:Apache License

private ListenerDescription getExhibitorListenerDescription(LoadBalancerDescription loadBalancer) {
    for (ListenerDescription listenerDescription : loadBalancer.getListenerDescriptions()) {
        if (listenerDescription.getListener().getProtocol().toLowerCase().equals("http")) {
            return listenerDescription;
        }// w  w  w .j a  v a 2 s. c  o  m
    }

    throw new BootstrapException(
            "Unable to find any listeners which supports http on ELB " + loadBalancer.getLoadBalancerName());
}

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

License:Apache License

/**
 * Returns all the listeners attached to the load balancer. Useful while
 * deciding if all the listeners are necessary or some should be removed.
 * /*  w  w  w  .  j a  va 2  s  .c  o  m*/
 * @param loadBalancerName
 * @return list of instances attached to load balancer
 */
public List<Listener> getAttachedListeners(String loadBalancerName) {
    try {
        LoadBalancerDescription lbDescription = getLoadBalancerDescription(loadBalancerName);

        if (lbDescription == null) {
            log.warn("Could not find description of load balancer " + loadBalancerName);
            return null;
        }

        List<Listener> listeners = new ArrayList<Listener>();

        List<ListenerDescription> listenerDescriptions = lbDescription.getListenerDescriptions();

        for (ListenerDescription listenerDescription : listenerDescriptions) {
            listeners.add(listenerDescription.getListener());
        }

        return listeners;

    } catch (Exception e) {
        log.error("Could not find description of load balancer " + loadBalancerName);
        return null;
    }

}

From source file:com.zotoh.cloudapi.aws.ElasticLoadBalancer.java

License:Open Source License

private LbListener toLis(ListenerDescription desc) {
    LbListener rc = null;/*  ww w.j a  v  a2  s  . c o m*/
    if (desc != null) {
        rc = new LbListener();
        rc.setAlgorithm(LbAlgorithm.ROUND_ROBIN);
        rc.setNetworkProtocol(toLbProtocol(desc.getListener().getProtocol()));
        rc.setPublicPort(desc.getListener().getLoadBalancerPort());
        rc.setPrivatePort(desc.getListener().getInstancePort());
    }
    return rc;
}

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

License:Apache License

/**
 * /*from  w  ww .java 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  w  ww .  ja v a 2s .  c o 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 " + 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

/**
 * Returns all the listeners attached to the load balancer. Useful while
 * deciding if all the listeners are necessary or some should be removed.
 *
 * @param loadBalancerName//  w  ww .  j  a  va 2  s.  c o m
 * @param region
 * @return list of instances attached to load balancer
 */
public List<Listener> getAttachedListeners(String loadBalancerName, String region) {
    try {
        LoadBalancerDescription lbDescription = getLoadBalancerDescription(loadBalancerName, region);

        if (lbDescription == null) {
            log.warn("Could not find description of load balancer " + loadBalancerName);
            return null;
        }

        List<Listener> listeners = new ArrayList<Listener>();

        List<ListenerDescription> listenerDescriptions = lbDescription.getListenerDescriptions();

        for (ListenerDescription listenerDescription : listenerDescriptions) {
            listeners.add(listenerDescription.getListener());
        }

        return listeners;

    } catch (AmazonClientException e) {
        log.error("Could not find description of load balancer " + loadBalancerName);
        return null;
    }

}