mirror of https://github.com/apache/cloudstack.git
Fix live migration of VM with config drive on KVM (#11516)
This commit is contained in:
parent
6e59f4f4cc
commit
0f0155c653
|
|
@ -3506,10 +3506,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
public synchronized String attachOrDetachISO(final Connect conn, final String vmName, String isoPath, final boolean isAttach, final Integer diskSeq) throws LibvirtException, URISyntaxException,
|
||||
InternalErrorException {
|
||||
final DiskDef iso = new DiskDef();
|
||||
if (isAttach && StringUtils.isNotBlank(isoPath) && isoPath.lastIndexOf("/") > 0) {
|
||||
if (isoPath.startsWith(getConfigPath() + "/" + ConfigDrive.CONFIGDRIVEDIR) && isoPath.contains(vmName)) {
|
||||
if (isAttach && StringUtils.isNotBlank(isoPath)) {
|
||||
if (isoPath.startsWith(getConfigPath() + "/" + ConfigDrive.CONFIGDRIVEDIR) || isoPath.contains(vmName)) {
|
||||
iso.defISODisk(isoPath, diskSeq, DiskDef.DiskType.FILE);
|
||||
} else {
|
||||
} else if (isoPath.lastIndexOf("/") > 0) {
|
||||
final int index = isoPath.lastIndexOf("/");
|
||||
final String path = isoPath.substring(0, index);
|
||||
final String name = isoPath.substring(index + 1);
|
||||
|
|
@ -3533,7 +3533,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
cleanupDisk(disk);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -899,7 +899,7 @@ public final class LibvirtMigrateCommandWrapper extends CommandWrapper<MigrateCo
|
|||
Node sourceNode = diskChildNode;
|
||||
NamedNodeMap sourceNodeAttributes = sourceNode.getAttributes();
|
||||
Node sourceNodeAttribute = sourceNodeAttributes.getNamedItem("file");
|
||||
if ( sourceNodeAttribute.getNodeValue().contains(vmName)) {
|
||||
if (sourceNodeAttribute != null && sourceNodeAttribute.getNodeValue().contains(vmName)) {
|
||||
diskNode.removeChild(diskChildNode);
|
||||
Element newChildSourceNode = doc.createElement("source");
|
||||
newChildSourceNode.setAttribute("file", isoPath);
|
||||
|
|
|
|||
|
|
@ -325,17 +325,19 @@ public class KVMStoragePoolManager {
|
|||
String uuid = null;
|
||||
String sourceHost = "";
|
||||
StoragePoolType protocol = null;
|
||||
final String scheme = (storageUri.getScheme() != null) ? storageUri.getScheme().toLowerCase() : "";
|
||||
List<String> acceptedSchemes = List.of("nfs", "networkfilesystem", "filesystem");
|
||||
if (acceptedSchemes.contains(scheme)) {
|
||||
sourcePath = storageUri.getPath();
|
||||
sourcePath = sourcePath.replace("//", "/");
|
||||
sourceHost = storageUri.getHost();
|
||||
uuid = UUID.nameUUIDFromBytes(new String(sourceHost + sourcePath).getBytes()).toString();
|
||||
protocol = scheme.equals("filesystem") ? StoragePoolType.Filesystem: StoragePoolType.NetworkFilesystem;
|
||||
if (storageUri.getScheme() == null || !acceptedSchemes.contains(storageUri.getScheme().toLowerCase())) {
|
||||
throw new CloudRuntimeException("Empty or unsupported storage pool uri scheme");
|
||||
}
|
||||
|
||||
// secondary storage registers itself through here
|
||||
final String scheme = storageUri.getScheme().toLowerCase();
|
||||
sourcePath = storageUri.getPath();
|
||||
sourcePath = sourcePath.replace("//", "/");
|
||||
sourceHost = storageUri.getHost();
|
||||
uuid = UUID.nameUUIDFromBytes(new String(sourceHost + sourcePath).getBytes()).toString();
|
||||
protocol = scheme.equals("filesystem") ? StoragePoolType.Filesystem: StoragePoolType.NetworkFilesystem;
|
||||
|
||||
// storage registers itself through here
|
||||
return createStoragePool(uuid, sourceHost, 0, sourcePath, "", protocol, null, false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -733,10 +733,9 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
|
||||
@Override
|
||||
public KVMStoragePool createStoragePool(String name, String host, int port, String path, String userInfo, StoragePoolType type, Map<String, String> details, boolean isPrimaryStorage) {
|
||||
logger.info("Attempting to create storage pool " + name + " (" + type.toString() + ") in libvirt");
|
||||
|
||||
StoragePool sp = null;
|
||||
Connect conn = null;
|
||||
logger.info("Attempting to create storage pool {} ({}) in libvirt", name, type);
|
||||
StoragePool sp;
|
||||
Connect conn;
|
||||
try {
|
||||
conn = LibvirtConnection.getConnection();
|
||||
} catch (LibvirtException e) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue