mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Merge remote-tracking branch 'origin/4.13'
This commit is contained in:
commit
424f10cc77
@ -1052,6 +1052,10 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
DataObject templateOnStore = destStore.create(tmplForCopy);
|
||||
templateOnStore.processEvent(Event.CreateOnlyRequested);
|
||||
|
||||
if (templateOnStore instanceof TemplateObject) {
|
||||
((TemplateObject)templateOnStore).getImage().setChecksum(null);
|
||||
} // else we don't know what to do.
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Invoke datastore driver createAsync to create template on destination store");
|
||||
}
|
||||
|
||||
@ -53,29 +53,21 @@ import com.cloud.configuration.Config;
|
||||
import com.cloud.storage.RegisterVolumePayload;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.dao.VMTemplateDao;
|
||||
import com.cloud.storage.dao.VolumeDao;
|
||||
import com.cloud.storage.template.TemplateConstants;
|
||||
import com.cloud.storage.upload.UploadListener;
|
||||
import com.cloud.template.VirtualMachineTemplate;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@Component
|
||||
public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor {
|
||||
static final Logger s_logger = Logger.getLogger(DownloadMonitorImpl.class);
|
||||
static final Logger LOGGER = Logger.getLogger(DownloadMonitorImpl.class);
|
||||
|
||||
@Inject
|
||||
private TemplateDataStoreDao _vmTemplateStoreDao;
|
||||
@Inject
|
||||
private VolumeDao _volumeDao;
|
||||
@Inject
|
||||
private VolumeDataStoreDao _volumeStoreDao;
|
||||
@Inject
|
||||
private final VMTemplateDao _templateDao = null;
|
||||
@Inject
|
||||
private AgentManager _agentMgr;
|
||||
@Inject
|
||||
private ConfigurationDao _configDao;
|
||||
@ -94,7 +86,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
|
||||
String cert = configs.get("secstorage.ssl.cert.domain");
|
||||
if (!"realhostip.com".equalsIgnoreCase(cert)) {
|
||||
s_logger.warn("Only realhostip.com ssl cert is supported, ignoring self-signed and other certs");
|
||||
LOGGER.warn("Only realhostip.com ssl cert is supported, ignoring self-signed and other certs");
|
||||
}
|
||||
|
||||
_copyAuthPasswd = configs.get("secstorage.copy.password");
|
||||
@ -125,7 +117,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
|
||||
private void initiateTemplateDownload(DataObject template, AsyncCompletionCallback<DownloadAnswer> callback) {
|
||||
boolean downloadJobExists = false;
|
||||
TemplateDataStoreVO vmTemplateStore = null;
|
||||
TemplateDataStoreVO vmTemplateStore;
|
||||
DataStore store = template.getDataStore();
|
||||
|
||||
vmTemplateStore = _vmTemplateStoreDao.findByStoreTemplate(store.getId(), template.getId());
|
||||
@ -141,7 +133,6 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
Long maxTemplateSizeInBytes = getMaxTemplateSizeInBytes();
|
||||
if (vmTemplateStore != null) {
|
||||
start();
|
||||
VirtualMachineTemplate tmpl = _templateDao.findById(template.getId());
|
||||
DownloadCommand dcmd = new DownloadCommand((TemplateObjectTO)(template.getTO()), maxTemplateSizeInBytes);
|
||||
dcmd.setProxy(getHttpProxy());
|
||||
if (downloadJobExists) {
|
||||
@ -153,7 +144,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
EndPoint ep = _epSelector.select(template);
|
||||
if (ep == null) {
|
||||
String errMsg = "There is no secondary storage VM for downloading template to image store " + store.getName();
|
||||
s_logger.warn(errMsg);
|
||||
LOGGER.warn(errMsg);
|
||||
throw new CloudRuntimeException(errMsg);
|
||||
}
|
||||
DownloadListener dl = new DownloadListener(ep, store, template, _timer, this, dcmd, callback);
|
||||
@ -164,14 +155,14 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
// DownloadListener to use
|
||||
// new ObjectInDataStore.State transition. TODO: fix this later
|
||||
// to be able to remove downloadState from template_store_ref.
|
||||
s_logger.info("found existing download job");
|
||||
LOGGER.info("found existing download job");
|
||||
dl.setCurrState(vmTemplateStore.getDownloadState());
|
||||
}
|
||||
|
||||
try {
|
||||
ep.sendMessageAsync(dcmd, new UploadListener.Callback(ep.getId(), dl));
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Unable to start /resume download of template " + template.getId() + " to " + store.getName(), e);
|
||||
LOGGER.warn("Unable to start /resume download of template " + template.getId() + " to " + store.getName(), e);
|
||||
dl.setDisconnected();
|
||||
dl.scheduleStatusCheck(RequestType.GET_OR_RESTART);
|
||||
}
|
||||
@ -187,12 +178,12 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
if (template.getUri() != null) {
|
||||
initiateTemplateDownload(template, callback);
|
||||
} else {
|
||||
s_logger.info("Template url is null, cannot download");
|
||||
LOGGER.info("Template url is null, cannot download");
|
||||
DownloadAnswer ans = new DownloadAnswer("Template url is null", Status.UNKNOWN);
|
||||
callback.complete(ans);
|
||||
}
|
||||
} else {
|
||||
s_logger.info("Template download is already in progress or already downloaded");
|
||||
LOGGER.info("Template download is already in progress or already downloaded");
|
||||
DownloadAnswer ans =
|
||||
new DownloadAnswer("Template download is already in progress or already downloaded", Status.UNKNOWN);
|
||||
callback.complete(ans);
|
||||
@ -203,7 +194,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
@Override
|
||||
public void downloadVolumeToStorage(DataObject volume, AsyncCompletionCallback<DownloadAnswer> callback) {
|
||||
boolean downloadJobExists = false;
|
||||
VolumeDataStoreVO volumeHost = null;
|
||||
VolumeDataStoreVO volumeHost;
|
||||
DataStore store = volume.getDataStore();
|
||||
VolumeInfo volInfo = (VolumeInfo)volume;
|
||||
RegisterVolumePayload payload = (RegisterVolumePayload)volInfo.getpayload();
|
||||
@ -214,7 +205,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
volumeHost = _volumeStoreDao.findByStoreVolume(store.getId(), volume.getId());
|
||||
if (volumeHost == null) {
|
||||
volumeHost = new VolumeDataStoreVO(store.getId(), volume.getId(), new Date(), 0, Status.NOT_DOWNLOADED, null, null, "jobid0000", null, url, checkSum);
|
||||
_volumeStoreDao.persist(volumeHost);
|
||||
volumeHost = _volumeStoreDao.persist(volumeHost);
|
||||
} else if ((volumeHost.getJobId() != null) && (volumeHost.getJobId().length() > 2)) {
|
||||
downloadJobExists = true;
|
||||
} else {
|
||||
@ -225,35 +216,32 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
}
|
||||
|
||||
Long maxVolumeSizeInBytes = getMaxVolumeSizeInBytes();
|
||||
if (volumeHost != null) {
|
||||
start();
|
||||
Volume vol = _volumeDao.findById(volume.getId());
|
||||
DownloadCommand dcmd = new DownloadCommand((VolumeObjectTO)(volume.getTO()), maxVolumeSizeInBytes, checkSum, url, format);
|
||||
dcmd.setProxy(getHttpProxy());
|
||||
if (downloadJobExists) {
|
||||
dcmd = new DownloadProgressCommand(dcmd, volumeHost.getJobId(), RequestType.GET_OR_RESTART);
|
||||
dcmd.setResourceType(ResourceType.VOLUME);
|
||||
}
|
||||
start();
|
||||
DownloadCommand dcmd = new DownloadCommand((VolumeObjectTO)(volume.getTO()), maxVolumeSizeInBytes, checkSum, url, format);
|
||||
dcmd.setProxy(getHttpProxy());
|
||||
if (downloadJobExists) {
|
||||
dcmd = new DownloadProgressCommand(dcmd, volumeHost.getJobId(), RequestType.GET_OR_RESTART);
|
||||
dcmd.setResourceType(ResourceType.VOLUME);
|
||||
}
|
||||
|
||||
EndPoint ep = _epSelector.select(volume);
|
||||
if (ep == null) {
|
||||
s_logger.warn("There is no secondary storage VM for image store " + store.getName());
|
||||
return;
|
||||
}
|
||||
DownloadListener dl = new DownloadListener(ep, store, volume, _timer, this, dcmd, callback);
|
||||
ComponentContext.inject(dl); // auto-wired those injected fields in DownloadListener
|
||||
EndPoint ep = _epSelector.select(volume);
|
||||
if (ep == null) {
|
||||
LOGGER.warn("There is no secondary storage VM for image store " + store.getName());
|
||||
return;
|
||||
}
|
||||
DownloadListener dl = new DownloadListener(ep, store, volume, _timer, this, dcmd, callback);
|
||||
ComponentContext.inject(dl); // auto-wired those injected fields in DownloadListener
|
||||
|
||||
if (downloadJobExists) {
|
||||
dl.setCurrState(volumeHost.getDownloadState());
|
||||
}
|
||||
if (downloadJobExists) {
|
||||
dl.setCurrState(volumeHost.getDownloadState());
|
||||
}
|
||||
|
||||
try {
|
||||
ep.sendMessageAsync(dcmd, new UploadListener.Callback(ep.getId(), dl));
|
||||
} catch (Exception e) {
|
||||
s_logger.warn("Unable to start /resume download of volume " + volume.getId() + " to " + store.getName(), e);
|
||||
dl.setDisconnected();
|
||||
dl.scheduleStatusCheck(RequestType.GET_OR_RESTART);
|
||||
}
|
||||
try {
|
||||
ep.sendMessageAsync(dcmd, new UploadListener.Callback(ep.getId(), dl));
|
||||
} catch (Exception e) {
|
||||
LOGGER.warn("Unable to start /resume download of volume " + volume.getId() + " to " + store.getName(), e);
|
||||
dl.setDisconnected();
|
||||
dl.scheduleStatusCheck(RequestType.GET_OR_RESTART);
|
||||
}
|
||||
}
|
||||
|
||||
@ -279,8 +267,7 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
|
||||
}
|
||||
try {
|
||||
URI uri = new URI(_proxy);
|
||||
Proxy prx = new Proxy(uri);
|
||||
return prx;
|
||||
return new Proxy(uri);
|
||||
} catch (URISyntaxException e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -927,8 +927,6 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ((destZoneIds != null) && (destZoneIds.size() > failedZones.size())){
|
||||
|
||||
@ -231,7 +231,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
}
|
||||
}
|
||||
|
||||
public static final Logger s_logger = Logger.getLogger(DownloadManagerImpl.class);
|
||||
public static final Logger LOGGER = Logger.getLogger(DownloadManagerImpl.class);
|
||||
private String _templateDir;
|
||||
private String _volumeDir;
|
||||
private String createTmpltScr;
|
||||
@ -264,12 +264,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
public void setDownloadStatus(String jobId, Status status) {
|
||||
DownloadJob dj = jobs.get(jobId);
|
||||
if (dj == null) {
|
||||
s_logger.warn("setDownloadStatus for jobId: " + jobId + ", status=" + status + " no job found");
|
||||
LOGGER.warn("setDownloadStatus for jobId: " + jobId + ", status=" + status + " no job found");
|
||||
return;
|
||||
}
|
||||
TemplateDownloader td = dj.getTemplateDownloader();
|
||||
s_logger.info("Download Completion for jobId: " + jobId + ", status=" + status);
|
||||
s_logger.info("local: " + td.getDownloadLocalPath() + ", bytes=" + td.getDownloadedBytes() + ", error=" + td.getDownloadError() + ", pct=" +
|
||||
LOGGER.info("Download Completion for jobId: " + jobId + ", status=" + status);
|
||||
LOGGER.info("local: " + td.getDownloadLocalPath() + ", bytes=" + td.getDownloadedBytes() + ", error=" + td.getDownloadError() + ", pct=" +
|
||||
td.getDownloadPercent());
|
||||
|
||||
switch (status) {
|
||||
@ -282,7 +282,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
case UNKNOWN:
|
||||
return;
|
||||
case IN_PROGRESS:
|
||||
s_logger.info("Resuming jobId: " + jobId + ", status=" + status);
|
||||
LOGGER.info("Resuming jobId: " + jobId + ", status=" + status);
|
||||
td.setResume(true);
|
||||
threadPool.execute(td);
|
||||
break;
|
||||
@ -297,7 +297,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
td.setDownloadError("Download success, starting install ");
|
||||
String result = postRemoteDownload(jobId);
|
||||
if (result != null) {
|
||||
s_logger.error("Failed post download install: " + result);
|
||||
LOGGER.error("Failed post download install: " + result);
|
||||
td.setStatus(Status.UNRECOVERABLE_ERROR);
|
||||
td.setDownloadError("Failed post download install: " + result);
|
||||
((S3TemplateDownloader) td).cleanupAfterError();
|
||||
@ -312,7 +312,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
td.setDownloadError("Download success, starting install ");
|
||||
String result = postLocalDownload(jobId);
|
||||
if (result != null) {
|
||||
s_logger.error("Failed post download script: " + result);
|
||||
LOGGER.error("Failed post download script: " + result);
|
||||
td.setStatus(Status.UNRECOVERABLE_ERROR);
|
||||
td.setDownloadError("Failed post download script: " + result);
|
||||
} else {
|
||||
@ -371,6 +371,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
* Post local download activity (install and cleanup). Executed in context of
|
||||
* downloader thread
|
||||
*
|
||||
* @return an error message describing why download failed or {code}null{code} on success
|
||||
* @throws IOException
|
||||
*/
|
||||
private String postLocalDownload(String jobId) {
|
||||
@ -384,29 +385,58 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
ResourceType resourceType = dnld.getResourceType();
|
||||
|
||||
File originalTemplate = new File(td.getDownloadLocalPath());
|
||||
ChecksumValue oldValue = new ChecksumValue(dnld.getChecksum());
|
||||
ChecksumValue newValue = null;
|
||||
if(StringUtils.isBlank(dnld.getChecksum())) {
|
||||
if (LOGGER.isInfoEnabled()) {
|
||||
LOGGER.info(String.format("No checksum available for '%s'", originalTemplate.getName()));
|
||||
}
|
||||
}
|
||||
// check or create checksum
|
||||
String checksumErrorMessage = checkOrCreateTheChecksum(dnld, originalTemplate);
|
||||
if (checksumErrorMessage != null) {
|
||||
return checksumErrorMessage;
|
||||
}
|
||||
|
||||
String result;
|
||||
String extension = dnld.getFormat().getFileExtension();
|
||||
String templateName = makeTemplatename(jobId, extension);
|
||||
String templateFilename = templateName + "." + extension;
|
||||
|
||||
result = executeCreateScript(dnld, td, resourcePath, finalResourcePath, resourceType, templateFilename);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Set permissions for the downloaded template
|
||||
File downloadedTemplate = new File(resourcePath + "/" + templateFilename);
|
||||
|
||||
_storage.setWorldReadableAndWriteable(downloadedTemplate);
|
||||
setPermissionsForTheDownloadedTemplate(dnld, resourcePath, resourceType);
|
||||
|
||||
TemplateLocation loc = new TemplateLocation(_storage, resourcePath);
|
||||
try {
|
||||
newValue = computeCheckSum(oldValue.getAlgorithm(), originalTemplate);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
return "checksum algorithm not recognised: " + oldValue.getAlgorithm();
|
||||
}
|
||||
if(StringUtils.isNotBlank(dnld.getChecksum()) && ! oldValue.equals(newValue)) {
|
||||
return "checksum \"" + newValue +"\" didn't match the given value, \"" + oldValue + "\"";
|
||||
}
|
||||
String checksum = newValue.getChecksum();
|
||||
if (checksum == null) {
|
||||
s_logger.warn("Something wrong happened when try to calculate the checksum of downloaded template!");
|
||||
loc.create(dnld.getId(), true, dnld.getTmpltName());
|
||||
} catch (IOException e) {
|
||||
LOGGER.warn("Something is wrong with template location " + resourcePath, e);
|
||||
loc.purge();
|
||||
return "Unable to download due to " + e.getMessage();
|
||||
}
|
||||
|
||||
dnld.setCheckSum(checksum);
|
||||
result = postProcessAfterDownloadComplete(dnld, resourcePath, templateName, loc);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private String executeCreateScript(DownloadJob dnld, TemplateDownloader td, String resourcePath, String finalResourcePath, ResourceType resourceType, String templateFilename) {
|
||||
String result;
|
||||
int imgSizeGigs = (int)Math.ceil(_storage.getSize(td.getDownloadLocalPath()) * 1.0d / (1024 * 1024 * 1024));
|
||||
imgSizeGigs++; // add one just in case
|
||||
long timeout = (long)imgSizeGigs * installTimeoutPerGig;
|
||||
Script scr = null;
|
||||
String script = resourceType == ResourceType.TEMPLATE ? createTmpltScr : createVolScr;
|
||||
scr = new Script(script, timeout, s_logger);
|
||||
scr = new Script(script, timeout, LOGGER);
|
||||
scr.add("-s", Integer.toString(imgSizeGigs));
|
||||
scr.add("-S", Long.toString(td.getMaxTemplateSizeInBytes()));
|
||||
if (dnld.getDescription() != null && dnld.getDescription().length() > 1) {
|
||||
@ -416,35 +446,30 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
scr.add("-h");
|
||||
}
|
||||
|
||||
// add options common to ISO and template
|
||||
String extension = dnld.getFormat().getFileExtension();
|
||||
String templateName = "";
|
||||
if (extension.equals("iso")) {
|
||||
templateName = jobs.get(jobId).getTmpltName().trim().replace(" ", "_");
|
||||
} else {
|
||||
templateName = java.util.UUID.nameUUIDFromBytes((jobs.get(jobId).getTmpltName() + System.currentTimeMillis()).getBytes(StringUtils.getPreferredCharset())).toString();
|
||||
}
|
||||
|
||||
// run script to mv the temporary template file to the final template
|
||||
// file
|
||||
String templateFilename = templateName + "." + extension;
|
||||
dnld.setTmpltPath(finalResourcePath + "/" + templateFilename);
|
||||
scr.add("-n", templateFilename);
|
||||
|
||||
scr.add("-t", resourcePath);
|
||||
scr.add("-f", td.getDownloadLocalPath()); // this is the temporary template file downloaded
|
||||
scr.add("-u"); // cleanup
|
||||
String result;
|
||||
result = scr.execute();
|
||||
return result;
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
return result;
|
||||
private String makeTemplatename(String jobId, String extension) {
|
||||
// add options common to ISO and template
|
||||
String templateName = "";
|
||||
if (extension.equals("iso")) {
|
||||
templateName = jobs.get(jobId).getTmpltName().trim().replace(" ", "_");
|
||||
} else {
|
||||
templateName = UUID.nameUUIDFromBytes((jobs.get(jobId).getTmpltName() + System.currentTimeMillis()).getBytes(StringUtils.getPreferredCharset())).toString();
|
||||
}
|
||||
return templateName;
|
||||
}
|
||||
|
||||
// Set permissions for the downloaded template
|
||||
File downloadedTemplate = new File(resourcePath + "/" + templateFilename);
|
||||
_storage.setWorldReadableAndWriteable(downloadedTemplate);
|
||||
|
||||
private void setPermissionsForTheDownloadedTemplate(DownloadJob dnld, String resourcePath, ResourceType resourceType) {
|
||||
// Set permissions for template/volume.properties
|
||||
String propertiesFile = resourcePath;
|
||||
if (resourceType == ResourceType.TEMPLATE) {
|
||||
@ -454,16 +479,31 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
}
|
||||
File templateProperties = new File(propertiesFile);
|
||||
_storage.setWorldReadableAndWriteable(templateProperties);
|
||||
}
|
||||
|
||||
TemplateLocation loc = new TemplateLocation(_storage, resourcePath);
|
||||
private String checkOrCreateTheChecksum(DownloadJob dnld, File targetFile) {
|
||||
ChecksumValue oldValue = new ChecksumValue(dnld.getChecksum());
|
||||
ChecksumValue newValue = null;
|
||||
try {
|
||||
loc.create(dnld.getId(), true, dnld.getTmpltName());
|
||||
} catch (IOException e) {
|
||||
s_logger.warn("Something is wrong with template location " + resourcePath, e);
|
||||
loc.purge();
|
||||
return "Unable to download due to " + e.getMessage();
|
||||
newValue = computeCheckSum(oldValue.getAlgorithm(), targetFile);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug(String.format("computed checksum: %s", newValue));
|
||||
}
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
return "checksum algorithm not recognised: " + oldValue.getAlgorithm();
|
||||
}
|
||||
if (StringUtils.isNotBlank(dnld.getChecksum()) && !oldValue.equals(newValue)) {
|
||||
return "checksum \"" + newValue + "\" didn't match the given value, \"" + oldValue + "\"";
|
||||
}
|
||||
String checksum = newValue.toString();
|
||||
if (checksum == null) {
|
||||
LOGGER.warn("Something wrong happened when try to calculate the checksum of downloaded template!");
|
||||
}
|
||||
dnld.setCheckSum(checksum);
|
||||
return null;
|
||||
}
|
||||
|
||||
private String postProcessAfterDownloadComplete(DownloadJob dnld, String resourcePath, String templateName, TemplateLocation loc) {
|
||||
Iterator<Processor> en = _processors.values().iterator();
|
||||
while (en.hasNext()) {
|
||||
Processor processor = en.next();
|
||||
@ -472,7 +512,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
try {
|
||||
info = processor.process(resourcePath, null, templateName, this._processTimeout);
|
||||
} catch (InternalErrorException e) {
|
||||
s_logger.error("Template process exception ", e);
|
||||
LOGGER.error("Template process exception ", e);
|
||||
return e.toString();
|
||||
}
|
||||
if (info != null) {
|
||||
@ -490,7 +530,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
}
|
||||
|
||||
if (!loc.save()) {
|
||||
s_logger.warn("Cleaning up because we're unable to save the formats");
|
||||
LOGGER.warn("Cleaning up because we're unable to save the formats");
|
||||
loc.purge();
|
||||
}
|
||||
|
||||
@ -549,7 +589,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
try {
|
||||
|
||||
if (!_storage.mkdirs(tmpDir)) {
|
||||
s_logger.warn("Unable to create " + tmpDir);
|
||||
LOGGER.warn("Unable to create " + tmpDir);
|
||||
return "Unable to create " + tmpDir;
|
||||
}
|
||||
// TO DO - define constant for volume properties.
|
||||
@ -558,12 +598,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
"volume.properties");
|
||||
if (file.exists()) {
|
||||
if(! file.delete()) {
|
||||
s_logger.warn("Deletion of file '" + file.getAbsolutePath() + "' failed.");
|
||||
LOGGER.warn("Deletion of file '" + file.getAbsolutePath() + "' failed.");
|
||||
}
|
||||
}
|
||||
|
||||
if (!file.createNewFile()) {
|
||||
s_logger.warn("Unable to create new file: " + file.getAbsolutePath());
|
||||
LOGGER.warn("Unable to create new file: " + file.getAbsolutePath());
|
||||
return "Unable to create new file: " + file.getAbsolutePath();
|
||||
}
|
||||
|
||||
@ -605,7 +645,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
|
||||
return jobId;
|
||||
} catch (IOException e) {
|
||||
s_logger.warn("Unable to download to " + tmpDir, e);
|
||||
LOGGER.warn("Unable to download to " + tmpDir, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -808,24 +848,24 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
private List<String> listVolumes(String rootdir) {
|
||||
List<String> result = new ArrayList<String>();
|
||||
|
||||
Script script = new Script(listVolScr, s_logger);
|
||||
Script script = new Script(listVolScr, LOGGER);
|
||||
script.add("-r", rootdir);
|
||||
ZfsPathParser zpp = new ZfsPathParser(rootdir);
|
||||
script.execute(zpp);
|
||||
result.addAll(zpp.getPaths());
|
||||
s_logger.info("found " + zpp.getPaths().size() + " volumes" + zpp.getPaths());
|
||||
LOGGER.info("found " + zpp.getPaths().size() + " volumes" + zpp.getPaths());
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<String> listTemplates(String rootdir) {
|
||||
List<String> result = new ArrayList<String>();
|
||||
|
||||
Script script = new Script(listTmpltScr, s_logger);
|
||||
Script script = new Script(listTmpltScr, LOGGER);
|
||||
script.add("-r", rootdir);
|
||||
ZfsPathParser zpp = new ZfsPathParser(rootdir);
|
||||
script.execute(zpp);
|
||||
result.addAll(zpp.getPaths());
|
||||
s_logger.info("found " + zpp.getPaths().size() + " templates" + zpp.getPaths());
|
||||
LOGGER.info("found " + zpp.getPaths().size() + " templates" + zpp.getPaths());
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -844,13 +884,13 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
TemplateLocation loc = new TemplateLocation(_storage, path);
|
||||
try {
|
||||
if (!loc.load()) {
|
||||
s_logger.warn("Post download installation was not completed for " + path);
|
||||
LOGGER.warn("Post download installation was not completed for " + path);
|
||||
// loc.purge();
|
||||
_storage.cleanup(path, templateDir);
|
||||
continue;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
s_logger.warn("Unable to load template location " + path, e);
|
||||
LOGGER.warn("Unable to load template location " + path, e);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -865,12 +905,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
loc.updateVirtualSize(vSize);
|
||||
loc.save();
|
||||
} catch (Exception e) {
|
||||
s_logger.error("Unable to get the virtual size of the template: " + tInfo.getInstallPath() + " due to " + e.getMessage());
|
||||
LOGGER.error("Unable to get the virtual size of the template: " + tInfo.getInstallPath() + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
result.put(tInfo.getTemplateName(), tInfo);
|
||||
s_logger.debug("Added template name: " + tInfo.getTemplateName() + ", path: " + tmplt);
|
||||
LOGGER.debug("Added template name: " + tInfo.getTemplateName() + ", path: " + tmplt);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -890,13 +930,13 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
TemplateLocation loc = new TemplateLocation(_storage, path);
|
||||
try {
|
||||
if (!loc.load()) {
|
||||
s_logger.warn("Post download installation was not completed for " + path);
|
||||
LOGGER.warn("Post download installation was not completed for " + path);
|
||||
// loc.purge();
|
||||
_storage.cleanup(path, volumeDir);
|
||||
continue;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
s_logger.warn("Unable to load volume location " + path, e);
|
||||
LOGGER.warn("Unable to load volume location " + path, e);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -911,12 +951,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
loc.updateVirtualSize(vSize);
|
||||
loc.save();
|
||||
} catch (Exception e) {
|
||||
s_logger.error("Unable to get the virtual size of the volume: " + vInfo.getInstallPath() + " due to " + e.getMessage());
|
||||
LOGGER.error("Unable to get the virtual size of the volume: " + vInfo.getInstallPath() + " due to " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
result.put(vInfo.getId(), vInfo);
|
||||
s_logger.debug("Added volume name: " + vInfo.getTemplateName() + ", path: " + vol);
|
||||
LOGGER.debug("Added volume name: " + vInfo.getTemplateName() + ", path: " + vol);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -980,7 +1020,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
|
||||
String inSystemVM = (String)params.get("secondary.storage.vm");
|
||||
if (inSystemVM != null && "true".equalsIgnoreCase(inSystemVM)) {
|
||||
s_logger.info("DownloadManager: starting additional services since we are inside system vm");
|
||||
LOGGER.info("DownloadManager: starting additional services since we are inside system vm");
|
||||
_nfsVersion = NfsSecondaryStorageResource.retrieveNfsVersionFromParams(params);
|
||||
startAdditionalServices();
|
||||
blockOutgoingOnPrivate();
|
||||
@ -1001,25 +1041,25 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
if (listTmpltScr == null) {
|
||||
throw new ConfigurationException("Unable to find the listvmtmplt.sh");
|
||||
}
|
||||
s_logger.info("listvmtmplt.sh found in " + listTmpltScr);
|
||||
LOGGER.info("listvmtmplt.sh found in " + listTmpltScr);
|
||||
|
||||
createTmpltScr = Script.findScript(scriptsDir, "createtmplt.sh");
|
||||
if (createTmpltScr == null) {
|
||||
throw new ConfigurationException("Unable to find createtmplt.sh");
|
||||
}
|
||||
s_logger.info("createtmplt.sh found in " + createTmpltScr);
|
||||
LOGGER.info("createtmplt.sh found in " + createTmpltScr);
|
||||
|
||||
listVolScr = Script.findScript(scriptsDir, "listvolume.sh");
|
||||
if (listVolScr == null) {
|
||||
throw new ConfigurationException("Unable to find the listvolume.sh");
|
||||
}
|
||||
s_logger.info("listvolume.sh found in " + listVolScr);
|
||||
LOGGER.info("listvolume.sh found in " + listVolScr);
|
||||
|
||||
createVolScr = Script.findScript(scriptsDir, "createvolume.sh");
|
||||
if (createVolScr == null) {
|
||||
throw new ConfigurationException("Unable to find createvolume.sh");
|
||||
}
|
||||
s_logger.info("createvolume.sh found in " + createVolScr);
|
||||
LOGGER.info("createvolume.sh found in " + createVolScr);
|
||||
|
||||
_processors = new HashMap<String, Processor>();
|
||||
|
||||
@ -1063,7 +1103,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
}
|
||||
|
||||
private void blockOutgoingOnPrivate() {
|
||||
Script command = new Script("/bin/bash", s_logger);
|
||||
Script command = new Script("/bin/bash", LOGGER);
|
||||
String intf = "eth1";
|
||||
command.add("-c");
|
||||
command.add("iptables -A OUTPUT -o " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "80" + " -j REJECT;" + "iptables -A OUTPUT -o " + intf +
|
||||
@ -1071,7 +1111,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
|
||||
String result = command.execute();
|
||||
if (result != null) {
|
||||
s_logger.warn("Error in blocking outgoing to port 80/443 err=" + result);
|
||||
LOGGER.warn("Error in blocking outgoing to port 80/443 err=" + result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1092,37 +1132,37 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
}
|
||||
|
||||
private void startAdditionalServices() {
|
||||
Script command = new Script("/bin/systemctl", s_logger);
|
||||
Script command = new Script("/bin/systemctl", LOGGER);
|
||||
command.add("stop");
|
||||
command.add("apache2");
|
||||
String result = command.execute();
|
||||
if (result != null) {
|
||||
s_logger.warn("Error in stopping httpd service err=" + result);
|
||||
LOGGER.warn("Error in stopping httpd service err=" + result);
|
||||
}
|
||||
String port = Integer.toString(TemplateConstants.DEFAULT_TMPLT_COPY_PORT);
|
||||
String intf = TemplateConstants.DEFAULT_TMPLT_COPY_INTF;
|
||||
|
||||
command = new Script("/bin/bash", s_logger);
|
||||
command = new Script("/bin/bash", LOGGER);
|
||||
command.add("-c");
|
||||
command.add("iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j ACCEPT;" + "iptables -I INPUT -i " + intf +
|
||||
" -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j ACCEPT;");
|
||||
|
||||
result = command.execute();
|
||||
if (result != null) {
|
||||
s_logger.warn("Error in opening up apache2 port err=" + result);
|
||||
LOGGER.warn("Error in opening up apache2 port err=" + result);
|
||||
return;
|
||||
}
|
||||
|
||||
command = new Script("/bin/systemctl", s_logger);
|
||||
command = new Script("/bin/systemctl", LOGGER);
|
||||
command.add("start");
|
||||
command.add("apache2");
|
||||
result = command.execute();
|
||||
if (result != null) {
|
||||
s_logger.warn("Error in starting apache2 service err=" + result);
|
||||
LOGGER.warn("Error in starting apache2 service err=" + result);
|
||||
return;
|
||||
}
|
||||
|
||||
command = new Script("/bin/su", s_logger);
|
||||
command = new Script("/bin/su", LOGGER);
|
||||
command.add("-s");
|
||||
command.add("/bin/bash");
|
||||
command.add("-c");
|
||||
@ -1130,7 +1170,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
|
||||
command.add("www-data");
|
||||
result = command.execute();
|
||||
if (result != null) {
|
||||
s_logger.warn("Error in creating directory =" + result);
|
||||
LOGGER.warn("Error in creating directory =" + result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,7 +80,8 @@ public class ChecksumValue {
|
||||
if (s == 0 && e > s+1) { // we have an algorithm name of at least 1 char
|
||||
return digest.substring(s+1,e);
|
||||
} // else if no algoritm
|
||||
return "MD5";
|
||||
} // or if no digest at all
|
||||
return "MD5";
|
||||
return "SHA-512";
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user