tight coupling vs add/update action and cert installation

This commit is contained in:
Mengyi Zhou 2015-11-04 16:59:06 +08:00
parent ebc43800cf
commit effc724b51
4 changed files with 37 additions and 82 deletions

View file

@ -3,7 +3,6 @@ package com.ctrip.zeus.restful.resource;
import com.ctrip.zeus.auth.Authorize;
import com.ctrip.zeus.exceptions.ValidationException;
import com.ctrip.zeus.model.entity.Slb;
import com.ctrip.zeus.model.entity.SlbServer;
import com.ctrip.zeus.model.entity.VirtualServer;
import com.ctrip.zeus.model.entity.VirtualServerList;
import com.ctrip.zeus.model.transform.DefaultJsonParser;
@ -15,7 +14,6 @@ import com.ctrip.zeus.restful.message.TrimmedQueryParam;
import com.ctrip.zeus.service.model.GroupRepository;
import com.ctrip.zeus.service.model.SlbRepository;
import com.ctrip.zeus.service.model.VirtualServerRepository;
import com.ctrip.zeus.service.nginx.CertificateService;
import com.ctrip.zeus.service.query.GroupCriteriaQuery;
import com.ctrip.zeus.service.query.SlbCriteriaQuery;
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
@ -49,8 +47,6 @@ public class VirtualServerResource {
@Resource
private GroupRepository groupRepository;
@Resource
private CertificateService certificateService;
@Resource
private VirtualServerCriteriaQuery virtualServerCriteriaQuery;
@Resource
private GroupCriteriaQuery groupCriteriaQuery;
@ -153,9 +149,6 @@ public class VirtualServerResource {
throw new ValidationException("Slb id is not provided.");
virtualServer = virtualServerRepository.addVirtualServer(virtualServer.getSlbId(), virtualServer);
slbRepository.updateVersion(virtualServer.getSlbId());
if (virtualServer.getSsl().booleanValue()) {
installCertificate(virtualServer);
}
return responseHandler.handle(virtualServer, hh.getMediaType());
}
@ -178,9 +171,6 @@ public class VirtualServerResource {
slbRepository.updateVersion(originSlbId);
Set<Long> groupIds = groupCriteriaQuery.queryByVsIds(new Long[]{virtualServer.getId()});
groupRepository.updateVersion(groupIds.toArray(new Long[groupIds.size()]));
if (virtualServer.getSsl().booleanValue()) {
installCertificate(virtualServer);
}
return responseHandler.handle(virtualServer, hh.getMediaType());
}
@ -224,16 +214,6 @@ public class VirtualServerResource {
return responseHandler.handle("Successfully ported virtual server relations.", hh.getMediaType());
}
private void installCertificate(VirtualServer virtualServer) throws Exception {
List<String> ips = new ArrayList<>();
for (SlbServer slbServer : slbRepository.getById(virtualServer.getSlbId()).getSlbServers()) {
ips.add(slbServer.getIp());
}
Long certId = certificateService.pickCertificate(virtualServer);
certificateService.command(virtualServer.getId(), ips, certId);
certificateService.install(virtualServer.getId());
}
private VirtualServer parseVirtualServer(MediaType mediaType, String virtualServer) throws Exception {
VirtualServer vs;
if (mediaType.equals(MediaType.APPLICATION_XML_TYPE)) {

View file

@ -1,7 +1,5 @@
package com.ctrip.zeus.service.model.handler;
import com.ctrip.zeus.model.entity.Slb;
import java.util.List;
/**
@ -10,5 +8,5 @@ import java.util.List;
*/
public interface SlbQuery {
Slb getById(Long id) throws Exception;
List<String> getSlbIps(Long slbId) throws Exception;
}

View file

@ -1,62 +1,30 @@
package com.ctrip.zeus.service.model.handler.impl;
import com.ctrip.zeus.dal.core.*;
import com.ctrip.zeus.model.entity.*;
import com.ctrip.zeus.dal.core.RSlbSlbServerDao;
import com.ctrip.zeus.dal.core.RSlbSlbServerEntity;
import com.ctrip.zeus.dal.core.RelSlbSlbServerDo;
import com.ctrip.zeus.service.model.handler.SlbQuery;
import com.ctrip.zeus.support.C;
import org.springframework.stereotype.Component;
import org.unidal.dal.jdbc.DalException;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author:xingchaowang
* @date: 3/7/2015.
* @author:zhoumy
* @date: 11/4/2015.
*/
@Component("slbQuery")
public class SlbQueryImpl implements SlbQuery {
@Resource
private SlbDao slbDao;
@Resource
private SlbServerDao slbServerDao;
@Resource
private SlbVipDao slbVipDao;
private RSlbSlbServerDao rSlbSlbServerDao;
@Override
public Slb getById(Long id) throws Exception {
SlbDo d = slbDao.findByPK(id, SlbEntity.READSET_FULL);
return createSlb(d);
}
private Slb createSlb(SlbDo d) throws Exception {
if (d == null)
return null;
if (d.getName() == null || d.getName().isEmpty())
return null;
Slb slb = C.toSlb(d);
cascadeQuery(slb);
return slb;
}
private void cascadeQuery(Slb slb) throws Exception {
querySlbVips(slb);
querySlbServers(slb);
}
private void querySlbVips(Slb slb) throws DalException {
List<SlbVipDo> list = slbVipDao.findAllBySlb(slb.getId(), SlbVipEntity.READSET_FULL);
for (SlbVipDo d : list) {
Vip e = C.toVip(d);
slb.addVip(e);
}
}
private void querySlbServers(Slb slb) throws DalException {
List<SlbServerDo> list = slbServerDao.findAllBySlb(slb.getId(), SlbServerEntity.READSET_FULL);
for (SlbServerDo d : list) {
SlbServer e = C.toSlbServer(d);
slb.addSlbServer(e);
public List<String> getSlbIps(Long slbId) throws Exception {
List<String> result = new ArrayList<>();
for (RelSlbSlbServerDo relSlbSlbServerDo : rSlbSlbServerDao.findAllIpsBySlb(slbId, RSlbSlbServerEntity.READSET_FULL)) {
result.add(relSlbSlbServerDo.getIp());
}
return result;
}
}

View file

@ -3,13 +3,14 @@ package com.ctrip.zeus.service.model.impl;
import com.ctrip.zeus.dal.core.*;
import com.ctrip.zeus.exceptions.ValidationException;
import com.ctrip.zeus.model.entity.Domain;
import com.ctrip.zeus.model.entity.GroupVirtualServer;
import com.ctrip.zeus.model.entity.VirtualServer;
import com.ctrip.zeus.service.model.VirtualServerRepository;
import com.ctrip.zeus.service.model.handler.SlbQuery;
import com.ctrip.zeus.service.model.handler.SlbValidator;
import com.ctrip.zeus.service.model.handler.VirtualServerValidator;
import com.ctrip.zeus.service.model.handler.impl.ContentReaders;
import com.ctrip.zeus.service.model.handler.impl.VirtualServerEntityManager;
import com.ctrip.zeus.service.nginx.CertificateService;
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
import com.ctrip.zeus.support.C;
import org.springframework.stereotype.Component;
@ -37,6 +38,10 @@ public class VirtualServerRepositoryImpl implements VirtualServerRepository {
private VirtualServerValidator virtualServerModelValidator;
@Resource
private SlbValidator slbModelValidator;
@Resource
private SlbQuery slbQuery;
@Resource
private CertificateService certificateService;
@Override
public List<VirtualServer> listAll(Long[] vsIds) throws Exception {
@ -64,11 +69,17 @@ public class VirtualServerRepositoryImpl implements VirtualServerRepository {
check.add(virtualServer);
virtualServerModelValidator.validateVirtualServers(check);
virtualServerEntityManager.addVirtualServer(virtualServer);
if (virtualServer.getSsl().booleanValue()) {
installCertificate(virtualServer);
}
return virtualServer;
}
@Override
public void updateVirtualServer(VirtualServer virtualServer) throws Exception {
VirtualServer origin = getById(virtualServer.getId());
if (origin == null)
throw new ValidationException("Virtual server with id " + virtualServer.getId() + " does not exist.");
for (Domain domain : virtualServer.getDomains()) {
domain.setName(domain.getName().toLowerCase());
}
@ -79,12 +90,15 @@ public class VirtualServerRepositoryImpl implements VirtualServerRepository {
}
if (!check.containsKey(virtualServer.getId())) {
if (!slbModelValidator.exists(virtualServer.getSlbId())) {
throw new ValidationException("Slb with id " + virtualServer.getSlbId() + " does not exists.");
throw new ValidationException("Slb with id " + virtualServer.getSlbId() + " does not exist.");
}
}
check.put(virtualServer.getId(), virtualServer);
virtualServerModelValidator.validateVirtualServers(new ArrayList<>(check.values()));
virtualServerEntityManager.updateVirtualServer(virtualServer);
if (virtualServer.getSsl().booleanValue()) {
installCertificate(virtualServer);
}
}
@Override
@ -110,28 +124,23 @@ public class VirtualServerRepositoryImpl implements VirtualServerRepository {
virtualServerEntityManager.port(vs);
}
private void installCertificate(VirtualServer virtualServer) throws Exception {
List<String> ips = slbQuery.getSlbIps(virtualServer.getSlbId());
Long certId = certificateService.pickCertificate(virtualServer);
certificateService.command(virtualServer.getId(), ips, certId);
certificateService.install(virtualServer.getId());
}
private VirtualServer createVirtualServer(SlbVirtualServerDo d) throws DalException {
VirtualServer vs = C.toVirtualServer(d);
querySlbDomains(d.getId(), vs);
return vs;
}
private void querySlbDomains(Long slbVirtualServerId, VirtualServer virtualServer) throws DalException {
List<SlbDomainDo> list = slbDomainDao.findAllBySlbVirtualServer(slbVirtualServerId, SlbDomainEntity.READSET_FULL);
for (SlbDomainDo d : list) {
virtualServer.addDomain(new Domain().setName(d.getName().toLowerCase()));
}
}
private static GroupSlbDo toGroupSlbDo(Long groupId, GroupVirtualServer groupVirtualServer) {
VirtualServer vs = groupVirtualServer.getVirtualServer();
return new GroupSlbDo()
.setGroupId(groupId)
.setSlbId(vs.getSlbId())
.setSlbVirtualServerId(vs.getId())
.setPath(groupVirtualServer.getPath())
.setRewrite(groupVirtualServer.getRewrite())
.setPriority(groupVirtualServer.getPriority() == null ? 1000 : groupVirtualServer.getPriority());
}
}