mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
more changes for the console proxy custom certificate part; some code cleanup as well as event generation with console proxy reboot logic
This commit is contained in:
parent
f0fd34c5b4
commit
822ee2d899
@ -113,27 +113,30 @@ public class ConsoleProxyResource extends ServerResourceBase implements ServerRe
|
||||
String certificate = cmd.getCertificate();
|
||||
|
||||
//write the cert to /etc/cloud/consoleproxy/cert/
|
||||
String strDirectoy ="/etc/cloud/consoleproxy/cert/";
|
||||
boolean dirCreated = (new File(strDirectoy)).mkdir();
|
||||
if (dirCreated) {
|
||||
s_logger.info("Directory: " + strDirectoy + " created");
|
||||
String strDirectoy = null;
|
||||
boolean dirCreated = false;
|
||||
|
||||
//copy cert to the dir
|
||||
try {
|
||||
strDirectoy = "/etc/cloud/consoleproxy/cert/";
|
||||
dirCreated = (new File(strDirectoy)).mkdirs();
|
||||
|
||||
if (dirCreated)
|
||||
{
|
||||
s_logger.info("Directory: " + strDirectoy + " created");
|
||||
|
||||
//copy cert to the dir
|
||||
FileWriter fstream = new FileWriter("/etc/cloud/consoleproxy/cert/customcert");
|
||||
BufferedWriter out = new BufferedWriter(fstream);
|
||||
out.write(certificate);
|
||||
//Close the output stream
|
||||
out.close();
|
||||
}catch (Exception e){
|
||||
s_logger.warn("Unable to write file to /etc/cloud/consoleproxy/cert/ on console proxy", e);
|
||||
}
|
||||
success = true;
|
||||
}
|
||||
success = true;
|
||||
|
||||
return new Answer(cmd, success, "Cert string in the console proxy resource status:");
|
||||
}catch (Exception e)
|
||||
{
|
||||
s_logger.error("Unable to read the cert string in console proxy resource");
|
||||
s_logger.error("Unable to read the cert string in console proxy resource",e);
|
||||
success = false;
|
||||
}
|
||||
return new Answer(cmd, success, "Cert string in the console proxy resource status:");
|
||||
}
|
||||
|
||||
@ -137,5 +137,7 @@ public interface HostDao extends GenericDao<HostVO, Long> {
|
||||
|
||||
void loadDetails(HostVO host);
|
||||
|
||||
HostVO findConsoleProxyHost(String name, Type type);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -79,6 +79,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
protected final SearchBuilder<HostVO> UnmanagedDirectConnectSearch;
|
||||
protected final SearchBuilder<HostVO> MaintenanceCountSearch;
|
||||
protected final SearchBuilder<HostVO> ClusterSearch;
|
||||
protected final SearchBuilder<HostVO> ConsoleProxyHostSearch;
|
||||
|
||||
protected final Attribute _statusAttr;
|
||||
protected final Attribute _msIdAttr;
|
||||
@ -155,6 +156,11 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
ClusterSearch.and("cluster", ClusterSearch.entity().getClusterId(), SearchCriteria.Op.EQ);
|
||||
ClusterSearch.done();
|
||||
|
||||
ConsoleProxyHostSearch = createSearchBuilder();
|
||||
ConsoleProxyHostSearch.and("name", ConsoleProxyHostSearch.entity().getName(), SearchCriteria.Op.EQ);
|
||||
ConsoleProxyHostSearch.and("type", ConsoleProxyHostSearch.entity().getType(), SearchCriteria.Op.EQ);
|
||||
ConsoleProxyHostSearch.done();
|
||||
|
||||
PodSearch = createSearchBuilder();
|
||||
PodSearch.and("pod", PodSearch.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||
PodSearch.done();
|
||||
@ -443,6 +449,19 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
||||
return listBy(sc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HostVO findConsoleProxyHost(String name, Type type) {
|
||||
SearchCriteria<HostVO> sc = ConsoleProxyHostSearch.create();
|
||||
sc.setParameters("name", name);
|
||||
sc.setParameters("type", type);
|
||||
List<HostVO>hostList = listBy(sc);
|
||||
|
||||
if(hostList==null || hostList.size() == 0)
|
||||
return null;
|
||||
else
|
||||
return hostList.get(0);
|
||||
}
|
||||
|
||||
public List<HostVO> listByHostPod(long podId) {
|
||||
SearchCriteria<HostVO> sc = PodSearch.create("pod", podId);
|
||||
return listBy(sc);
|
||||
|
||||
@ -174,6 +174,7 @@ import com.cloud.dc.dao.PodVlanMapDao;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
import com.cloud.domain.DomainVO;
|
||||
import com.cloud.domain.dao.DomainDao;
|
||||
import com.cloud.event.EventState;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.event.EventUtils;
|
||||
import com.cloud.event.EventVO;
|
||||
@ -6932,6 +6933,18 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
return version;
|
||||
}
|
||||
|
||||
private Long saveScheduledEvent(Long userId, Long accountId, String type, String description)
|
||||
{
|
||||
EventVO event = new EventVO();
|
||||
event.setUserId(userId);
|
||||
event.setAccountId(accountId);
|
||||
event.setType(type);
|
||||
event.setState(EventState.Scheduled);
|
||||
event.setDescription("Scheduled async job for "+description);
|
||||
event = _eventDao.persist(event);
|
||||
return event.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean uploadCertificate(UploadCustomCertificateCmd cmd) {
|
||||
String certificatePath = cmd.getPath();
|
||||
@ -6940,32 +6953,36 @@ public class ManagementServerImpl implements ManagementServer {
|
||||
if (certVOId!=null && certVOId!=0) {
|
||||
//certficate uploaded to db successfully
|
||||
|
||||
//get a list of all hosts from host table
|
||||
List<HostVO> hosts = _hostDao.listAll();
|
||||
//get a list of all Console proxies from the cp table
|
||||
List<ConsoleProxyVO> cpList = _consoleProxyDao.listAll();
|
||||
|
||||
List<HostVO> consoleProxyList = new ArrayList<HostVO>();
|
||||
for(ConsoleProxyVO cp : cpList)
|
||||
{
|
||||
HostVO cpHost = _hostDao.findConsoleProxyHost(cp.getName(), com.cloud.host.Host.Type.ConsoleProxy);
|
||||
|
||||
//find the console proxies, and send the command to them
|
||||
for(HostVO host : hosts) {
|
||||
if(host.getType().equals(com.cloud.host.Host.Type.ConsoleProxy)){
|
||||
consoleProxyList.add(host);
|
||||
}
|
||||
}
|
||||
|
||||
for(HostVO consoleProxy : consoleProxyList){
|
||||
//now send a command to each console proxy
|
||||
UpdateCertificateCommand certCmd = new UpdateCertificateCommand(_certDao.findById(certVOId).getCertificate());
|
||||
try {
|
||||
Answer updateCertAns = _agentMgr.send(consoleProxy.getId(), certCmd);
|
||||
Answer updateCertAns = _agentMgr.send(cpHost.getId(), certCmd);
|
||||
|
||||
if(updateCertAns.getResult() == true)
|
||||
{
|
||||
//we have the cert copied over on cpvm
|
||||
long eventId = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_PROXY_REBOOT, "stopping console proxy with Id: "+cp.getId());
|
||||
boolean cpReboot = _consoleProxyMgr.rebootProxy(cp.getId(), eventId);
|
||||
//when cp reboots, the context will be reinit with the new cert
|
||||
}
|
||||
} catch (AgentUnavailableException e) {
|
||||
s_logger.warn("Unable to send command to the console proxy resource", e);
|
||||
} catch (OperationTimedoutException e) {
|
||||
s_logger.warn("Unable to send command to the console proxy resource", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user