Merge branch 'github_dev' of https://github.com/ctripcorp/zeus into github_dev

This commit is contained in:
fanqq 2016-05-09 17:33:50 +08:00
commit 49d69c62d3
13 changed files with 237 additions and 139 deletions

View file

@ -259,10 +259,13 @@
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<verbose>false</verbose>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>src/main/resources/git.properties</generateGitPropertiesFilename>
<failOnNoGitDirectory>true</failOnNoGitDirectory>
<includeOnlyProperties>
<includeOnlyProperty>^git.commit.id$</includeOnlyProperty>
</includeOnlyProperties>
</configuration>
</plugin>
<plugin>

View file

@ -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<String, String> 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<String,String> parseIpUserStr(String ipConfig){
Map<String, String> 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;
}

View file

@ -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<String> getAuthUsers() {
return Sets.newHashSet(
OP_SYS_USER,
RELEASE_SYS_USER,
SLB_TEAM_USER,
SLB_SERVER_USER
);
}
}

View file

@ -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;
}

View file

@ -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<String> types, String value);
}

View file

@ -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())

View file

@ -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);

View file

@ -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");

View file

@ -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();

View file

@ -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.

View file

@ -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<String> 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<String, String> valueKeyMap = parseIpUserStr(defaultValue);
for (Map.Entry entry : valueKeyMap.entrySet()) {
if (entry.getKey().equals(value))
return entry.getValue().toString();
}
return null;
}
private Map<String,String> parseIpUserStr(String ipConfig){
Map<String, String> 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;
}

View file

@ -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

View file

@ -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) {