http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/VolumeManager.java ----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/VolumeManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/download/DownloadMonitorImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/storage/download/DownloadMonitorImpl.java index f5ce55f,f72a563..2b1aa4e --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@@ -159,40 -266,128 +159,39 @@@ public class DownloadMonitorImpl extend } Long maxTemplateSizeInBytes = getMaxTemplateSizeInBytes(); - if (srcTmpltHost.getSize() > maxTemplateSizeInBytes){ - throw new CloudRuntimeException("Cant copy the template as the template's size " +srcTmpltHost.getSize()+ - " is greater than max.template.iso.size " + maxTemplateSizeInBytes); - } - - if(destTmpltHost != null) { - start(); - String sourceChecksum = this.templateMgr.getChecksum(srcTmpltHost.getHostId(), srcTmpltHost.getInstallPath()); - DownloadCommand dcmd = - new DownloadCommand(destServer.getStorageUrl(), url, template, TemplateConstants.DEFAULT_HTTP_AUTH_USER, _copyAuthPasswd, maxTemplateSizeInBytes); - if (downloadJobExists) { - dcmd = new DownloadProgressCommand(dcmd, destTmpltHost.getJobId(), RequestType.GET_OR_RESTART); - } + if (vmTemplateStore != null) { + start(); + VirtualMachineTemplate tmpl = this._templateDao.findById(template.getId()); + DownloadCommand dcmd = new DownloadCommand((TemplateObjectTO)(template.getTO()), maxTemplateSizeInBytes); dcmd.setProxy(getHttpProxy()); - dcmd.setChecksum(sourceChecksum); // We need to set the checksum as the source template might be a compressed url and have cksum for compressed image. Bug #10775 - HostVO ssAhost = _ssvmMgr.pickSsvmHost(destServer); - if( ssAhost == null ) { - s_logger.warn("There is no secondary storage VM for secondary storage host " + destServer.getName()); - return false; - } - DownloadListener dl = new DownloadListener(ssAhost, destServer, template, _timer, _vmTemplateHostDao, destTmpltHost.getId(), this, dcmd, _templateDao, _resourceLimitMgr, _alertMgr, _accountMgr); if (downloadJobExists) { - dl.setCurrState(destTmpltHost.getDownloadState()); + dcmd = new DownloadProgressCommand(dcmd, vmTemplateStore.getJobId(), RequestType.GET_OR_RESTART); } - DownloadListener old = null; - synchronized (_listenerMap) { - old = _listenerMap.put(destTmpltHost, dl); - } - if( old != null ) { - old.abandon(); - } - - try { - send(ssAhost.getId(), dcmd, dl); - return true; - } catch (AgentUnavailableException e) { - s_logger.warn("Unable to start /resume COPY of template " + template.getUniqueName() + " to " + destServer.getName(), e); - dl.setDisconnected(); - dl.scheduleStatusCheck(RequestType.GET_OR_RESTART); - e.printStackTrace(); + if (vmTemplateStore.isCopy()) { + dcmd.setCreds(TemplateConstants.DEFAULT_HTTP_AUTH_USER, _copyAuthPasswd); + } + EndPoint ep = _epSelector.select(template); + if (ep == null) { + s_logger.warn("There is no secondary storage VM for downloading template to image store " + store.getName()); + return; + } + DownloadListener dl = new DownloadListener(ep, store, template, _timer, this, dcmd, + callback); + ComponentContext.inject(dl); // initialize those auto-wired field in download listener. + if (downloadJobExists) { + // due to handling existing download job issues, we still keep + // downloadState in template_store_ref to avoid big change in + // DownloadListener to use + // new ObjectInDataStore.State transition. TODO: fix this later + // to be able to remove downloadState from template_store_ref. + dl.setCurrState(vmTemplateStore.getDownloadState()); } - } - - return false; - } - - private String generateCopyUrl(String ipAddress, String dir, String path){ - String hostname = ipAddress; - String scheme = "http"; - if (_sslCopy) { - hostname = ipAddress.replace(".", "-"); - scheme = "https"; - - // Code for putting in custom certificates. - if(_ssvmUrlDomain != null && _ssvmUrlDomain.length() > 0){ - hostname = hostname + "." + _ssvmUrlDomain; - }else{ - hostname = hostname + ".realhostip.com"; - } - } - return scheme + "://" + hostname + "/copy/SecStorage/" + dir + "/" + path; - } - - private String generateCopyUrl(HostVO sourceServer, VMTemplateHostVO srcTmpltHost) { - List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, sourceServer.getDataCenterId(), State.Running); - if (ssVms.size() > 0) { - SecondaryStorageVmVO ssVm = ssVms.get(0); - if (ssVm.getPublicIpAddress() == null) { - s_logger.warn("A running secondary storage vm has a null public ip?"); - return null; - } - return generateCopyUrl(ssVm.getPublicIpAddress(), sourceServer.getParent(), srcTmpltHost.getInstallPath()); - } - - VMTemplateVO tmplt = _templateDao.findById(srcTmpltHost.getTemplateId()); - HypervisorType hyperType = tmplt.getHypervisorType(); - /*No secondary storage vm yet*/ - if (hyperType != null && hyperType == HypervisorType.KVM) { - return "file://" + sourceServer.getParent() + "/" + srcTmpltHost.getInstallPath(); - } - return null; - } - - private void downloadTemplateToStorage(VMTemplateVO template, HostVO sserver) { - boolean downloadJobExists = false; - VMTemplateHostVO vmTemplateHost = null; - - vmTemplateHost = _vmTemplateHostDao.findByHostTemplate(sserver.getId(), template.getId()); - if (vmTemplateHost == null) { - vmTemplateHost = new VMTemplateHostVO(sserver.getId(), template.getId(), new Date(), 0, VMTemplateStorageResourceAssoc.Status.NOT_DOWNLOADED, null, null, "jobid0000", null, template.getUrl()); - _vmTemplateHostDao.persist(vmTemplateHost); - } else if ((vmTemplateHost.getJobId() != null) && (vmTemplateHost.getJobId().length() > 2)) { - downloadJobExists = true; - } - - Long maxTemplateSizeInBytes = getMaxTemplateSizeInBytes(); - String secUrl = sserver.getStorageUrl(); - if(vmTemplateHost != null) { - start(); - DownloadCommand dcmd = - new DownloadCommand(secUrl, template, maxTemplateSizeInBytes); - if (downloadJobExists) { - dcmd = new DownloadProgressCommand(dcmd, vmTemplateHost.getJobId(), RequestType.GET_OR_RESTART); - } - dcmd.setProxy(getHttpProxy()); - if (vmTemplateHost.isCopy()) { - dcmd.setCreds(TemplateConstants.DEFAULT_HTTP_AUTH_USER, _copyAuthPasswd); - } - HostVO ssAhost = _ssvmMgr.pickSsvmHost(sserver); - if( ssAhost == null ) { - s_logger.warn("There is no secondary storage VM for secondary storage host " + sserver.getName()); - return; - } - DownloadListener dl = new DownloadListener(ssAhost, sserver, template, _timer, _vmTemplateHostDao, vmTemplateHost.getId(), this, dcmd, _templateDao, _resourceLimitMgr, _alertMgr, _accountMgr); - if (downloadJobExists) { - dl.setCurrState(vmTemplateHost.getDownloadState()); - } DownloadListener old = null; - synchronized (_listenerMap) { - old = _listenerMap.put(vmTemplateHost, dl); + synchronized (_listenerTemplateMap) { + old = _listenerTemplateMap.put(vmTemplateStore, dl); } - if( old != null ) { + if (old != null) { old.abandon(); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index a1a4c90,02e3428..7e1e3d4 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@@ -537,7 -574,8 +537,7 @@@ public class SnapshotManagerImpl extend String intervalTypeStr = cmd.getIntervalType(); String zoneType = cmd.getZoneType(); Map<String, String> tags = cmd.getTags(); - + Long zoneId = cmd.getZoneId(); - Account caller = UserContext.current().getCaller(); List<Long> permittedAccounts = new ArrayList<Long>(); @@@ -604,9 -641,13 +605,13 @@@ } if(zoneType != null) { - sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType); + sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType); } + if (zoneId != null) { + sc.setParameters("dataCenterId", zoneId); + } + if (name != null) { sc.setParameters("name", "%" + name + "%"); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/storage/upload/UploadMonitorImpl.java ---------------------------------------------------------------------- diff --cc server/src/com/cloud/storage/upload/UploadMonitorImpl.java index 7d75599,31f3e74..d46db0c --- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java +++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java @@@ -330,26 -330,32 +331,34 @@@ public class UploadMonitorImpl extends String scheme = "http"; if (_sslCopy) { hostname = ipAddress.replace(".", "-"); - hostname = hostname + ".realhostip.com"; scheme = "https"; + + // Code for putting in custom certificates. + if(_ssvmUrlDomain != null && _ssvmUrlDomain.length() > 0){ + hostname = hostname + "." + _ssvmUrlDomain; + }else{ + hostname = hostname + ".realhostip.com"; + } } - return scheme + "://" + hostname + "/userdata/" + uuid; + return scheme + "://" + hostname + "/userdata/" + uuid; } - - public void send(Long hostId, Command cmd, Listener listener) throws AgentUnavailableException { - _agentMgr.send(hostId, new Commands(cmd), listener); - } + @Override public boolean configure(String name, Map<String, Object> params) throws ConfigurationException { final Map<String, String> configs = _configDao.getConfiguration("ManagementServer", params); _sslCopy = Boolean.parseBoolean(configs.get("secstorage.encrypt.copy")); - + + String cert = configs.get("secstorage.secure.copy.cert"); + if ("realhostip.com".equalsIgnoreCase(cert)) { + s_logger.warn("Only realhostip.com ssl cert is supported, ignoring self-signed and other certs"); + } + + _ssvmUrlDomain = configs.get("secstorage.ssl.cert.domain"); + _agentMgr.registerForHostEvents(new UploadListener(this), true, false, false); String cleanupInterval = configs.get("extract.url.cleanup.interval"); _cleanupInterval = NumbersUtil.parseInt(cleanupInterval, 7200); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/vm/UserVmManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/server/src/com/cloud/vm/VirtualMachineManagerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/ui/scripts/system.js ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f41c800d/ui/scripts/zoneWizard.js ----------------------------------------------------------------------
