diff --git a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java index 376a94f302b..e7a2540df25 100755 --- a/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java +++ b/api/src/com/cloud/agent/api/storage/CreateEntityDownloadURLCommand.java @@ -22,8 +22,16 @@ import com.cloud.agent.api.Command; public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { + public CreateEntityDownloadURLCommand(String parent, String installPath, String uuid) { // this constructor is for creating template download url + super(); + this.parent = parent; // parent is required as not the template can be child of one of many parents + this.installPath = installPath; + this.extractLinkUUID = uuid; + } + public CreateEntityDownloadURLCommand(String installPath, String uuid) { super(); + this.parent = parent; this.installPath = installPath; this.extractLinkUUID = uuid; } @@ -32,6 +40,7 @@ public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { } private String installPath; + private String parent; private String extractLinkUUID; @Override @@ -46,6 +55,14 @@ public class CreateEntityDownloadURLCommand extends AbstractDownloadCommand { public void setInstallPath(String installPath) { this.installPath = installPath; } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } public String getExtractLinkUUID() { return extractLinkUUID; diff --git a/core/src/com/cloud/storage/template/UploadManagerImpl.java b/core/src/com/cloud/storage/template/UploadManagerImpl.java index d559ae0b3a3..da88da86868 100755 --- a/core/src/com/cloud/storage/template/UploadManagerImpl.java +++ b/core/src/com/cloud/storage/template/UploadManagerImpl.java @@ -373,11 +373,10 @@ public class UploadManagerImpl implements UploadManager { } - // Create a symbolic link from the actual directory to the template location. The entity would be directly visible under /var/www/html/userdata - cmd.getInstallPath(); + // Create a symbolic link from the actual directory to the template location. The entity would be directly visible under /var/www/html/userdata/cmd.getInstallPath(); command = new Script("/bin/bash", s_logger); command.add("-c"); - command.add("ln -sf " + extractMountPoint + File.separator + cmd.getInstallPath() + " " + extractDir + uuid); + command.add("ln -sf /mnt/SecStorage/" + cmd.getParent() + File.separator + cmd.getInstallPath() + " " + extractDir + uuid); result = command.execute(); if (result != null) { String errorString = "Error in linking err=" + result; diff --git a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java index 3809701ad48..c5a1e1bb446 100755 --- a/server/src/com/cloud/storage/upload/UploadMonitorImpl.java +++ b/server/src/com/cloud/storage/upload/UploadMonitorImpl.java @@ -194,7 +194,7 @@ public class UploadMonitorImpl implements UploadMonitor { String errorString = ""; boolean success = false; List storageServers = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorage, dataCenterId); - if(storageServers == null ) { + if(storageServers == null || storageServers.size() == 0) { throw new CloudRuntimeException("No Storage Server found at the datacenter - " +dataCenterId); } @@ -229,7 +229,7 @@ public class UploadMonitorImpl implements UploadMonitor { try{ // Create Symlink at ssvm String uuid = UUID.randomUUID().toString() + ".vhd"; - CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(vmTemplateHost.getInstallPath(), uuid); + CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(storageServers.get(0).getParent(), vmTemplateHost.getInstallPath(), uuid); long result = send(use_ssvm.getId(), cmd, null); if (result == -1){ errorString = "Unable to create a link for " +type+ " id:"+template.getId();