You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/10/09 16:35:29 UTC

[16/32] stratos git commit: Finding the region and availability zone from member id.

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 <sw...@students.iiit.ac.in>
Authored: Fri Jul 24 09:36:22 2015 +0000
Committer: swapnilpatilRajaram <sw...@students.iiit.ac.in>
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";
 }