Repository: stratos Updated Branches: refs/heads/stratos-4.1.x ce2a71b15 -> 55abb9593
fixing port mapping for kubernetes Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/55abb959 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/55abb959 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/55abb959 Branch: refs/heads/stratos-4.1.x Commit: 55abb959385e38d160c3d1e8b7031a8c547c184a Parents: ce2a71b Author: reka <[email protected]> Authored: Fri Sep 4 13:56:05 2015 +0530 Committer: reka <[email protected]> Committed: Fri Sep 4 13:56:05 2015 +0530 ---------------------------------------------------------------------- .../nginx/extension/NginxConfigWriter.java | 186 ++++++++++++------- 1 file changed, 115 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/55abb959/extensions/load-balancer/modules/nginx-extension/src/main/java/org/apache/stratos/nginx/extension/NginxConfigWriter.java ---------------------------------------------------------------------- diff --git a/extensions/load-balancer/modules/nginx-extension/src/main/java/org/apache/stratos/nginx/extension/NginxConfigWriter.java b/extensions/load-balancer/modules/nginx-extension/src/main/java/org/apache/stratos/nginx/extension/NginxConfigWriter.java index d1c5cf1..11521bd 100644 --- a/extensions/load-balancer/modules/nginx-extension/src/main/java/org/apache/stratos/nginx/extension/NginxConfigWriter.java +++ b/extensions/load-balancer/modules/nginx-extension/src/main/java/org/apache/stratos/nginx/extension/NginxConfigWriter.java @@ -32,6 +32,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -68,23 +69,46 @@ public class NginxConfigWriter { if ((service.getPorts() == null) || (service.getPorts().size() == 0)) { throw new RuntimeException(String.format("No ports found in service: %s", service.getServiceName())); } - for (Port port : service.getPorts()) { - for(Port availablePort : availablePorts) { - if ((!availablePort.getProtocol().equals(port.getProtocol())) || - (availablePort.getProtocol().equals(port.getProtocol()) && - availablePort.getProxy() != port.getProxy())) { + for (Member member : cluster.getMembers()) { + Collection<Port> ports = member.getPorts(); + for(Port port : ports) { + boolean protocolFound = false; + for(Port availablePort : availablePorts) { + if ((availablePort.getProtocol().equals(port.getProtocol()))) { + protocolFound = true; + break; + } + } + if(!protocolFound) { + if (log.isDebugEnabled()) { + log.debug("Available protocols : " + port.getProtocol() + " proxy val: " + + port.getProxy() + "\n"); + } availablePorts.add(port); + } else { + boolean proxyFound = false; + for(Port availablePort : availablePorts) { + if (availablePort.getProtocol().equals(port.getProtocol()) && + availablePort.getProxy() == port.getProxy()) { + proxyFound = true; + break; + } + } + + if(!proxyFound) { + if (log.isDebugEnabled()) { + log.debug("Available protocols : " + port.getProtocol() + " proxy val: " + + port.getProxy() + "\n"); + } + availablePorts.add(port); + } } } } + } } - for (Port port1 : availablePorts) { - if (log.isDebugEnabled()) { - log.debug("Available protocols : " + port1.getProtocol() + " proxy val: " + - port1.getProxy() + "\n"); - } - } + for (Port availPort : availablePorts) { // Start transport block configurationBuilder.append("http").append(" {").append(NEW_LINE); @@ -97,22 +121,8 @@ public class NginxConfigWriter { throw new RuntimeException(String.format("No ports found in service: %s", service.getServiceName())); } - Port selectedPort = null; - for (Port port : service.getPorts()) { - if ((port.getProtocol().equals(availPort.getProtocol())) && - (port.getProxy() == availPort.getProxy())) { - selectedPort = port; - } - } + generateConfigurationForCluster(cluster, availPort, configurationBuilder); - if (selectedPort != null) { - if (log.isDebugEnabled()) { - log.debug("The selected Port for cluster: " + cluster.getClusterId() - + " is " + selectedPort.getValue() + " " + - selectedPort.getProtocol() + " " + selectedPort.getProxy()); - } - generateConfigurationForCluster(cluster, selectedPort, configurationBuilder); - } } } configurationBuilder.append("}").append(NEW_LINE); @@ -182,59 +192,93 @@ public class NginxConfigWriter { * } * * @param cluster - * @param port + * @param availPort * @param text */ - private void generateConfigurationForCluster(Cluster cluster, Port port, StringBuilder text) { + private void generateConfigurationForCluster(Cluster cluster, Port availPort, StringBuilder text) { for (String hostname : cluster.getHostNames()) { - // Start upstream block - text.append(TAB).append("upstream ").append(hostname).append(" {").append(NEW_LINE); + boolean memberFound = false; + //Checking whether at-least one member is available to create + // the upstream and server blocks for (Member member : cluster.getMembers()) { - // Start upstream server block - text.append(TAB).append(TAB).append("server ").append(member.getHostName()).append(":") - .append(port.getValue()).append(";").append(NEW_LINE); - // End upstream server block - } - text.append(TAB).append("}").append(NEW_LINE); - // End upstream block - - // Start server block - text.append(NEW_LINE); - text.append(TAB).append("server {").append(NEW_LINE); - if (port.getProtocol().equals("https")) { - text.append(TAB).append(TAB).append("listen ").append(port.getProxy()).append(" ssl;").append(NEW_LINE); - } else { - text.append(TAB).append(TAB).append("listen ").append(port.getProxy()).append(";").append(NEW_LINE); - } - text.append(TAB).append(TAB).append("server_name ").append(hostname).append(";").append(NEW_LINE); - - text.append(TAB).append(TAB).append("location / {").append(NEW_LINE); - if (port.getProtocol().equals("https")) { - text.append(TAB).append(TAB).append(TAB).append("proxy_pass").append(TAB) - .append("https://").append(hostname).append(";").append(NEW_LINE); - } else { - text.append(TAB).append(TAB).append(TAB).append("proxy_pass").append(TAB) - .append("http://").append(hostname).append(";").append(NEW_LINE); - } - text.append(TAB).append(TAB).append("}").append(NEW_LINE); - - text.append(TAB).append(TAB).append("location /nginx_status {").append(NEW_LINE); - text.append(TAB).append(TAB).append(TAB).append("stub_status on;").append(NEW_LINE); - text.append(TAB).append(TAB).append(TAB).append("access_log off;").append(NEW_LINE); - text.append(TAB).append(TAB).append(TAB).append("allow 127.0.0.1;").append(NEW_LINE); - text.append(TAB).append(TAB).append(TAB).append("deny all;").append(NEW_LINE); - text.append(TAB).append(TAB).append("}").append(NEW_LINE); - - if (port.getProtocol().equals("https")) { - text.append(TAB).append(TAB).append("ssl on;").append(NEW_LINE); - text.append(TAB).append(TAB).append("ssl_certificate ").append(System.getProperty("nginx.cert.path")).append(";").append(NEW_LINE); - text.append(TAB).append(TAB).append("ssl_certificate_key ").append(System.getProperty("nginx.key.path")).append(";").append(NEW_LINE); + Collection<Port> ports = member.getPorts(); + for (Port port : ports) { + if ((port.getProtocol().equals(availPort.getProtocol())) && + (port.getProxy() == availPort.getProxy())) { + memberFound = true; + break; + } + } + if(memberFound) { + break; + } } + if(memberFound) { + // Start upstream block + text.append(TAB).append("upstream ").append(hostname).append(" {").append(NEW_LINE); + for (Member member : cluster.getMembers()) { + Port selectedPort = null; + Collection<Port> ports = member.getPorts(); + for (Port port : ports) { + if ((port.getProtocol().equals(availPort.getProtocol())) && + (port.getProxy() == availPort.getProxy())) { + selectedPort = port; + break; + } + } + + if (selectedPort != null) { + if (log.isDebugEnabled()) { + log.debug("The selected Port for cluster: " + cluster.getClusterId() + + " is " + selectedPort.getValue() + " " + + selectedPort.getProtocol() + " " + selectedPort.getProxy()); + } + // Start upstream server block + text.append(TAB).append(TAB).append("server ").append(member.getHostName()).append(":") + .append(selectedPort.getValue()).append(";").append(NEW_LINE); + // End upstream server block + } + } + text.append(TAB).append("}").append(NEW_LINE); + // End upstream block + + // Start server block + text.append(NEW_LINE); + text.append(TAB).append("server {").append(NEW_LINE); + if (availPort.getProtocol().equals("https")) { + text.append(TAB).append(TAB).append("listen ").append(availPort.getProxy()).append(" ssl;").append(NEW_LINE); + } else { + text.append(TAB).append(TAB).append("listen ").append(availPort.getProxy()).append(";").append(NEW_LINE); + } + text.append(TAB).append(TAB).append("server_name ").append(hostname).append(";").append(NEW_LINE); + + text.append(TAB).append(TAB).append("location / {").append(NEW_LINE); + if (availPort.getProtocol().equals("https")) { + text.append(TAB).append(TAB).append(TAB).append("proxy_pass").append(TAB) + .append("https://").append(hostname).append(";").append(NEW_LINE); + } else { + text.append(TAB).append(TAB).append(TAB).append("proxy_pass").append(TAB) + .append("http://").append(hostname).append(";").append(NEW_LINE); + } + text.append(TAB).append(TAB).append("}").append(NEW_LINE); - text.append(TAB).append("}").append(NEW_LINE); - // End server block + text.append(TAB).append(TAB).append("location /nginx_status {").append(NEW_LINE); + text.append(TAB).append(TAB).append(TAB).append("stub_status on;").append(NEW_LINE); + text.append(TAB).append(TAB).append(TAB).append("access_log off;").append(NEW_LINE); + text.append(TAB).append(TAB).append(TAB).append("allow 127.0.0.1;").append(NEW_LINE); + text.append(TAB).append(TAB).append(TAB).append("deny all;").append(NEW_LINE); + text.append(TAB).append(TAB).append("}").append(NEW_LINE); + if (availPort.getProtocol().equals("https")) { + text.append(TAB).append(TAB).append("ssl on;").append(NEW_LINE); + text.append(TAB).append(TAB).append("ssl_certificate ").append(System.getProperty("nginx.cert.path")).append(";").append(NEW_LINE); + text.append(TAB).append(TAB).append("ssl_certificate_key ").append(System.getProperty("nginx.key.path")).append(";").append(NEW_LINE); + } + + text.append(TAB).append("}").append(NEW_LINE); + // End server block + } } } }
