Repository: stratos
Updated Branches:
  refs/heads/lvs_extension 617397e12 -> 6f12fafec


LVS extension updates with the configuration generation and add the 
lvsvirtualip to the payload


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

Branch: refs/heads/lvs_extension
Commit: 6f12fafecec9f77304de94c5ed3a8635392af552
Parents: 617397e
Author: Gayan Gunarathne <[email protected]>
Authored: Tue May 19 13:36:00 2015 +0530
Committer: Gayan Gunarathne <[email protected]>
Committed: Tue May 19 13:36:00 2015 +0530

----------------------------------------------------------------------
 .../applications/ApplicationUtils.java          |  7 +-
 .../parser/DefaultApplicationParser.java        |  6 +-
 .../applications/payload/BasicPayloadData.java  | 13 +++
 .../pojo/SubscribableInfoContext.java           | 10 +++
 .../extension/api/LoadBalancerExtension.java    |  2 +-
 .../lvs-extension/src/main/assembly/bin.xml     |  2 +-
 .../lvs-extension/src/main/bin/lvs-extension.sh |  8 +-
 .../apache/stratos/lvs/extension/Constants.java |  3 +
 .../org/apache/stratos/lvs/extension/LVS.java   | 33 ++++---
 .../stratos/lvs/extension/LVSConfigWriter.java  | 90 +++++++++++++-------
 .../stratos/lvs/extension/LVSContext.java       | 31 +++++++
 .../src/main/templates/keepalived.conf.template | 29 +------
 .../src/main/templates/nginx.cfg.template       |  8 --
 extensions/load-balancer/pom.xml                |  1 +
 .../templates/bin/haproxy-extension.sh.erb      |  2 +-
 15 files changed, 154 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
index 85f5331..6e68aae 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
@@ -133,12 +133,12 @@ public class ApplicationUtils {
     public static PayloadData createPayload(String appId, String groupName, 
Cartridge cartridge, String subscriptionKey, int tenantId, String clusterId,
                                             String hostName, String repoUrl, 
String alias, Map<String, String> customPayloadEntries, String[] 
dependencyAliases,
                                             
org.apache.stratos.common.Properties properties, String oauthToken, String[] 
dependencyClusterIDs,
-                                            String[] exportMetadata, String[] 
importMetadata)
+                                            String[] exportMetadata, String[] 
importMetadata,String lvsVirtualIP)
             throws ApplicationDefinitionException {
 
         //Create the payload
         BasicPayloadData basicPayloadData = createBasicPayload(appId, 
groupName, cartridge, subscriptionKey,
-                clusterId, hostName, repoUrl, alias, tenantId, 
dependencyAliases, dependencyClusterIDs, exportMetadata, importMetadata);
+                clusterId, hostName, repoUrl, alias, tenantId, 
dependencyAliases, dependencyClusterIDs, exportMetadata, 
importMetadata,lvsVirtualIP);
         //Populate the basic payload details
         basicPayloadData.populatePayload();
 
