mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-21 16:16:09 +08:00
tight coupling vs add/update action and cert installation
This commit is contained in:
parent
ebc43800cf
commit
effc724b51
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue