diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java index 3d4f73cb3cc..5e5adb27b48 100644 --- a/api/src/com/cloud/storage/Storage.java +++ b/api/src/com/cloud/storage/Storage.java @@ -94,7 +94,9 @@ public class Storage { ISO(false), // for iso image LVM(false), // XenServer local LVM SR SharedMountPoint(true), - VMFS(true); // VMware VMFS storage + VMFS(true), // VMware VMFS storage + PreSetup(true); // for XenServer, Storage Pool is set up by customers. + boolean shared; diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 3918e06511d..debd98849ce 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -5515,6 +5515,8 @@ public abstract class CitrixResourceBase implements ServerResource { return getNfsSR(conn, pool); } else if (pool.getType() == StoragePoolType.IscsiLUN) { return getIscsiSR(conn, pool); + } else if (pool.getType() == StoragePoolType.PreSetup) { + throw new CloudRuntimeException("The pool type: " + pool.getType().name() + " uuid " + pool.getUuid() + " doesn't exist"); } else { throw new CloudRuntimeException("The pool type: " + pool.getType().name() + " is not supported."); } diff --git a/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java b/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java index e6880e70970..b6858f25ba9 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java +++ b/core/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java @@ -174,7 +174,9 @@ public class XenServer56Resource extends CitrixResourceBase { try { SR sr = super.getStorageRepository(conn, pool); - if (pool.getType() != StoragePoolType.IscsiLUN && pool.getType() != StoragePoolType.NetworkFilesystem) { + if (!sr.getShared(conn) || ( pool.getType() != StoragePoolType.IscsiLUN + && pool.getType() != StoragePoolType.NetworkFilesystem + && pool.getType() != StoragePoolType.PreSetup)) { return sr; } setupHeartbeatSr(conn, sr, false); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index a2bc3e07647..96a1938bd7d 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -987,6 +987,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag pool = new StoragePoolVO(StoragePoolType.Filesystem, "localhost", 0, hostPath); } else if (scheme.equalsIgnoreCase("sharedMountPoint")) { pool = new StoragePoolVO(StoragePoolType.SharedMountPoint, storageHost, 0, hostPath); + } else if (scheme.equalsIgnoreCase("PreSetup")) { + pool = new StoragePoolVO(StoragePoolType.PreSetup, storageHost, 0, hostPath); } else if (scheme.equalsIgnoreCase("iscsi")) { String[] tokens = hostPath.split("/"); int lun = NumbersUtil.parseInt(tokens[tokens.length - 1], -1); @@ -1052,6 +1054,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag String uuid = null; if (scheme.equalsIgnoreCase("sharedmountpoint")) { uuid = UUID.randomUUID().toString(); + } else if (scheme.equalsIgnoreCase("PreSetup")) { + uuid = hostPath.replace("/", ""); } else { uuid = UUID.nameUUIDFromBytes(new String(storageHost + hostPath).getBytes()).toString(); } @@ -1233,8 +1237,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag s_logger.debug("Adding pool " + pool.getName() + " to host " + hostId); if (pool.getPoolType() != StoragePoolType.NetworkFilesystem && pool.getPoolType() != StoragePoolType.Filesystem && pool.getPoolType() != StoragePoolType.IscsiLUN && pool.getPoolType() != StoragePoolType.Iscsi && pool.getPoolType() != StoragePoolType.VMFS - && pool.getPoolType() != StoragePoolType.SharedMountPoint) { - + && pool.getPoolType() != StoragePoolType.SharedMountPoint && pool.getPoolType() != StoragePoolType.PreSetup) { + s_logger.warn(" Doesn't support storage pool type " + pool.getPoolType()); return true; }