Added implementation for methods in AWSHelper.

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

Branch: refs/heads/gsoc-projects-2015
Commit: 5dba1b48c25042f7cb6aa1e8aece4a5449f950b8
Parents: 617e04d
Author: swapnilpatilRajaram <[email protected]>
Authored: Fri Jun 5 16:11:40 2015 +0000
Committer: swapnilpatilRajaram <[email protected]>
Committed: Fri Jun 5 16:11:40 2015 +0000

----------------------------------------------------------------------
 .../apache/stratos/aws/extension/AWSHelper.java | 163 +++++++++++++++++--
 .../stratos/aws/extension/AWSLoadBalancer.java  |  17 +-
 2 files changed, 164 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/5dba1b48/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 7a0d4db..15467f2 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
@@ -31,14 +31,7 @@ import org.apache.stratos.load.balancer.common.domain.*;
 import com.amazonaws.ClientConfiguration;
 import com.amazonaws.auth.BasicAWSCredentials;
 import 
com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient;
-import 
com.amazonaws.services.elasticloadbalancing.model.CreateLoadBalancerRequest;
-import 
com.amazonaws.services.elasticloadbalancing.model.CreateLoadBalancerResult;
-import 
com.amazonaws.services.elasticloadbalancing.model.DeregisterInstancesFromLoadBalancerRequest;
-import 
com.amazonaws.services.elasticloadbalancing.model.DeregisterInstancesFromLoadBalancerResult;
-import com.amazonaws.services.elasticloadbalancing.model.Instance;
-import com.amazonaws.services.elasticloadbalancing.model.Listener;
-import 
com.amazonaws.services.elasticloadbalancing.model.RegisterInstancesWithLoadBalancerRequest;
-import 
com.amazonaws.services.elasticloadbalancing.model.RegisterInstancesWithLoadBalancerResult;
+import com.amazonaws.services.elasticloadbalancing.model.*;
 import com.amazonaws.services.opsworks.model.AttachElasticLoadBalancerRequest;
 
 
@@ -65,6 +58,7 @@ public class AWSHelper
        
        /*
         * Creates a load balancer and returns its DNS name.
+        * Useful when a new cluster is added.
         */
        public String createLoadBalancer(String name, List<Listener> listeners)
        {
@@ -87,11 +81,36 @@ public class AWSHelper
                }
                catch(Exception e)
                {
-                       log.error("Could not create load balancer " + name + 
".");
+                       log.error("Could not create load balancer : " + name + 
".");
                        return null;
                }
        }
        
+       /*
+        * Deletes a load balancer with the name provided.
+        * Useful when a cluster, with which this load balancer was associated, 
is removed.
+        */
+       public void deleteLoadBalancer(String loadBalancerName)
+       {
+               try
+               {
+                       DeleteLoadBalancerRequest deleteLoadBalancerRequest = 
new DeleteLoadBalancerRequest();
+                       
deleteLoadBalancerRequest.setLoadBalancerName(loadBalancerName);
+                       
+                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
+                       
+                       lbClient.deleteLoadBalancer(deleteLoadBalancerRequest);
+               }
+               catch(Exception e)
+               {
+                       log.error("Could not delete load balancer : " + 
loadBalancerName);
+               }
+       }
+       
+       /*
+        * Attaches provided instances to the load balancer.
+        * Useful when new instances get added to the cluster with which this 
load balancer is associated.
+        */
        public void registerInstancesToLoadBalancer(String loadBalancerName, 
List<Instance> instances)
        {
                try
@@ -108,6 +127,10 @@ public class AWSHelper
                }
        }
        
+       /*
+        * 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.
+        */
        public void deregisterInstancesFromLoadBalancer(String 
loadBalancerName, List<Instance> instances)
        {
                try
@@ -124,16 +147,71 @@ public class AWSHelper
                }
        }
        
