diff --git a/pom.xml b/pom.xml index 2a7caddf..1fae944b 100644 --- a/pom.xml +++ b/pom.xml @@ -259,10 +259,13 @@ - true + false true src/main/resources/git.properties true + + ^git.commit.id$ + diff --git a/src/main/java/com/ctrip/zeus/auth/impl/IPAuthenticationFilter.java b/src/main/java/com/ctrip/zeus/auth/impl/IPAuthenticationFilter.java index 50466d84..f8567e73 100644 --- a/src/main/java/com/ctrip/zeus/auth/impl/IPAuthenticationFilter.java +++ b/src/main/java/com/ctrip/zeus/auth/impl/IPAuthenticationFilter.java @@ -1,5 +1,7 @@ package com.ctrip.zeus.auth.impl; +import com.ctrip.zeus.auth.util.AuthUserConstants; +import com.ctrip.zeus.service.build.ConfigService; import com.netflix.config.DynamicBooleanProperty; import com.netflix.config.DynamicPropertyFactory; import com.netflix.config.DynamicStringProperty; @@ -9,6 +11,7 @@ import org.jasig.cas.client.validation.AssertionImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -25,35 +28,24 @@ import java.util.Map; * Time: 3:00 PM */ public class IPAuthenticationFilter implements Filter{ - private static final Logger logger = LoggerFactory.getLogger(IPAuthenticationFilter.class); - DynamicStringProperty ipUserStr = DynamicPropertyFactory.getInstance().getStringProperty("ip.authentication", "127.0.0.1,172.16.144.61=releaseSys"); - private static final String SLB_SERVER_USER = "slbServer"; - public static final String SERVER_TOKEN_HEADER = "SlbServerToken"; - private DynamicBooleanProperty enableAuthorize = DynamicPropertyFactory.getInstance().getBooleanProperty("server.authorization.enable", false); - private volatile Map ipUserMap = new HashMap<>(); + @Resource + ConfigService configService; + + private static final Logger logger = LoggerFactory.getLogger(IPAuthenticationFilter.class); + public static final String SERVER_TOKEN_HEADER = "SlbServerToken"; + private static final String IP_AUTHENTICATION_PREFIX = "ip.authentication"; @Override - public void init(FilterConfig filterConfig) { - ipUserMap = parseIpUserStr(ipUserStr.get()); - ipUserStr.addCallback(new Runnable() { - @Override - public void run() { - logger.info(ipUserStr.get()); - ipUserMap = parseIpUserStr(ipUserStr.get()); - logger.info(ipUserMap.toString()); - } - }); - } - + public void init(FilterConfig filterConfig) {} public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { final HttpServletRequest request = (HttpServletRequest) servletRequest; final HttpServletResponse response = (HttpServletResponse) servletResponse; final HttpSession session = request.getSession(false); //1. turn off auth - if (!enableAuthorize.get()){ - setAssertion(request, SLB_SERVER_USER); + if (!configService.getEnable("server.authorization", false)){ + setAssertion(request, AuthUserConstants.SLB_SERVER_USER); filterChain.doFilter(request,response); return; } @@ -68,7 +60,7 @@ public class IPAuthenticationFilter implements Filter{ String slbServerToken = request.getHeader(SERVER_TOKEN_HEADER); if (slbServerToken != null){ if (TokenManager.validateToken(slbServerToken)){ - setAssertion(request, SLB_SERVER_USER); + setAssertion(request, AuthUserConstants.SLB_SERVER_USER); filterChain.doFilter(request,response); return; } @@ -95,29 +87,8 @@ public class IPAuthenticationFilter implements Filter{ // nothing to do } - private Map parseIpUserStr(String ipConfig){ - Map result = new HashMap<>(); - if (ipConfig == null || ipConfig.isEmpty()) { - return result; - } - String[] configs = ipConfig.split("#"); - for(String config : configs) { - String[] parts = config.split("=", -1); - if (parts == null || parts.length != 2){ - logger.error("fail to parse {}", config); - continue; - } - String[] ips = parts[0].split(","); - String userName = parts[1]; - for (String ip : ips) { - result.put(ip,userName); - } - } - return result; - } - private String getIpUser(String clientIP) { - String user = ipUserMap.get(clientIP); + String user = configService.getKeyType(IP_AUTHENTICATION_PREFIX, AuthUserConstants.getAuthUsers(), clientIP); return user; } diff --git a/src/main/java/com/ctrip/zeus/auth/util/AuthUserConstants.java b/src/main/java/com/ctrip/zeus/auth/util/AuthUserConstants.java new file mode 100644 index 00000000..6e36e7b7 --- /dev/null +++ b/src/main/java/com/ctrip/zeus/auth/util/AuthUserConstants.java @@ -0,0 +1,24 @@ +package com.ctrip.zeus.auth.util; + +import com.google.common.collect.Sets; + +import java.util.Set; + +/** + * Created by lu.wang on 2016/5/6. + */ +public class AuthUserConstants { + public static final String OP_SYS_USER = "opSys"; + public static final String RELEASE_SYS_USER = "releaseSys"; + public static final String SLB_TEAM_USER = "slbTeam"; + public static final String SLB_SERVER_USER = "slbServer"; + + public static Set getAuthUsers() { + return Sets.newHashSet( + OP_SYS_USER, + RELEASE_SYS_USER, + SLB_TEAM_USER, + SLB_SERVER_USER + ); + } +} diff --git a/src/main/java/com/ctrip/zeus/service/build/ConfService.java b/src/main/java/com/ctrip/zeus/service/build/ConfService.java deleted file mode 100644 index 305a4225..00000000 --- a/src/main/java/com/ctrip/zeus/service/build/ConfService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.ctrip.zeus.service.build; - -/** - * Created by lu.wang on 2016/4/19. - */ -public interface ConfService { - - String getStringValue(String key, Long slbId, Long vsId, Long groupId, String defaultValue) throws Exception; - int getIntValue(String key, Long slbId, Long vsId, Long groupId, int defaultValue) throws Exception; - boolean getEnable(String key, Long slbId, Long vsId, Long groupId, boolean defaultValue) throws Exception; - -} diff --git a/src/main/java/com/ctrip/zeus/service/build/ConfigService.java b/src/main/java/com/ctrip/zeus/service/build/ConfigService.java new file mode 100644 index 00000000..e9d3c627 --- /dev/null +++ b/src/main/java/com/ctrip/zeus/service/build/ConfigService.java @@ -0,0 +1,36 @@ +package com.ctrip.zeus.service.build; + +import java.util.Set; + +/** + * Created by lu.wang on 2016/4/19. + */ +public interface ConfigService { + + /** + * For nginx conf generate + */ + String getStringValue(String key, Long slbId, Long vsId, Long groupId, String defaultValue) throws Exception; + int getIntValue(String key, Long slbId, Long vsId, Long groupId, int defaultValue) throws Exception; + boolean getEnable(String key, Long slbId, Long vsId, Long groupId, boolean defaultValue) throws Exception; + + /** + * Just for get dynamic config value + */ + String getStringValue(String key, String defaultValue); + boolean getEnable(String key, boolean defaultValue); + + /** + * prefix.[type1] = value1, value2, value3 + * prefix.[type2] = value4, value5, value6 + * + * return the type according to the value, if not found the value, return null + * + * @param prefix + * @param types + * @param value + * @return + */ + String getKeyType(String prefix, Set types, String value); + +} diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/HealthCheckConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/HealthCheckConf.java index f330ee2a..98f0e388 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/HealthCheckConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/HealthCheckConf.java @@ -3,7 +3,7 @@ package com.ctrip.zeus.service.build.conf; import com.ctrip.zeus.model.entity.Group; import com.ctrip.zeus.model.entity.HealthCheck; import com.ctrip.zeus.model.entity.VirtualServer; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.util.AssertUtils; import org.springframework.stereotype.Component; @@ -17,13 +17,13 @@ import javax.annotation.Resource; public class HealthCheckConf { @Resource - ConfService confService; + ConfigService configService; public String generate(VirtualServer vs, Group group) throws Exception { Long vsId = vs.getId(); Long groupId = group.getId(); - if (!confService.getEnable("upstream.healthCheck", null, vsId, groupId, true)) { + if (!configService.getEnable("upstream.healthCheck", null, vsId, groupId, true)) { return ""; } @@ -38,10 +38,10 @@ public class HealthCheckConf { StringBuilder b = new StringBuilder(128); - String healthCheckTimeout = confService.getStringValue("upstream.healthCheck.timeOut", null, vsId, groupId, "2000"); - String sslAspx = confService.getStringValue("upstream.healthCheck.ssl.aspx", null, vsId, groupId, "/SlbHealthCheck.aspx"); + String healthCheckTimeout = configService.getStringValue("upstream.healthCheck.timeOut", null, vsId, groupId, "2000"); + String sslAspx = configService.getStringValue("upstream.healthCheck.ssl.aspx", null, vsId, groupId, "/SlbHealthCheck.aspx"); - if (group.getSsl() && confService.getEnable("upstream.healthCheck.sslHello", null, vsId, groupId, false)) { + if (group.getSsl() && configService.getEnable("upstream.healthCheck.sslHello", null, vsId, groupId, false)) { b.append(" check interval=").append(h.getIntervals()) .append(" rise=").append(h.getPasses()) .append(" fall=").append(h.getFails()) diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java index 4ef874ac..a1c71ec3 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java @@ -4,7 +4,7 @@ import com.ctrip.zeus.model.entity.Group; import com.ctrip.zeus.model.entity.GroupVirtualServer; import com.ctrip.zeus.model.entity.Slb; import com.ctrip.zeus.model.entity.VirtualServer; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.service.model.PathRewriteParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,7 +20,7 @@ import java.util.List; @Component("locationConf") public class LocationConf { @Resource - ConfService confService; + ConfigService configService; private static final Logger LOGGER = LoggerFactory.getLogger(LocationConf.class); @@ -58,8 +58,8 @@ public class LocationConf { } else { confWriter.writeLocationStart(e.getPath()); - if (confService.getEnable("location.client.max.body.size", slbId, vsId, groupId, false)) { - confWriter.writeCommand("client_max_body_size", confService.getStringValue("location.client.max.body.size", slbId, vsId, groupId, "2") + "m"); + if (configService.getEnable("location.client.max.body.size", slbId, vsId, groupId, false)) { + confWriter.writeCommand("client_max_body_size", configService.getStringValue("location.client.max.body.size", slbId, vsId, groupId, "2") + "m"); } confWriter.writeCommand("proxy_request_buffering", "off"); @@ -68,18 +68,18 @@ public class LocationConf { confWriter.writeCommand("proxy_set_header", "Host $host"); confWriter.writeCommand("proxy_set_header", "X-Real-IP $remote_addr"); - if (confService.getEnable("location.upstream.keepAlive", slbId, vsId, groupId, false)) { + if (configService.getEnable("location.upstream.keepAlive", slbId, vsId, groupId, false)) { confWriter.writeCommand("proxy_set_header", "Connection \"\""); } String proxyReadTimeout = "location.proxy.readTimeout"; - if (confService.getEnable(proxyReadTimeout, slbId, vsId, groupId, true)) { - String readTimeout = confService.getStringValue(proxyReadTimeout, slbId, vsId, groupId, "60"); + if (configService.getEnable(proxyReadTimeout, slbId, vsId, groupId, true)) { + String readTimeout = configService.getStringValue(proxyReadTimeout, slbId, vsId, groupId, "60"); confWriter.writeCommand("proxy_read_timeout", readTimeout + "s"); } - if (confService.getEnable("location.x-forwarded-for", slbId, vsId, groupId, true)) { + if (configService.getEnable("location.x-forwarded-for", slbId, vsId, groupId, true)) { confWriter.writeIfStart("$remote_addr ~* \"" + - confService.getStringValue("location.x-forwarded-for.white.list", slbId, vsId, groupId, "172\\..*|192\\.168.*|10\\..*") + "\"") + configService.getStringValue("location.x-forwarded-for.white.list", slbId, vsId, groupId, "172\\..*|192\\.168.*|10\\..*") + "\"") .writeCommand("set", "$inWhite \"true\"") .writeIfEnd(); @@ -88,7 +88,7 @@ public class LocationConf { confWriter.writeCommand("proxy_set_header", "X-Forwarded-For $proxy_add_x_forwarded_for"); } - if (confService.getEnable("location.errorPage", slbId, vsId, groupId, false)) { + if (configService.getEnable("location.errorPage", slbId, vsId, groupId, false)) { confWriter.writeCommand("proxy_intercept_errors", "on"); } @@ -144,7 +144,7 @@ public class LocationConf { } private void addBastionCommand(ConfWriter confWriter, String upstreamName, Long slbId, Long vsId, Long groupId) throws Exception { - String whiteList = confService.getStringValue("location.bastion.white.list", slbId, vsId, groupId, "denyAll"); + String whiteList = configService.getStringValue("location.bastion.white.list", slbId, vsId, groupId, "denyAll"); confWriter.writeIfStart("$remote_addr ~* \"" + whiteList + "\"") .writeCommand("set", "$upstream $cookie_bastion") @@ -167,16 +167,16 @@ public class LocationConf { private String getHcLuaScripts(Long slbId, Long vsId) throws Exception { return new StringBuilder(512).append("'\n") //TODO hardcode health check gif - .append("local res = ngx.decode_base64(\"").append(confService.getStringValue("location.vs.health.check.gif.base64", slbId, vsId, null, "")).append("\");\n") + .append("local res = ngx.decode_base64(\"").append(configService.getStringValue("location.vs.health.check.gif.base64", slbId, vsId, null, "")).append("\");\n") .append("ngx.print(res);\n") .append("return ngx.exit(200);'").toString(); } public void writeErrorPageLocation(ConfWriter confWriter, boolean errorPageUseNew, int statusCode, Long slbId, Long vsId) throws Exception { - String errorPageAccept = confService.getStringValue("location.errorPage.accept", slbId, vsId, null, "text/html"); + String errorPageAccept = configService.getStringValue("location.errorPage.accept", slbId, vsId, null, "text/html"); if (errorPageUseNew) { - String url = confService.getStringValue("location.errorPage.host.url", slbId, vsId, null, null); + String url = configService.getStringValue("location.errorPage.host.url", slbId, vsId, null, null); if (url == null || url.isEmpty()) { LOGGER.error("Error page url is not configured. Skip writing error page locations."); return; @@ -192,7 +192,7 @@ public class LocationConf { confWriter.writeCommand("proxy_pass", url); confWriter.writeLocationEnd(); } else { - String errorPageConfig = confService.getStringValue("location.errorPage." + statusCode + ".url", slbId, vsId, null, null); + String errorPageConfig = configService.getStringValue("location.errorPage." + statusCode + ".url", slbId, vsId, null, null); if (null != errorPageConfig) { String path = "/" + statusCode + "page"; confWriter.writeCommand("error_page", statusCode + " " + path); diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/NginxConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/NginxConf.java index fbade82e..3d6d4c2b 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/NginxConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/NginxConf.java @@ -1,7 +1,7 @@ package com.ctrip.zeus.service.build.conf; import com.ctrip.zeus.model.entity.Slb; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -15,7 +15,7 @@ public class NginxConf { private static String ShmZoneName = "proxy_zone"; @Resource - ConfService confService; + ConfigService configService; @Resource ServerConf serverConf; @@ -25,7 +25,7 @@ public class NginxConf { ConfWriter confWriter = new ConfWriter(10240, true); confWriter.writeCommand("worker_processes", "auto"); confWriter.writeCommand("user", "nobody"); - confWriter.writeCommand("error_log", "/opt/logs/nginx/error.log" + confService.getStringValue("logLevel", slbId, null, null, "")); + confWriter.writeCommand("error_log", "/opt/logs/nginx/error.log" + configService.getStringValue("logLevel", slbId, null, null, "")); confWriter.writeCommand("worker_rlimit_nofile", "65535"); confWriter.writeCommand("pid", "logs/nginx.pid"); @@ -38,12 +38,12 @@ public class NginxConf { confWriter.writeHttpStart(); confWriter.writeCommand("include", "mime.types"); confWriter.writeCommand("default_type", "application/octet-stream"); - confWriter.writeCommand("keepalive_timeout", confService.getStringValue("keepAlive.timeout", slbId, null, null, "65")); + confWriter.writeCommand("keepalive_timeout", configService.getStringValue("keepAlive.timeout", slbId, null, null, "65")); confWriter.writeCommand("log_format", "main " + LogFormat.getMain()); confWriter.writeCommand("access_log", "/opt/logs/nginx/access.log main"); - confWriter.writeCommand("server_names_hash_max_size", confService.getStringValue("serverNames.maxSize", slbId, null, null, "10000")); - confWriter.writeCommand("server_names_hash_bucket_size", confService.getStringValue("serverNames.bucketSize", slbId, null, null, "128")); - confWriter.writeCommand("check_shm_size", confService.getStringValue("checkShmSize", slbId, null, null, "32") + "M"); + confWriter.writeCommand("server_names_hash_max_size", configService.getStringValue("serverNames.maxSize", slbId, null, null, "10000")); + confWriter.writeCommand("server_names_hash_bucket_size", configService.getStringValue("serverNames.bucketSize", slbId, null, null, "128")); + confWriter.writeCommand("check_shm_size", configService.getStringValue("checkShmSize", slbId, null, null, "32") + "M"); confWriter.writeCommand("client_max_body_size", "2m"); confWriter.writeCommand("ignore_invalid_headers", "off"); diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java index c73aac36..47cc38cb 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java @@ -5,7 +5,7 @@ import com.ctrip.zeus.model.entity.Domain; import com.ctrip.zeus.model.entity.Group; import com.ctrip.zeus.model.entity.Slb; import com.ctrip.zeus.model.entity.VirtualServer; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.util.AssertUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -18,7 +18,7 @@ import java.util.List; @Component("serverConf") public class ServerConf { @Resource - ConfService confService; + ConfigService configService; @Resource LocationConf locationConf; @@ -42,10 +42,10 @@ public class ServerConf { confWriter.writeCommand("ignore_invalid_headers", "off"); confWriter.writeCommand("proxy_http_version", "1.1"); - if (confService.getEnable("server.proxy.buffer.size", slbId, vsId, null, false)) { - confWriter.writeCommand("proxy_buffer_size", confService.getStringValue("server.proxy.buffer.size", slbId, vsId, null, "8k")); - confWriter.writeCommand("proxy_buffers", confService.getStringValue("server.proxy.buffers", slbId, vsId, null, "8 8k")); - confWriter.writeCommand("proxy_busy_buffers_size", confService.getStringValue("server.proxy.busy.buffers.size", slbId, vsId, null, "8k")); + if (configService.getEnable("server.proxy.buffer.size", slbId, vsId, null, false)) { + confWriter.writeCommand("proxy_buffer_size", configService.getStringValue("server.proxy.buffer.size", slbId, vsId, null, "8k")); + confWriter.writeCommand("proxy_buffers", configService.getStringValue("server.proxy.buffers", slbId, vsId, null, "8 8k")); + confWriter.writeCommand("proxy_busy_buffers_size", configService.getStringValue("server.proxy.busy.buffers.size", slbId, vsId, null, "8k")); } if (vs.isSsl()) { @@ -54,7 +54,7 @@ public class ServerConf { confWriter.writeCommand("ssl_certificate_key", SSL_PATH + vsId + "/ssl.key"); } - if (confService.getEnable("server.vs.health.check", slbId, vsId, null, false)) { + if (configService.getEnable("server.vs.health.check", slbId, vsId, null, false)) { locationConf.writeHealthCheckLocation(confWriter, slbId, vsId); } @@ -65,8 +65,8 @@ public class ServerConf { locationConf.write(confWriter, slb, vs, group); } - if (confService.getEnable("server.errorPage", slbId, vsId, null, false)) { - boolean useNew = confService.getEnable("server.errorPage.use.new", slbId, vsId, null, true); + if (configService.getEnable("server.errorPage", slbId, vsId, null, false)) { + boolean useNew = configService.getEnable("server.errorPage.use.new", slbId, vsId, null, true); for (int sc = 400; sc <= 425; sc++) { locationConf.writeErrorPageLocation(confWriter, useNew, sc, slbId, vsId); } @@ -93,7 +93,7 @@ public class ServerConf { public void writeDyupsServer(ConfWriter confWriter, Long slbId) throws Exception { confWriter.writeCommand("dyups_upstream_conf", "conf/dyupstream.conf"); confWriter.writeServerStart(); - confWriter.writeCommand("listen", confService.getStringValue("server.dyups.port", slbId, null, null, "8081")); + confWriter.writeCommand("listen", configService.getStringValue("server.dyups.port", slbId, null, null, "8081")); locationConf.writeDyupsLocation(confWriter); @@ -102,7 +102,7 @@ public class ServerConf { public void writeCheckStatusServer(ConfWriter confWriter, String shmZoneName, Long slbId) throws Exception { confWriter.writeServerStart(); - confWriter.writeCommand("listen", confService.getStringValue("server.status.port", slbId, null, null, "10001")); + confWriter.writeCommand("listen", configService.getStringValue("server.status.port", slbId, null, null, "10001")); confWriter.writeCommand("req_status", shmZoneName); locationConf.writeCheckStatusLocations(confWriter); confWriter.writeServerEnd(); diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java index 84fe8a45..b0389314 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java @@ -4,9 +4,8 @@ import com.ctrip.zeus.domain.LBMethod; import com.ctrip.zeus.exceptions.ValidationException; import com.ctrip.zeus.model.entity.*; import com.ctrip.zeus.nginx.entity.ConfFile; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.util.AssertUtils; -import com.ctrip.zeus.util.StringFormat; import com.google.common.base.Joiner; import org.springframework.stereotype.Component; @@ -20,7 +19,7 @@ import java.util.*; @Component("upstreamsConf") public class UpstreamsConf { @Resource - ConfService confService; + ConfigService configService; @Resource HealthCheckConf healthCheckConf; @@ -107,11 +106,11 @@ public class UpstreamsConf { confWriter.writeUpstreamServer(ip, server.getPort(), server.getWeight(), server.getMaxFails(), server.getFailTimeout(), down); } - if (confService.getEnable("upstream.keepAlive", slbId, vsId, groupId, false)) { - confWriter.writeCommand("keepalive", confService.getStringValue("upstream.keepAlive", slbId, vsId, groupId, "100")); + if (configService.getEnable("upstream.keepAlive", slbId, vsId, groupId, false)) { + confWriter.writeCommand("keepalive", configService.getStringValue("upstream.keepAlive", slbId, vsId, groupId, "100")); } - if (confService.getEnable("upstream.keepAlive.timeout", slbId, vsId, groupId, false)) { - confWriter.writeCommand("keepalive_timeout", confService.getStringValue("upstream.keepAlive.timeout", slbId, vsId, groupId, "110") + "s"); + if (configService.getEnable("upstream.keepAlive.timeout", slbId, vsId, groupId, false)) { + confWriter.writeCommand("keepalive_timeout", configService.getStringValue("upstream.keepAlive.timeout", slbId, vsId, groupId, "110") + "s"); } // This module is to be abandoned. diff --git a/src/main/java/com/ctrip/zeus/service/build/impl/ConfServiceImpl.java b/src/main/java/com/ctrip/zeus/service/build/impl/ConfigServiceImpl.java similarity index 59% rename from src/main/java/com/ctrip/zeus/service/build/impl/ConfServiceImpl.java rename to src/main/java/com/ctrip/zeus/service/build/impl/ConfigServiceImpl.java index 11c163a5..57e588c8 100644 --- a/src/main/java/com/ctrip/zeus/service/build/impl/ConfServiceImpl.java +++ b/src/main/java/com/ctrip/zeus/service/build/impl/ConfigServiceImpl.java @@ -1,15 +1,20 @@ package com.ctrip.zeus.service.build.impl; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.util.S; import com.netflix.config.*; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + /** * Created by lu.wang on 2016/4/19. */ -@Service("confService") -public class ConfServiceImpl implements ConfService { +@Service("configService") +public class ConfigServiceImpl implements ConfigService { private DynamicPropertyFactory factory = DynamicPropertyFactory.getInstance(); @@ -81,6 +86,64 @@ public class ConfServiceImpl implements ConfService { return value.get(); } + @Override + public String getStringValue(String key, String defaultValue) { + DynamicStringProperty stringValue = + factory.getStringProperty(key, defaultValue); + return stringValue.get(); + } + + @Override + public boolean getEnable(String key, boolean defaultValue){ + DynamicBooleanProperty value = + factory.getBooleanProperty(key + ".enable", defaultValue); + return value.get(); + } + + @Override + public String getKeyType(String prefix, Set types, String value) { + if (prefix == null || types == null || types.size() == 0 || value == null) + return null; + + String typeValue; + for (String typeName : types) { + typeValue = factory.getStringProperty(prefix + "." + typeName, null).get(); + if (typeValue != null && Arrays.asList(typeValue.split(",")).contains(value)) { + return typeName; + } + } + + String defaultValue = factory.getStringProperty(prefix + ".default", null).get(); + Map valueKeyMap = parseIpUserStr(defaultValue); + + for (Map.Entry entry : valueKeyMap.entrySet()) { + if (entry.getKey().equals(value)) + return entry.getValue().toString(); + } + + return null; + } + + private Map parseIpUserStr(String ipConfig){ + Map result = new HashMap<>(); + if (ipConfig == null || ipConfig.isEmpty()) { + return result; + } + String[] configs = ipConfig.split("#"); + for(String config : configs) { + String[] parts = config.split("=", -1); + if (parts == null || parts.length != 2){ + continue; + } + String[] ips = parts[0].split(","); + String userName = parts[1]; + for (String ip : ips) { + result.put(ip,userName); + } + } + return result; + } + private String getFullKey(String key) { return "nginx." + key; } diff --git a/src/main/resources/slb-admin-unittest.properties b/src/main/resources/slb-admin-unittest.properties index 7f505338..5023965f 100644 --- a/src/main/resources/slb-admin-unittest.properties +++ b/src/main/resources/slb-admin-unittest.properties @@ -103,3 +103,7 @@ nginx.location.testKey1.slb.1=2 nginx.location.testKey1.vs.1=3 nginx.location.testKey1.group.1=4 +########testGetKeyType########### +ip.authentication.default=10.32.20.131=sdong#10.32.64.14,10.32.64.22,10.32.64.37=lsqiu#10.2.56.116=cmpSys +ip.authentication.opSys=10.32.51.139,192.168.18.215,10.2.20.220,192.168.18.81,192.168.18.82,192.168.18.187,10.32.21.25,10.32.21.14,10.32.21.6,10.32.21.32,192.168.18.81,192.168.18.82,172.16.0.211,192.168.96.45,10.38.121.212,10.38.121.182,192.168.93.82,10.32.106.122,10.32.6.143,10.32.6.129,10.32.21.124,192.168.18.219,192.168.18.220,10.32.6.128,10.15.113.57,10.15.113.58,10.2.10.131,10.32.6.9,10.32.6.16,10.32.6.4,10.2.24.51,10.32.21.11,10.2.25.214,10.2.25.215 +ip.authentication.releaseSys=10.18.5.39,10.18.5.26,172.16.226.137,172.16.226.8,172.16.226.167,172.16.140.184,172.16.140.148,10.2.25.93,10.2.25.94,10.2.25.95,10.38.121.182,10.32.21.148,10.18.5.39,10.9.113.50,10.9.113.51,10.9.113.52,10.32.64.12,10.32.64.125,10.32.64.228,10.32.21.150,10.9.113.6,10.9.113.7,10.32.0.1,10.2.33.176,10.9.80.77,10.9.80.78 \ No newline at end of file diff --git a/src/test/java/com/ctrip/zeus/service/ConfServiceTest.java b/src/test/java/com/ctrip/zeus/service/ConfigServiceTest.java similarity index 70% rename from src/test/java/com/ctrip/zeus/service/ConfServiceTest.java rename to src/test/java/com/ctrip/zeus/service/ConfigServiceTest.java index ce166a74..b3ea0fbb 100644 --- a/src/test/java/com/ctrip/zeus/service/ConfServiceTest.java +++ b/src/test/java/com/ctrip/zeus/service/ConfigServiceTest.java @@ -1,6 +1,7 @@ package com.ctrip.zeus.service; import com.ctrip.zeus.AbstractServerTest; +import com.ctrip.zeus.auth.util.AuthUserConstants; import com.ctrip.zeus.client.GroupClient; import com.ctrip.zeus.client.SlbClient; import com.ctrip.zeus.client.VirtualServerClient; @@ -9,31 +10,22 @@ import com.ctrip.zeus.model.entity.GroupServer; import com.ctrip.zeus.model.entity.Slb; import com.ctrip.zeus.model.entity.VirtualServer; import com.ctrip.zeus.nginx.entity.ConfFile; -import com.ctrip.zeus.service.build.ConfService; +import com.ctrip.zeus.service.build.ConfigService; import com.ctrip.zeus.service.build.conf.LocationConf; import com.ctrip.zeus.service.build.conf.NginxConf; import com.ctrip.zeus.service.build.conf.ServerConf; import com.ctrip.zeus.service.build.conf.UpstreamsConf; -import com.ctrip.zeus.util.S; import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicProperty; import com.netflix.config.DynamicPropertyFactory; import com.netflix.config.DynamicStringProperty; -import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.junit.Assert; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; -import support.AbstractSpringTest; -import support.MysqlDbServer; import javax.annotation.Resource; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -41,10 +33,10 @@ import java.util.Set; /** * Created by lu.wang on 2016/4/20. */ -public class ConfServiceTest extends AbstractServerTest { +public class ConfigServiceTest extends AbstractServerTest { @Resource - ConfService confService; + ConfigService configService; @Resource NginxConf nginxConf; @Resource @@ -71,21 +63,39 @@ public class ConfServiceTest extends AbstractServerTest { Assert.assertEquals("10.32.*", stringProperty.get()); } + @Test + public void testGetKeyType() { + String type = configService.getKeyType("ip.authentication", AuthUserConstants.getAuthUsers(), "10.32.20.131"); + Assert.assertEquals("sdong", type); + + type = configService.getKeyType("ip.authentication", AuthUserConstants.getAuthUsers(), "10.32.64.37"); + Assert.assertEquals("lsqiu", type); + + type = configService.getKeyType("ip.authentication", AuthUserConstants.getAuthUsers(), "192.168.18.215"); + Assert.assertEquals("opSys", type); + + type = configService.getKeyType("ip.authentication", AuthUserConstants.getAuthUsers(), "172.16.226.137"); + Assert.assertEquals("releaseSys", type); + + type = configService.getKeyType("ip.authentication", AuthUserConstants.getAuthUsers(), "1.2.3.4"); + Assert.assertNull(type); + } + @Test public void testGetStringValue() { try { String value; //testKey1 - value = confService.getStringValue("upstream.testKey1", null, 1L, 1L, ""); + value = configService.getStringValue("upstream.testKey1", null, 1L, 1L, ""); Assert.assertEquals("testKey1_group1_value", value); - value = confService.getStringValue("upstream.testKey1", null, 1L, 2L, ""); + value = configService.getStringValue("upstream.testKey1", null, 1L, 2L, ""); Assert.assertEquals("testKey1_vs1_value", value); - value = confService.getStringValue("upstream.testKey1", 1L, 2L, 2L, ""); + value = configService.getStringValue("upstream.testKey1", 1L, 2L, 2L, ""); Assert.assertEquals("testKey1_slb1_value", value); - value = confService.getStringValue("upstream.testKey1", 2L, 2L, 2L, "code_value"); + value = configService.getStringValue("upstream.testKey1", 2L, 2L, 2L, "code_value"); Assert.assertEquals("code_value", value); - value = confService.getStringValue("upstream.testKey2", 1L, 1L, 1L, "code_value"); + value = configService.getStringValue("upstream.testKey2", 1L, 1L, 1L, "code_value"); Assert.assertEquals("testKey2_default_value", value); } catch (Exception e) { @@ -97,15 +107,15 @@ public class ConfServiceTest extends AbstractServerTest { public void testGetIntValue() { try { int value; - value = confService.getIntValue("location.testKey1", 1L, 1L, 1L, 10); + value = configService.getIntValue("location.testKey1", 1L, 1L, 1L, 10); Assert.assertEquals(4, value); - value = confService.getIntValue("location.testKey1", 1L, 1L, 2L, 10); + value = configService.getIntValue("location.testKey1", 1L, 1L, 2L, 10); Assert.assertEquals(3, value); - value = confService.getIntValue("location.testKey1", 1L, 2L, 2L, 10); + value = configService.getIntValue("location.testKey1", 1L, 2L, 2L, 10); Assert.assertEquals(2, value); - value = confService.getIntValue("location.testKey1", 2L, 2L, 2L, 10); + value = configService.getIntValue("location.testKey1", 2L, 2L, 2L, 10); Assert.assertEquals(1, value); - value = confService.getIntValue("location.testKey1", 3L, 3L, 3L, 10); + value = configService.getIntValue("location.testKey1", 3L, 3L, 3L, 10); Assert.assertEquals(1, value); } catch (Exception e) { @@ -118,35 +128,35 @@ public class ConfServiceTest extends AbstractServerTest { try { boolean value; //testKey1 - value = confService.getEnable("server.testKey1", null, null, 1L, false); + value = configService.getEnable("server.testKey1", null, null, 1L, false); Assert.assertTrue(value); - value = confService.getEnable("server.testKey1", null, null, 2L, false); + value = configService.getEnable("server.testKey1", null, null, 2L, false); Assert.assertFalse(value); - value = confService.getEnable("server.testKey1", null, null, null, false); + value = configService.getEnable("server.testKey1", null, null, null, false); Assert.assertFalse(value); - value = confService.getEnable("server.testKey1", null, null, null, true); + value = configService.getEnable("server.testKey1", null, null, null, true); Assert.assertTrue(value); //testKey2 - value = confService.getEnable("server.testKey2", null, 1L, null, false); + value = configService.getEnable("server.testKey2", null, 1L, null, false); Assert.assertTrue(value); - value = confService.getEnable("server.testKey2", null, 1L, 1L, false); + value = configService.getEnable("server.testKey2", null, 1L, 1L, false); Assert.assertTrue(value); - value = confService.getEnable("server.testKey2", null, 1L, 10L, false); + value = configService.getEnable("server.testKey2", null, 1L, 10L, false); Assert.assertTrue(value); - value = confService.getEnable("server.testKey2", null, 2L, null, false); + value = configService.getEnable("server.testKey2", null, 2L, null, false); Assert.assertFalse(value); - value = confService.getEnable("server.testKey2", 1L, 2L, 1L, false); + value = configService.getEnable("server.testKey2", 1L, 2L, 1L, false); Assert.assertFalse(value); //testKey3 - value = confService.getEnable("server.testKey3", 1L, null, null, false); + value = configService.getEnable("server.testKey3", 1L, null, null, false); Assert.assertTrue(value); - value = confService.getEnable("server.testKey3", 1L, 1L, 1L, false); + value = configService.getEnable("server.testKey3", 1L, 1L, 1L, false); Assert.assertTrue(value); //testKey4 - value = confService.getEnable("server.testKey4", 1L, 1L, 1L, false); + value = configService.getEnable("server.testKey4", 1L, 1L, 1L, false); Assert.assertTrue(value); } catch (Exception e) {