diff --git a/core/src/com/cloud/storage/template/TemplateConstants.java b/core/src/com/cloud/storage/template/TemplateConstants.java index 25c2d5b3c074..526a77de4394 100644 --- a/core/src/com/cloud/storage/template/TemplateConstants.java +++ b/core/src/com/cloud/storage/template/TemplateConstants.java @@ -35,4 +35,5 @@ public final class TemplateConstants { public static final String DEFAULT_SSL_CERT_DOMAIN = "realhostip.com"; public static final String DEFAULT_HTTP_AUTH_USER = "cloud"; + public static final String VMWARE_SYSTEM_VM_TMPLT_PERMISSIONS = "0777"; } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index b0f87af648dc..44b77b8f0d88 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -113,6 +113,7 @@ import com.cloud.storage.ImageStoreDetailsUtil; import com.cloud.storage.JavaStorageLayer; import com.cloud.storage.StorageLayer; +import com.cloud.storage.template.TemplateConstants; import com.cloud.utils.FileUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -205,6 +206,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw private final ScheduledExecutorService _hostScanScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vmware-Host-Scan")); + private static boolean s_isSystemVmTmpltPermissionSet = false; + public VmwareManagerImpl() { _storageMgr = new VmwareStorageManagerImpl(this); } @@ -729,6 +732,22 @@ private String setupMountPoint(String parent) { return mountPoint; } + @Override + public synchronized void setSystemVmTmpltPermission(String mountPoint) { + if (!s_isSystemVmTmpltPermissionSet) { + s_logger.debug("Set permissions for " + mountPoint); + String result = null; + Script script = new Script(true, "chmod", _timeout, s_logger); + script.add("-R", TemplateConstants.VMWARE_SYSTEM_VM_TMPLT_PERMISSIONS, mountPoint); + result = script.execute(); + if (result != null) { + s_logger.warn("Unable to set permissions for " + mountPoint + " due to " + result); + } else { + s_isSystemVmTmpltPermissionSet = true; + } + } + } + private void startupCleanup(String parent) { s_logger.info("Cleanup mounted NFS mount points used in previous session"); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java index fd139e418b63..e5739fb1cf36 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java @@ -18,4 +18,6 @@ public interface VmwareStorageMount { String getMountPoint(String storageUrl, Integer nfsVersion); + + void setSystemVmTmpltPermission(String mountPoint); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java index d0d5964bfa92..310e1161251d 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java @@ -307,4 +307,9 @@ public String getWorkerName(VmwareContext context, Command cmd, int workerSequen public String getMountPoint(String storageUrl, Integer nfsVersion) { return _resource.getRootDir(storageUrl, nfsVersion); } + + @Override + public void setSystemVmTmpltPermission(String mountPoint) { + // Do nothing as SSVM uses root account. + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java index 802657515fd9..6792d11adf49 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -105,6 +105,7 @@ import com.cloud.storage.StorageLayer; import com.cloud.storage.Volume; import com.cloud.storage.template.OVAProcessor; +import com.cloud.storage.template.TemplateConstants; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.exception.CloudRuntimeException; @@ -190,6 +191,7 @@ private Pair copyTemplateFromSecondaryToPrimary(VmwareHy String secondaryMountPoint = mountService.getMountPoint(secondaryStorageUrl, nfsVersion); s_logger.info("Secondary storage mount point: " + secondaryMountPoint); + mountService.setSystemVmTmpltPermission(secondaryMountPoint + "/" + TemplateConstants.DEFAULT_TMPLT_ROOT_DIR); String srcOVAFileName = VmwareStorageLayoutHelper.getTemplateOnSecStorageFilePath(secondaryMountPoint, templatePathAtSecondaryStorage, templateName,