Finding the region and availability zone from member id.

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/da1963a0
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/da1963a0
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/da1963a0

Branch: refs/heads/gsoc-projects-2015
Commit: da1963a07f737d6cf08dbdf0dad5763828de479b
Parents: f4d8087
Author: swapnilpatilRajaram <[email protected]>
Authored: Fri Jul 24 09:36:22 2015 +0000
Committer: swapnilpatilRajaram <[email protected]>
Committed: Fri Jul 24 09:36:22 2015 +0000

----------------------------------------------------------------------
 .../src/main/conf/aws-credentials.conf          |  4 +-
 .../apache/stratos/aws/extension/AWSHelper.java | 93 +++++++++++++++-----
 .../stratos/aws/extension/AWSLoadBalancer.java  | 69 +++++++++++----
 .../apache/stratos/aws/extension/Constants.java |  2 -
 4 files changed, 123 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/da1963a0/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf 
b/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
index 0dbcb4a..d9d296c 100644
--- a/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
+++ b/extensions/load-balancer/aws-extension/src/main/conf/aws-credentials.conf
@@ -1,4 +1,2 @@
 access-key=
-secret-key=
-availability-zone=
-region=
\ No newline at end of file
+secret-key=
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/da1963a0/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
index 924d3bd..9ec10de 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSHelper.java
@@ -41,8 +41,6 @@ import com.amazonaws.services.elasticloadbalancing.model.*;
 public class AWSHelper {
        private String awsAccessKey;
        private String awsSecretKey;
-       private String availabilityZone;
-       private String region;
 
        private BasicAWSCredentials awsCredentials;
        private ClientConfiguration clientConfiguration;
@@ -71,17 +69,12 @@ public class AWSHelper {
                                        .getProperty(Constants.AWS_ACCESS_KEY);
                        this.awsSecretKey = properties
                                        .getProperty(Constants.AWS_SECRET_KEY);
-                       this.availabilityZone = properties
-                                       
.getProperty(Constants.AVAILABILITY_ZONE_KEY);
-                       this.region = 
properties.getProperty(Constants.REGION_KEY);
 
                        awsCredentials = new BasicAWSCredentials(awsAccessKey, 
awsSecretKey);
                        clientConfiguration = new ClientConfiguration();
 
                        lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials,
                                        clientConfiguration);
-                       lbClient.setEndpoint("elasticloadbalancing." + 
this.region
-                                       + ".amazonaws.com");
 
                } catch (IOException e) {
                        log.error("Error reading aws configuration file.");
@@ -102,9 +95,11 @@ public class AWSHelper {
         * 
         * @param name
         * @param listeners
+        * @param region
         * @return DNS name of newly created load balancer
         */
-       public String createLoadBalancer(String name, List<Listener> listeners) 
{
+       public String createLoadBalancer(String name, List<Listener> listeners,
+                       String region) {
 
                log.info("Creating load balancer " + name);
 
@@ -114,10 +109,13 @@ public class AWSHelper {
                createLoadBalancerRequest.setListeners(listeners);
 
                Set<String> availabilityZones = new HashSet<String>();
-               availabilityZones.add(availabilityZone);
+               availabilityZones.add(getAvailabilityZoneFromRegion(region));
 
                
createLoadBalancerRequest.setAvailabilityZones(availabilityZones);
 
+               lbClient.setEndpoint("elasticloadbalancing." + region
+                               + ".amazonaws.com");
+
                try {
 
                        CreateLoadBalancerResult clbResult = lbClient
@@ -138,8 +136,9 @@ public class AWSHelper {
         * with which this load balancer was associated, is removed.
         * 
         * @param loadBalancerName
+        * @param region
         */
-       public void deleteLoadBalancer(String loadBalancerName) {
+       public void deleteLoadBalancer(String loadBalancerName, String region) {
 
                log.info("Deleting load balancer " + loadBalancerName);
 
@@ -147,6 +146,9 @@ public class AWSHelper {
                deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
 
                try {
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
+
                        lbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
                        return;
 
@@ -163,9 +165,10 @@ public class AWSHelper {
         * 
         * @param loadBalancerName
         * @param instances
+        * @param region
         */
        public void registerInstancesToLoadBalancer(String loadBalancerName,
-                       List<Instance> instances) {
+                       List<Instance> instances, String region) {
 
                log.info("Attaching instance " + instances.get(0)
                                + " to load balancer + " + loadBalancerName);
@@ -174,7 +177,9 @@ public class AWSHelper {
                                loadBalancerName, instances);
 
                try {
-
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
+                       
                        RegisterInstancesWithLoadBalancerResult result = 
lbClient
                                        
.registerInstancesWithLoadBalancer(registerInstancesWithLoadBalancerRequest);
                        return;
@@ -193,9 +198,10 @@ public class AWSHelper {
         * 
         * @param loadBalancerName
         * @param instances
+        * @param region
         */
        public void deregisterInstancesFromLoadBalancer(String loadBalancerName,
-                       List<Instance> instances) {
+                       List<Instance> instances, String region) {
 
                log.info("Detaching instance " + instances.get(0)
                                + " from load balancer + " + loadBalancerName);
@@ -204,6 +210,9 @@ public class AWSHelper {
                                loadBalancerName, instances);
 
                try {
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
+                       
                        DeregisterInstancesFromLoadBalancerResult result = 
lbClient
                                        
.deregisterInstancesFromLoadBalancer(deregisterInstancesFromLoadBalancerRequest);
                        return;
@@ -220,10 +229,11 @@ public class AWSHelper {
         * instances, listeners associated with load balancer
         * 
         * @param loadBalancerName
+        * @param region
         * @return description of the load balancer
         */
        private LoadBalancerDescription getLoadBalancerDescription(
-                       String loadBalancerName) {
+                       String loadBalancerName, String region) {
 
                List<String> loadBalancers = new ArrayList<String>();
 
@@ -233,6 +243,9 @@ public class AWSHelper {
                                loadBalancers);
 
                try {
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
+                       
                        DescribeLoadBalancersResult result = lbClient
                                        
.describeLoadBalancers(describeLoadBalancersRequest);
 
@@ -254,11 +267,12 @@ public class AWSHelper {
         * all attached instances are required or some should be detached.
         * 
         * @param loadBalancerName
+        * @param region
         * @return list of instances attached
         */
-       public List<Instance> getAttachedInstances(String loadBalancerName) {
+       public List<Instance> getAttachedInstances(String loadBalancerName, 
String region) {
                try {
-                       LoadBalancerDescription lbDescription = 
getLoadBalancerDescription(loadBalancerName);
+                       LoadBalancerDescription lbDescription = 
getLoadBalancerDescription(loadBalancerName, region);
 
                        if (lbDescription == null) {
                                log.warn("Could not find description of load 
balancer "
@@ -283,9 +297,10 @@ public class AWSHelper {
         * 
         * @param loadBalancerName
         * @param listeners
+        * @param region
         */
        public void addListenersToLoadBalancer(String loadBalancerName,
-                       List<Listener> listeners) {
+                       List<Listener> listeners, String region) {
                if (listeners.size() == 0)
                        return;
 
@@ -295,6 +310,8 @@ public class AWSHelper {
                                .setLoadBalancerName(loadBalancerName);
 
                try {
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
 
                        
lbClient.createLoadBalancerListeners(createLoadBalancerListenersRequest);
                        return;
@@ -312,9 +329,10 @@ public class AWSHelper {
         * 
         * @param loadBalancerName
         * @param listeners
+        * @param region
         */
        public void removeListenersFromLoadBalancer(String loadBalancerName,
-                       List<Listener> listeners) {
+                       List<Listener> listeners, String region) {
                if (listeners.size() == 0)
                        return;
 
@@ -332,6 +350,8 @@ public class AWSHelper {
                                .setLoadBalancerPorts(loadBalancerPorts);
 
                try {
+                       lbClient.setEndpoint("elasticloadbalancing." + region
+                                       + ".amazonaws.com");
 
                        
lbClient.deleteLoadBalancerListeners(deleteLoadBalancerListenersRequest);
                        return;
@@ -348,11 +368,12 @@ public class AWSHelper {
         * deciding if all the listeners are necessary or some should be 
removed.
         * 
         * @param loadBalancerName
+        * @param region
         * @return list of instances attached to load balancer
         */
-       public List<Listener> getAttachedListeners(String loadBalancerName) {
+       public List<Listener> getAttachedListeners(String loadBalancerName, 
String region) {
                try {
-                       LoadBalancerDescription lbDescription = 
getLoadBalancerDescription(loadBalancerName);
+                       LoadBalancerDescription lbDescription = 
getLoadBalancerDescription(loadBalancerName, region);
 
                        if (lbDescription == null) {
                                log.warn("Could not find description of load 
balancer "
@@ -421,8 +442,10 @@ public class AWSHelper {
        }
 
        /**
+        * Extract instance id in IaaS side from member instance name
+        * 
         * @param memberInstanceName
-        * @return
+        * @return instance id in IaaS
         */
        public String getAWSInstanceName(final String memberInstanceName) {
                if (memberInstanceName.contains("/")) {
@@ -432,4 +455,32 @@ public class AWSHelper {
                        return memberInstanceName;
                }
        }
+
+       /**
+        * Extract IaaS region from member instance name
+        * 
+        * @param memberInstanceName
+        * @return IaaS region to which member belongs
+        */
+       public String getAWSRegion(final String memberInstanceName) {
+               if (memberInstanceName.contains("/")) {
+                       return memberInstanceName.substring(0,
+                                       memberInstanceName.indexOf("/"));
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Get availability zone from region
+        * 
+        * @param region
+        * @return Availability zone of IaaS
+        */
+       public String getAvailabilityZoneFromRegion(String region) {
+               if (region != null) {
+                       return region + "a";
+               } else
+                       return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/da1963a0/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
index 99d6906..2d4f40c 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/AWSLoadBalancer.java
@@ -39,12 +39,12 @@ public class AWSLoadBalancer implements LoadBalancer {
        private static final Log log = LogFactory.getLog(AWSLoadBalancer.class);
 
        // A map <clusterId, load balancer id>
-       private HashMap<String, String> clusterIdToLoadBalancerMap;
+       private HashMap<String, LoadBalancerInfo> clusterIdToLoadBalancerMap;
 
        private AWSHelper awsHelper;
 
        public AWSLoadBalancer() throws LoadBalancerExtensionException {
-               clusterIdToLoadBalancerMap = new HashMap<String, String>();
+               clusterIdToLoadBalancerMap = new HashMap<String, 
LoadBalancerInfo>();
                awsHelper = new AWSHelper();
        }
 
@@ -70,14 +70,17 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                // A load balancer is already 
present for this cluster
                                                // Get the load balancer and 
update it.
 
-                                               String loadBalancerName = 
clusterIdToLoadBalancerMap
+                                               LoadBalancerInfo 
loadBalancerInfo = clusterIdToLoadBalancerMap
                                                                
.get(cluster.getClusterId());
 
+                                               String loadBalancerName = 
loadBalancerInfo.getName();
+                                               String region = 
loadBalancerInfo.getRegion();
+
                                                // 1. Get all the instances 
attached
                                                // Add/remove instances as 
necessary
 
                                                List<Instance> 
attachedInstances = awsHelper
-                                                               
.getAttachedInstances(loadBalancerName);
+                                                               
.getAttachedInstances(loadBalancerName, region);
 
                                                Collection<Member> 
clusterInstances = cluster
                                                                .getMembers();
@@ -89,6 +92,7 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                }
 
                                                List<Instance> 
instancesToAddToLoadBalancer = new ArrayList<Instance>();
+                                               List<Instance> 
awsInstancesInCluster = new ArrayList<Instance>();
 
                                                for (Member member : 
clusterInstances) {
                                                        // if instance id of 
member is not in
@@ -105,6 +109,8 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                                        
awsHelper.getAWSInstanceName(member
                                                                                
        .getInstanceId()));
 
+                                                       
awsInstancesInCluster.add(instance);
+
                                                        if (attachedInstances 
== null
                                                                        || 
!attachedInstances.contains(instance)) {
                                                                
instancesToAddToLoadBalancer.add(instance);
@@ -115,8 +121,7 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                List<Instance> 
instancesToRemoveFromLoadBalancer = new ArrayList<Instance>();
 
                                                for (Instance instance : 
attachedInstances) {
-                                                       if 
(!clusterInstances.contains(instance
-                                                                       
.getInstanceId())) {
+                                                       if 
(!awsInstancesInCluster.contains(instance)) {
                                                                
instancesToRemoveFromLoadBalancer.add(instance);
                                                        }
                                                }
@@ -124,12 +129,12 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                if 
(instancesToRemoveFromLoadBalancer.size() > 0)
                                                        
awsHelper.deregisterInstancesFromLoadBalancer(
                                                                        
loadBalancerName,
-                                                                       
instancesToRemoveFromLoadBalancer);
+                                                                       
instancesToRemoveFromLoadBalancer, region);
 
                                                if 
(instancesToAddToLoadBalancer.size() > 0)
                                                        
awsHelper.registerInstancesToLoadBalancer(
                                                                        
loadBalancerName,
-                                                                       
instancesToAddToLoadBalancer);
+                                                                       
instancesToAddToLoadBalancer, region);
 
                                                // 2. Get all the listeners
                                                // Add/Remove listeners as 
necessary
@@ -145,7 +150,7 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                // Need to remove only if ... 
same for above reason
 
                                                List<Listener> 
attachedListeners = awsHelper
-                                                               
.getAttachedListeners(loadBalancerName);
+                                                               
.getAttachedListeners(loadBalancerName, region);
 
                                                List<Listener> 
listenersToAddToLoadBalancer = new ArrayList<Listener>();
 
@@ -167,12 +172,12 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                if 
(listenersToRemoveFromLoadBalancer.size() > 0)
                                                        
awsHelper.removeListenersFromLoadBalancer(
                                                                        
loadBalancerName,
-                                                                       
listenersToRemoveFromLoadBalancer);
+                                                                       
listenersToRemoveFromLoadBalancer, region);
 
                                                if 
(listenersToAddToLoadBalancer.size() > 0)
                                                        
awsHelper.addListenersToLoadBalancer(
                                                                        
loadBalancerName,
-                                                                       
listenersToAddToLoadBalancer);
+                                                                       
listenersToAddToLoadBalancer, region);
 
                                                // Update domain mappings
 
@@ -187,9 +192,12 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                String loadBalancerName = 
awsHelper
                                                                
.getLoadBalancerName(cluster.getClusterId());
 
+                                               String region = 
awsHelper.getAWSRegion(clusterInstances
+                                                               
.iterator().next().getInstanceId());
+
                                                String loadBalancerDNSName = 
awsHelper
                                                                
.createLoadBalancer(loadBalancerName,
-                                                                               
listenersForThisService);
+                                                                               
listenersForThisService, region);
 
                                                log.info("Load balancer '" + 
loadBalancerDNSName
                                                                + "' created 
for cluster '"
@@ -213,12 +221,15 @@ public class AWSLoadBalancer implements LoadBalancer {
                                                }
 
                                                
awsHelper.registerInstancesToLoadBalancer(
-                                                               
loadBalancerName, instances);
+                                                               
loadBalancerName, instances, region);
 
                                                // Create domain mappings
 
+                                               LoadBalancerInfo 
loadBalancerInfo = new LoadBalancerInfo(
+                                                               
loadBalancerName, region);
+
                                                
clusterIdToLoadBalancerMap.put(cluster.getClusterId(),
-                                                               
loadBalancerName);
+                                                               
loadBalancerInfo);
                                                
activeClusters.add(cluster.getClusterId());
                                        }
                                }
@@ -231,7 +242,9 @@ public class AWSLoadBalancer implements LoadBalancer {
                                if (!activeClusters.contains(clusterId)) {
                                        // Remove load balancer for that 
cluster.
                                        
awsHelper.deleteLoadBalancer(clusterIdToLoadBalancerMap
-                                                       .get(clusterId));
+                                                       
.get(clusterId).getName(),
+                                                       
clusterIdToLoadBalancerMap.get(clusterId)
+                                                                       
.getRegion());
                                        
clusterIdToLoadBalancerMap.remove(clusterId);
                                }
                        }
@@ -256,14 +269,32 @@ public class AWSLoadBalancer implements LoadBalancer {
 
        public void stop() throws LoadBalancerExtensionException {
                // Remove all load balancers
-
-               for (String loadBalancerName : 
clusterIdToLoadBalancerMap.values()) {
+               for (LoadBalancerInfo loadBalancerInfo : 
clusterIdToLoadBalancerMap
+                               .values()) {
                        // remove load balancer
-                       awsHelper.deleteLoadBalancer(loadBalancerName);
-
+                       awsHelper.deleteLoadBalancer(loadBalancerInfo.getName(),
+                                       loadBalancerInfo.getRegion());
                        // Check what all needs to be done
                }
 
                // Remove domain mappings
        }
 }
+
+class LoadBalancerInfo {
+       private String name;
+       private String region;
+
+       public LoadBalancerInfo(String name, String region) {
+               this.name = name;
+               this.region = region;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public String getRegion() {
+               return region;
+       }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/da1963a0/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
index d3c4d42..71c7ef7 100644
--- 
a/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
+++ 
b/extensions/load-balancer/aws-extension/src/main/java/org/apache/stratos/aws/extension/Constants.java
@@ -32,6 +32,4 @@ public class Constants {
     public static final String AWS_CREDENTIALS_FILE="aws.credentials.file";
     public static final String AWS_ACCESS_KEY = "access-key";
     public static final String AWS_SECRET_KEY = "secret-key";
-    public static final String AVAILABILITY_ZONE_KEY = "availability-zone";
-    public static final String REGION_KEY = "region";
 }

Reply via email to