+       /*
+        * Returns description of the Load Balancer which is helpful in 
determining instances, listeners associated with load balancer 
+        */
+       private LoadBalancerDescription getLoadBalancerDescription(String 
loadBalancerName)
+       {
+               List<String> loadBalancers = new ArrayList<String>();
+               
+               loadBalancers.add(loadBalancerName);
+               
+               DescribeLoadBalancersRequest describeLoadBalancersRequest = new 
DescribeLoadBalancersRequest(loadBalancers);
+
+               AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
+               
+               DescribeLoadBalancersResult result = 
lbClient.describeLoadBalancers(describeLoadBalancersRequest);
+               
+               if(result.getLoadBalancerDescriptions() == null || 
result.getLoadBalancerDescriptions().size() == 0)
+                       return null;
+               else
+                       return result.getLoadBalancerDescriptions().get(0);
+       }
+       
+       /*
+        * Returns instances attached to the load balancer.
+        * Useful when deciding if all attached instances are required or some 
should be detached.
+        */
        public List<Instance> getAttachedInstances(String loadBalancerName)
        {
-               return new ArrayList<Instance>();
+               try
+               {
+                       LoadBalancerDescription lbDescription = 
getLoadBalancerDescription(loadBalancerName);
+                       
+                       if(lbDescription == null)
+                       {
+                               log.warn("Could not find description of load 
balancer " + loadBalancerName);    
+                               return null;
+                       }
+                       
+                       return lbDescription.getInstances();
+                       
+               }
+               catch(Exception e)
+               {
+                       log.error("Could not find description of load balancer 
" + loadBalancerName);
+                       return null;
+               }
        }
        
+       /*
+        * Adds listeners provided to the load balancer.
+        * Useful when service definition is changed, in particular port 
mappings. So new listeners need to be added.
+        */
        public void addListenersToLoadBalancer(String loadBalancerName, 
List<Listener> listeners)
        {
+               if(listeners.size() == 0)
+                       return;
+               
                try
                {
+                       CreateLoadBalancerListenersRequest 
createLoadBalancerListenersRequest = new CreateLoadBalancerListenersRequest();
+                       
createLoadBalancerListenersRequest.setListeners(listeners);
+                       
createLoadBalancerListenersRequest.setLoadBalancerName(loadBalancerName);
                        
+                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
+                       
+                       
lbClient.createLoadBalancerListeners(createLoadBalancerListenersRequest);
                }
                catch(Exception e)
                {
@@ -141,10 +219,32 @@ public class AWSHelper
                }
        }
        
+       /*
+        * Remove listeners provided from the load balancer.
+        * Useful when attached listeners are no longer required.
+        */
        public void removeListenersFromLoadBalancer(String loadBalancerName, 
List<Listener> listeners)
        {
+               if(listeners.size() == 0)
+                       return;
+               
                try
                {
+                       DeleteLoadBalancerListenersRequest 
deleteLoadBalancerListenersRequest = new DeleteLoadBalancerListenersRequest();
+                       
deleteLoadBalancerListenersRequest.setLoadBalancerName(loadBalancerName);
+                       
+                       List<Integer> loadBalancerPorts = new 
ArrayList<Integer>();
+                       
+                       for(Listener listener : listeners)
+                       {
+                               
loadBalancerPorts.add(listener.getLoadBalancerPort());
+                       }
+                       
+                       
deleteLoadBalancerListenersRequest.setLoadBalancerPorts(loadBalancerPorts);
+
+                       AmazonElasticLoadBalancingClient lbClient = new 
AmazonElasticLoadBalancingClient(awsCredentials, clientConfiguration);
+                       
+                       
lbClient.deleteLoadBalancerListeners(deleteLoadBalancerListenersRequest);
                        
                }
                catch(Exception e)
@@ -153,11 +253,47 @@ public class AWSHelper
                }
        }
        
+       /*
+        * Returns all the listeners attached to the load balancer.
+        * Useful while deciding if all the listeners are necessary or some 
should be removed.
+        */
        public List<Listener> getAttachedListeners(String loadBalancerName)
        {
-               return new ArrayList<Listener>();
+               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;
+               }
+
+               
        }
        
+       /*
+        * Returns the Listeners required for the service.
+        * Listeners are derived from the proxy port, port and protocol values 
of the service.
+        */
        public List<Listener> getRequiredListeners(Service service)
        {
                List<Listener> listeners = new ArrayList<Listener>();
@@ -165,9 +301,12 @@ public class AWSHelper
                for(Port port : service.getPorts())
                {
                        int instancePort = port.getValue();
-                       // Read other values as well and create a listener 
object
+                       int proxyPort = port.getProxy();
+                       String protocol = port.getProtocol();
                        
+                       Listener listener = new Listener(protocol, proxyPort, 
instancePort);
                        
+                       listeners.add(listener);
                }
                
                return listeners;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5dba1b48/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 2e45a09..172c8fc 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
@@ -27,6 +27,8 @@ import java.util.Set;
 
 import javax.management.InstanceAlreadyExistsException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.load.balancer.common.domain.*;
 import 
org.apache.stratos.load.balancer.extension.api.exception.LoadBalancerExtensionException;
 import org.apache.stratos.load.balancer.extension.api.LoadBalancer;
@@ -37,10 +39,10 @@ import com.amazonaws.ClientConfiguration;
 import com.amazonaws.services.elasticloadbalancing.model.Instance;
 import com.amazonaws.services.elasticloadbalancing.model.Listener;
 
-
-
 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;
 
@@ -65,7 +67,6 @@ public class AWSLoadBalancer implements LoadBalancer {
                
if(clusterIdToLoadBalancerMap.containsKey(cluster.getClusterId()))
                        {
                        // A load balancer is already present for this cluster
-                       
                        // Get the load balancer and update it.
                        
                        String loadBalancerName = 
clusterIdToLoadBalancerMap.get(cluster.getClusterId());
@@ -83,6 +84,8 @@ public class AWSLoadBalancer implements LoadBalancer {
                        {
                                // if instance id of member is not in 
attachedInstances
                                //              add this to 
instancesToAddToLoadBalancer
+                               
+                               
                        }
                        
                        List<Instance> instancesToRemoveFromLoadBalancer = new 
ArrayList<Instance>();
@@ -172,15 +175,19 @@ public class AWSLoadBalancer implements LoadBalancer {
             }
         }
                
+               // Find out clusters which were present earlier but are not now.
+               // Delete load balancers associated with those clusters.
+               
                return true;
        }
        
        public void start() throws LoadBalancerExtensionException {
                
+               log.info("Started AWS load balancer extension.");
        }
        
        public void reload() throws LoadBalancerExtensionException {
-               
+               // Check what is appropriate to do here.
        }
             
        public void stop() throws LoadBalancerExtensionException 
@@ -190,6 +197,8 @@ public class AWSLoadBalancer implements LoadBalancer {
                for(String loadBalancerName : 
clusterIdToLoadBalancerMap.values())
                {
                        // remove load balancer
+                       awsHelper.deleteLoadBalancer(loadBalancerName);
+                       
                        // Check what all needs to be done
                }
                

Reply via email to