@@ -206,7 +206,7 @@ public class ApplicationUtils {
                                                        String subscriptionKey, 
String clusterId,
                                                        String hostName, String 
repoUrl, String alias,
                                                        int tenantId, String[] 
dependencyAliases, String[] dependencyCLusterIDs,
-                                                       String[] 
exportMetadata, String[] importMetadata) {
+                                                       String[] 
exportMetadata, String[] importMetadata,String lvsVirtualIP) {
 
         BasicPayloadData basicPayloadData = new BasicPayloadData();
         basicPayloadData.setAppId(appId);
@@ -218,6 +218,7 @@ public class ApplicationUtils {
         
basicPayloadData.setPortMappings(createPortMappingPayloadString(cartridge));
         basicPayloadData.setServiceName(cartridge.getType());
         basicPayloadData.setProvider(cartridge.getProvider());
+           basicPayloadData.setLvsVirtualIP(lvsVirtualIP);
 
         if (repoUrl != null) {
             basicPayloadData.setGitRepositoryUrl(repoUrl);

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index fd88d06..ea3e7b7 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@ -448,7 +448,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
                     subscribableInfoContext.getDeploymentPolicy(), isLB,
                     tenantRange, 
subscribableInfoContext.getDependencyAliases(),
                     subscribableInfoContext.getProperties(), 
arrDependencyClusterIDs, arrExportMetadata,
-                    arrImportMetadata);
+                    
arrImportMetadata,subscribableInfoContext.getLvsVirtualIP());
 
             
appClusterCtxt.setAutoscalePolicyName(subscribableInfoContext.getAutoscalingPolicy());
             
appClusterCtxt.setProperties(subscribableInfoContext.getProperties());
@@ -928,12 +928,12 @@ public class DefaultApplicationParser implements 
ApplicationParser {
                                                                       String 
alias, String clusterId, String hostname,
                                                                       String 
deploymentPolicy, boolean isLB, String tenantRange,
                                                                       String[] 
dependencyAliases, Properties properties, String[] dependencyClustorIDs,
-                                                                      String[] 
exportMetadata, String[] importMetadata)
+                                                                      String[] 
exportMetadata, String[] importMetadata,String lvsVirtualIP)
             throws ApplicationDefinitionException {
 
         // Create text payload
         PayloadData payloadData = ApplicationUtils.createPayload(appId, 
groupName, cartridge, subscriptionKey, tenantId, clusterId,
-                hostname, repoUrl, alias, null, dependencyAliases, properties, 
oauthToken, dependencyClustorIDs, exportMetadata, importMetadata);
+                hostname, repoUrl, alias, null, dependencyAliases, properties, 
oauthToken, dependencyClustorIDs, exportMetadata, importMetadata,lvsVirtualIP);
 
         String textPayload = payloadData.toString();
         if (log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java
index 89eed10..ddf70ab 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/payload/BasicPayloadData.java
@@ -56,6 +56,7 @@ public class BasicPayloadData implements Serializable {
     private String[] dependencyClusterIDs;
     private String[] exportMetadataKeys;
     private String[] importMetadataKeys;
+       private String lvsVirtualIP;
 
     protected StringBuilder payloadBuilder;
 
@@ -128,6 +129,10 @@ public class BasicPayloadData implements Serializable {
         if (getExportMetadataKeys() != null) {
             payloadBuilder.append("IMPORT_METADATA_KEYS=" + 
getImportMetadataKeys());
         }
+           payloadBuilder.append(",");
+           if(!getLvsVirtualIP().equals("")){
+                   payloadBuilder.append("LVS_VIRTUAL_IP=" +getLvsVirtualIP());
+           }
     }
 
     public String getServiceName() {
@@ -388,4 +393,12 @@ public class BasicPayloadData implements Serializable {
     public void setImportMetadataKeys(String[] importMetadataKeys) {
         this.importMetadataKeys = importMetadataKeys;
     }
+
+       public String getLvsVirtualIP() {
+               return lvsVirtualIP;
+       }
+
+       public void setLvsVirtualIP(String lvsVirtualIP) {
+               this.lvsVirtualIP = lvsVirtualIP;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
index 50951ca..4ecb4fa 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
@@ -36,6 +36,8 @@ public class SubscribableInfoContext implements Serializable {
     private ArtifactRepositoryContext artifactRepositoryContext;
     private Properties properties;
     private PersistenceContext persistenceContext;
+       //This is the virtual IP that we need to pass for use LVS as Load 
Balancer
+       private String lvsVirtualIP;
 
     public String getAlias() {
         return alias;
@@ -108,4 +110,12 @@ public class SubscribableInfoContext implements 
Serializable {
     public void setPersistenceContext(PersistenceContext persistenceContext) {
         this.persistenceContext = persistenceContext;
     }
+
+       public String getLvsVirtualIP() {
+               return lvsVirtualIP;
+       }
+
+       public void setLvsVirtualIP(String lvsVirtualIP) {
+               this.lvsVirtualIP = lvsVirtualIP;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
 
b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
index 585aace..f3557bf 100644
--- 
a/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
+++ 
b/components/org.apache.stratos.load.balancer.extension.api/src/main/java/org/apache/stratos/load/balancer/extension/api/LoadBalancerExtension.java
@@ -176,7 +176,7 @@ public class LoadBalancerExtension {
             @Override
             protected void onEvent(Event event) {
                 try {
-                    if (!loadBalancerStarted) {
+                  if (!loadBalancerStarted) {
                         configureAndStart();
                     }
                 } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/lvs-extension/src/main/assembly/bin.xml 
b/extensions/load-balancer/lvs-extension/src/main/assembly/bin.xml
index 0beb98c..5569074 100644
--- a/extensions/load-balancer/lvs-extension/src/main/assembly/bin.xml
+++ b/extensions/load-balancer/lvs-extension/src/main/assembly/bin.xml
@@ -56,7 +56,7 @@
             <outputDirectory>/templates</outputDirectory>
             <fileMode>0600</fileMode>
             <includes>
-                <include>nginx.cfg.template</include>
+                <include>keepalived.conf.template</include>
             </includes>
         </fileSet>
         <fileSet>

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh 
b/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
index 67a9c09..659addd 100755
--- a/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
+++ b/extensions/load-balancer/lvs-extension/src/main/bin/lvs-extension.sh
@@ -28,9 +28,9 @@ properties="-Dlvs.private.ip=127.0.0.1
             -Dexecutable.file.path=lvs
             -Djndi.properties.dir=${script_path}/../conf
             -Dtemplates.path=${script_path}/../templates
-            -Dtemplates.name=nginx.cfg.template
+            -Dtemplates.name=keepalived.conf.template
             -Dscripts.path=${script_path}/../scripts
-            -Dconf.file.path=/tmp/nginx.cfg
+            -Dconf.file.path=/tmp/keepalived.conf
             -Dstats.socket.file.path=/tmp/nginx-stats.socket
             
-Dlog4j.properties.file.path=${script_path}/../conf/log4j.properties
             
-Djavax.net.ssl.trustStore=${script_path}/../security/client-truststore.jks
@@ -41,7 +41,9 @@ properties="-Dlvs.private.ip=127.0.0.1
             -Dthrift.receiver.port=7615
             -Dnetwork.partition.id=network-partition-1
             -Dcluster.id=cluster-1
-            -Dservice.name=service-1"
+            -Dservice.name=service-1
+            
-Dlvs.service.virtualip.set=tomcat2|192.168.56.40,tomcat1|192.168.56.41
+            -Dserver.state=MASTER"
 
 
 # Uncomment below line to enable remote debugging

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
index 9a9242c..715798f 100644
--- 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
+++ 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/Constants.java
@@ -36,4 +36,7 @@ public class Constants {
     public static final String NETWORK_PARTITION_ID = "network.partition.id";
     public static final String CLUSTER_ID = "cluster.id";
     public static final String SERVICE_NAME = "service.name";
+       public static final String VIRTUALIPS_FOR_SERVICES = 
"lvs.service.virtualip.set" ;
+       public static final String KEEPALIVED_START_COMMAND = "service 
keepalived restart";
+       public static final String SERVER_STATE ="server.state" ;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
index 74170f8..3dce7e7 100644
--- 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
+++ 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVS.java
@@ -41,6 +41,9 @@ public class LVS implements LoadBalancer {
     private String templateName;
     private String confFilePath;
     private String statsSocketFilePath;
+       private String virtualIPsForServices;
+       private String keepAlivedStartCommand;
+       private String serverState;
 
     public LVS() {
         this.executableFilePath = 
LVSContext.getInstance().getExecutableFilePath();
@@ -49,6 +52,9 @@ public class LVS implements LoadBalancer {
         this.confFilePath = LVSContext.getInstance().getConfFilePath();
         this.processIdFilePath = confFilePath.replace(".cfg", ".pid");
         this.statsSocketFilePath = 
LVSContext.getInstance().getStatsSocketFilePath();
+           this.virtualIPsForServices= 
LVSContext.getInstance().getVirtualIPsForServices();
+           
this.keepAlivedStartCommand=LVSContext.getInstance().getKeepAlivedStartCommand();
+           this.serverState=LVSContext.getInstance().getServerState();
     }
 
     /**
@@ -59,7 +65,8 @@ public class LVS implements LoadBalancer {
     public boolean configure(Topology topology) throws 
LoadBalancerExtensionException {
         try {
             log.info("Generating nginx configuration...");
-            LVSConfigWriter writer = new LVSConfigWriter(templatePath, 
templateName, confFilePath, statsSocketFilePath);
+            LVSConfigWriter writer = new LVSConfigWriter(templatePath, 
templateName, confFilePath, statsSocketFilePath,
+                                                         
virtualIPsForServices,serverState);
             if(writer.write(topology)) {
                 return true;
             }
@@ -75,26 +82,26 @@ public class LVS implements LoadBalancer {
      * @throws LoadBalancerExtensionException
      */
     public void start() throws LoadBalancerExtensionException {
-        log.info("Starting nginx instance...");
+        log.info("Starting lvs instance...");
         // Check for configuration file
         File conf = new File(confFilePath);
         if (!conf.exists()) {
-            throw new LoadBalancerExtensionException("Could not find nginx 
configuration file");
+            throw new LoadBalancerExtensionException("Could not find lvs 
configuration file");
         }
 
         // Start nginx and write pid to processIdFilePath
         try {
-           // String command = executableFilePath + " -c " + confFilePath;
-            //CommandUtils.executeCommand(command);
-            log.info("nginx instance started");
+            String command = keepAlivedStartCommand;
+            CommandUtils.executeCommand(command);
+            log.info("lvs instance started");
         } catch (Exception e) {
-            log.error("Could not start nginx instance");
+            log.error("Could not start lvs instance");
             throw new LoadBalancerExtensionException(e);
         }
     }
 
     /**
-     * Reload nginx instance according to the configuration written in 
configure() method.
+     * Reload lvs instance according to the configuration written in 
configure() method.
      * @throws LoadBalancerExtensionException
      */
     public void reload() throws LoadBalancerExtensionException {
@@ -102,7 +109,7 @@ public class LVS implements LoadBalancer {
             log.info("Reloading configuration...");
 
             // Execute hot configuration deployment
-            String command = executableFilePath + " -c " + confFilePath + " -s 
reload";
+            String command = "service keepalived restart";
             CommandUtils.executeCommand(command);
             if (log.isInfoEnabled()) {
                 log.info("Configuration done");
@@ -122,17 +129,17 @@ public class LVS implements LoadBalancer {
     public void stop() throws LoadBalancerExtensionException {
 
         try {
-            log.info("Stopping nginx...");
+            log.info("Stopping lvs...");
 
             // Execute hot configuration deployment
-            String command = executableFilePath + " -s stop";
-            CommandUtils.executeCommand(command);
+            String command = "service keepalived stop";
+               CommandUtils.executeCommand(command);
             if (log.isInfoEnabled()) {
                 log.info("LVS stopped");
             }
         } catch (Exception e) {
             if (log.isErrorEnabled()) {
-                log.error("Could not stop nginx");
+                log.error("Could not stop lvs");
             }
             throw new LoadBalancerExtensionException(e);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
index 6d8346c..4d6d3f3 100644
--- 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
+++ 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSConfigWriter.java
@@ -46,26 +46,31 @@ public class LVSConfigWriter {
     private String templateName;
     private String confFilePath;
     private String statsSocketFilePath;
+       private String virtualIPsForServices;
+       private String serverState;
 
     public LVSConfigWriter(String templatePath, String templateName, String 
confFilePath,
-                           String statsSocketFilePath) {
+                           String statsSocketFilePath,String 
virtualIPsForServices,String serverState) {
 
         this.templatePath = templatePath;
         this.templateName = templateName;
         this.confFilePath = confFilePath;
         this.statsSocketFilePath = statsSocketFilePath;
+           this.virtualIPsForServices=virtualIPsForServices;
+           this.serverState=serverState;
     }
 
     public boolean write(Topology topology) {
 
         StringBuilder configurationBuilder = new StringBuilder();
-
+           StringBuilder virtualIPBuilder=new StringBuilder();
+               String state;
         for (Service service : topology.getServices()) {
             for (Cluster cluster : service.getClusters()) {
                 if ((service.getPorts() == null) || (service.getPorts().size() 
== 0)) {
                     throw new RuntimeException(String.format("No ports found 
in service: %s", service.getServiceName()));
                 }
-                generateConfigurationForCluster(cluster, service.getPorts(), 
configurationBuilder);
+                generateConfigurationForCluster(cluster, service.getPorts(), 
configurationBuilder,virtualIPBuilder,virtualIPsForServices);
             }
         }
 
@@ -80,6 +85,8 @@ public class LVSConfigWriter {
         // Insert strings into the template
         VelocityContext context = new VelocityContext();
         context.put("configuration", configurationBuilder.toString());
+           context.put("virtualips", virtualIPBuilder.toString());
+           context.put("state", serverState);
 
         // Create a new string from the template
         StringWriter stringWriter = new StringWriter();
@@ -134,34 +141,55 @@ public class LVSConfigWriter {
      * @param ports
      * @param text
      */
-    private void generateConfigurationForCluster(Cluster cluster, 
Collection<Port> ports, StringBuilder text) {
-
-        for (Port port : ports) {
-            for (String hostname : cluster.getHostNames()) {
-
-                   text.append("virtual_server 
").append("dummyvirtualip").append(" ").append(port).append(" {").append(
-                                   NEW_LINE);
-                   text.append(TAB).append("delay_loop 10").append(NEW_LINE);
-                   text.append(TAB).append("lvs_sched wlc").append(NEW_LINE);
-                               text.append(TAB).append("lvs_method 
DR").append(NEW_LINE);
-                               text.append(TAB).append("persistence_timeout 
5").append(NEW_LINE);
-                               text.append(TAB).append("protocol 
TCP").append(NEW_LINE).append(NEW_LINE);
-
-                   //Start real servers block
-
-                   for (Member member : cluster.getMembers()) {
-                           // Start upstream server block
-                           text.append(TAB).append("real_server 
").append(member.getMemberId()).append(" ").append(port.getValue()).append(" {")
-                               .append(NEW_LINE);
-                           text.append(TAB).append(TAB).append("weight 
50").append(NEW_LINE);
-                           text.append(TAB).append(TAB).append("TCP_CHECK 
{").append(NEW_LINE);
-                           
text.append(TAB).append(TAB).append(TAB).append("connect_timeout 
3").append(NEW_LINE);
-                           
text.append(TAB).append(TAB).append("}").append(NEW_LINE);
-                           text.append(TAB).append("}").append(NEW_LINE);
-                   }
-                   text.append("}");
+    private void generateConfigurationForCluster(Cluster cluster, 
Collection<Port> ports, StringBuilder text,StringBuilder virtualIPs,String 
virtualIPsForServices) {
+
+           String[] virtualIPForServiceArray;
+           if (virtualIPsForServices.contains(",")) {
+                   virtualIPForServiceArray = virtualIPsForServices.split(",");
+           } else {
+                   virtualIPForServiceArray = new String[1];
+                   virtualIPForServiceArray[0] = virtualIPsForServices;
+           }
+           boolean isServiceAvailable = false;
+           for (int i = 0; i < virtualIPForServiceArray.length; i++) {
+                   String[] virtualIpForService = 
virtualIPForServiceArray[i].split("\\|");
+                   for (Port port : ports) {
+                           for (String hostname : cluster.getHostNames()) {
+                                   if 
(virtualIpForService[0].equals(cluster.getServiceName())) {
+
+                                           text.append("virtual_server 
").append(virtualIpForService[1]).append(" ").append(port.getValue()).append(
+                                                           " {").append(
+                                                           NEW_LINE);
+                                           text.append(TAB).append("delay_loop 
10").append(NEW_LINE);
+                                           text.append(TAB).append("lvs_sched 
wlc").append(NEW_LINE);
+                                           text.append(TAB).append("lvs_method 
DR").append(NEW_LINE);
+                                           
text.append(TAB).append("persistence_timeout 5").append(NEW_LINE);
+                                           text.append(TAB).append("protocol 
TCP").append(NEW_LINE).append(NEW_LINE);
+
+                                           //Start real servers block
+
+                                           for (Member member : 
cluster.getMembers()) {
+                                                   // Start upstream server 
block
+                                                   
text.append(TAB).append("real_server ").append(member.getHostName()).append(" ")
+                                                       
.append(port.getValue()).append(" {")
+                                                       .append(NEW_LINE);
+                                                   
text.append(TAB).append(TAB).append("weight 50").append(NEW_LINE);
+                                                   
text.append(TAB).append(TAB).append("TCP_CHECK {").append(NEW_LINE);
+                                                   
text.append(TAB).append(TAB).append(TAB).append("connect_timeout 
3").append(NEW_LINE);
+                                                   
text.append(TAB).append(TAB).append("}").append(NEW_LINE);
+                                                   
text.append(TAB).append("}").append(NEW_LINE);
+                                           }
+                                           text.append("}").append(NEW_LINE);
+                                           isServiceAvailable = true;
+                                           
virtualIPs.append(TAB).append(TAB).append(virtualIpForService[1]).append(NEW_LINE);
+                                   }
+                           }
+                   }
+                   if (!isServiceAvailable) {
+                           log.warn(String.format("Given service is not 
available in the topology %s", virtualIpForService[0]));
+                   }
+           }
+
 
-            }
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
index ea19213..228c455 100644
--- 
a/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
+++ 
b/extensions/load-balancer/lvs-extension/src/main/java/org/apache/stratos/lvs/extension/LVSContext.java
@@ -43,6 +43,9 @@ public class LVSContext {
     private String networkPartitionId;
     private String clusterId;
     private String serviceName;
+       private String virtualIPsForServices;
+       private String keepAlivedStartCommand;
+       private String serverState;
 
     private LVSContext() {
         this.lvsPrivateIp = System.getProperty(Constants.LVS_PRIVATE_IP);
@@ -58,6 +61,9 @@ public class LVSContext {
         this.networkPartitionId = 
System.getProperty(Constants.NETWORK_PARTITION_ID);
         this.clusterId = System.getProperty(Constants.CLUSTER_ID);
         this.serviceName = System.getProperty(Constants.SERVICE_NAME);
+           
this.virtualIPsForServices=System.getProperty(Constants.VIRTUALIPS_FOR_SERVICES);
+           this.keepAlivedStartCommand=Constants.KEEPALIVED_START_COMMAND;
+           this.setServerState(System.getProperty(Constants.SERVER_STATE));
 
         if (log.isDebugEnabled()) {
             log.debug(Constants.LVS_PRIVATE_IP + " = " + lvsPrivateIp);
@@ -72,6 +78,7 @@ public class LVSContext {
             log.debug(Constants.THRIFT_RECEIVER_PORT + " = " + 
thriftReceiverPort);
             log.debug(Constants.NETWORK_PARTITION_ID + " = " + 
networkPartitionId);
             log.debug(Constants.CLUSTER_ID + " = " + clusterId);
+               log.debug(Constants.VIRTUALIPS_FOR_SERVICES + " = " + 
getVirtualIPsForServices());
         }
     }
 
@@ -154,4 +161,28 @@ public class LVSContext {
     public String getServiceName() {
         return serviceName;
     }
+
+       public String getVirtualIPsForServices() {
+               return virtualIPsForServices;
+       }
+
+       public void setVirtualIPsForServices(String virtualIPsForServices) {
+               this.virtualIPsForServices = virtualIPsForServices;
+       }
+
+       public String getKeepAlivedStartCommand() {
+               return keepAlivedStartCommand;
+       }
+
+       public void setKeepAlivedStartCommand(String keepAlivedStartCommand) {
+               this.keepAlivedStartCommand = keepAlivedStartCommand;
+       }
+
+       public String getServerState() {
+               return serverState;
+       }
+
+       public void setServerState(String serverState) {
+               this.serverState = serverState;
+       }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/templates/keepalived.conf.template
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/templates/keepalived.conf.template
 
b/extensions/load-balancer/lvs-extension/src/main/templates/keepalived.conf.template
index ecd58ee..9cba1fb 100644
--- 
a/extensions/load-balancer/lvs-extension/src/main/templates/keepalived.conf.template
+++ 
b/extensions/load-balancer/lvs-extension/src/main/templates/keepalived.conf.template
@@ -27,36 +27,11 @@ vrrp_instance VirtIP_10 {
         auth_pass MY_PASS
     }
     virtual_ipaddress {
-        10.10.10.10
+$virtualips
     }
 
     lvs_sync_daemon_interface eth0
 }
 
-! ************************   WEB SERVERS  **************************
-
-virtual_server 10.10.10.10 80 {
-    delay_loop 10
-    lvs_sched wlc
-    lvs_method DR
-    persistence_timeout 5
-    protocol TCP
-
-    real_server 10.10.10.41 80 {
-        weight 50
-        TCP_CHECK {
-            connect_timeout 3
-        }
-    }
-
-    real_server 10.10.10.42 80 {
-        weight 50
-        TCP_CHECK {
-            connect_timeout 3
-        }
-    }
-
-}
-
-
 
+$configuration
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/lvs-extension/src/main/templates/nginx.cfg.template
----------------------------------------------------------------------
diff --git 
a/extensions/load-balancer/lvs-extension/src/main/templates/nginx.cfg.template 
b/extensions/load-balancer/lvs-extension/src/main/templates/nginx.cfg.template
deleted file mode 100644
index 54f9648..0000000
--- 
a/extensions/load-balancer/lvs-extension/src/main/templates/nginx.cfg.template
+++ /dev/null
@@ -1,8 +0,0 @@
-events {
-    worker_connections  1024;
-}
-
-$configuration
-
-
-

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/extensions/load-balancer/pom.xml
----------------------------------------------------------------------
diff --git a/extensions/load-balancer/pom.xml b/extensions/load-balancer/pom.xml
index ff89360..d854321 100644
--- a/extensions/load-balancer/pom.xml
+++ b/extensions/load-balancer/pom.xml
@@ -36,6 +36,7 @@
     <modules>
         <module>haproxy-extension</module>
         <module>nginx-extension</module>
+        <module>lvs-extension</module>
     </modules>
 </project>
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/6f12fafe/tools/puppet3/modules/haproxy/templates/bin/haproxy-extension.sh.erb
----------------------------------------------------------------------
diff --git 
a/tools/puppet3/modules/haproxy/templates/bin/haproxy-extension.sh.erb 
b/tools/puppet3/modules/haproxy/templates/bin/haproxy-extension.sh.erb
index 47ea03a..db2db78 100755
--- a/tools/puppet3/modules/haproxy/templates/bin/haproxy-extension.sh.erb
+++ b/tools/puppet3/modules/haproxy/templates/bin/haproxy-extension.sh.erb
@@ -31,7 +31,7 @@ properties="-Dhaproxy.private.ip=0.0.0.0
             -Dtemplates.path=${script_path}/../templates
             -Dtemplates.name=haproxy.cfg.template
             -Dscripts.path=${script_path}/../scripts
-            -Dconf.file.path=/tmp/haproxy.cfg
+            -Dconf.file.path=/etc/keepalived/keepalived.conf
             -Dstats.socket.file.path=/tmp/haproxy-stats.socket
             
-Dlog4j.properties.file.path=${script_path}/../conf/log4j.properties
             
-Djavax.net.ssl.trustStore=${script_path}/../security/client-truststore.jks

Reply via email to