Skip to content

Commit 5c3993f

Browse files
Added safe file deletion
1 parent 64f1610 commit 5c3993f

File tree

1 file changed

+59
-56
lines changed

1 file changed

+59
-56
lines changed

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapper.java

Lines changed: 59 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -326,73 +326,76 @@ protected boolean performInstanceConversionUsingVddk(RemoteInstanceTO vmwareInst
326326
return false;
327327
}
328328

329-
String vpxUrl = buildVpxUrl(vmwareInstance, originalVMName);
329+
try {
330+
String vpxUrl = buildVpxUrl(vmwareInstance, originalVMName);
330331

331-
StringBuilder cmd = new StringBuilder();
332+
StringBuilder cmd = new StringBuilder();
332333

333-
String effectiveLibguestfsBackend = StringUtils.defaultIfBlank(libguestfsBackend, "direct");
334-
cmd.append("export LIBGUESTFS_BACKEND=").append(effectiveLibguestfsBackend).append(" && ");
334+
String effectiveLibguestfsBackend = StringUtils.defaultIfBlank(libguestfsBackend, "direct");
335+
cmd.append("export LIBGUESTFS_BACKEND=").append(effectiveLibguestfsBackend).append(" && ");
335336

336-
cmd.append("virt-v2v ");
337-
cmd.append("--root first ");
338-
cmd.append("-ic '").append(vpxUrl).append("' ");
339-
if (StringUtils.isBlank(passwordOption)) {
340-
logger.error("({}) Could not determine supported password file option for virt-v2v", originalVMName);
341-
return false;
342-
}
337+
cmd.append("virt-v2v ");
338+
cmd.append("--root first ");
339+
cmd.append("-ic '").append(vpxUrl).append("' ");
340+
if (StringUtils.isBlank(passwordOption)) {
341+
logger.error("({}) Could not determine supported password file option for virt-v2v", originalVMName);
342+
return false;
343+
}
343344

344-
cmd.append(passwordOption).append(" ").append(passwordFilePath).append(" ");
345-
cmd.append("-it vddk ");
346-
cmd.append("-io vddk-libdir=").append(vddkLibDir).append(" ");
347-
String vddkThumbprint = StringUtils.trimToNull(configuredVddkThumbprint);
348-
if (StringUtils.isBlank(vddkThumbprint)) {
349-
vddkThumbprint = getVcenterThumbprint(vmwareInstance.getVcenterHost(), timeout, originalVMName);
350-
}
351-
if (StringUtils.isBlank(vddkThumbprint)) {
352-
logger.error("({}) Could not determine vCenter thumbprint for {}", originalVMName, vmwareInstance.getVcenterHost());
353-
return false;
354-
}
355-
cmd.append("-io vddk-thumbprint=").append(vddkThumbprint).append(" ");
356-
if (StringUtils.isNotBlank(vddkTransports)) {
357-
cmd.append("-io vddk-transports=").append(vddkTransports).append(" ");
358-
}
359-
cmd.append(originalVMName).append(" ");
360-
cmd.append("-o local ");
361-
cmd.append("-os ").append(temporaryConvertFolder).append(" ");
362-
cmd.append("-of qcow2 ");
363-
cmd.append("-on ").append(temporaryConvertUuid).append(" ");
345+
cmd.append(passwordOption).append(" ").append(passwordFilePath).append(" ");
346+
cmd.append("-it vddk ");
347+
cmd.append("-io vddk-libdir=").append(vddkLibDir).append(" ");
348+
String vddkThumbprint = StringUtils.trimToNull(configuredVddkThumbprint);
349+
if (StringUtils.isBlank(vddkThumbprint)) {
350+
vddkThumbprint = getVcenterThumbprint(vmwareInstance.getVcenterHost(), timeout, originalVMName);
351+
}
352+
if (StringUtils.isBlank(vddkThumbprint)) {
353+
logger.error("({}) Could not determine vCenter thumbprint for {}", originalVMName, vmwareInstance.getVcenterHost());
354+
return false;
355+
}
356+
cmd.append("-io vddk-thumbprint=").append(vddkThumbprint).append(" ");
357+
if (StringUtils.isNotBlank(vddkTransports)) {
358+
cmd.append("-io vddk-transports=").append(vddkTransports).append(" ");
359+
}
360+
cmd.append(originalVMName).append(" ");
361+
cmd.append("-o local ");
362+
cmd.append("-os ").append(temporaryConvertFolder).append(" ");
363+
cmd.append("-of qcow2 ");
364+
cmd.append("-on ").append(temporaryConvertUuid).append(" ");
365+
366+
if (verboseModeEnabled) {
367+
cmd.append("-v ");
368+
}
364369

365-
if (verboseModeEnabled) {
366-
cmd.append("-v ");
367-
}
370+
if (StringUtils.isNotBlank(extraParams)) {
371+
cmd.append(extraParams).append(" ");
372+
}
368373

369-
if (StringUtils.isNotBlank(extraParams)) {
370-
cmd.append(extraParams).append(" ");
371-
}
374+
Script script = new Script("/bin/bash", timeout, logger);
375+
script.add("-c");
376+
script.add(cmd.toString());
372377

373-
Script script = new Script("/bin/bash", timeout, logger);
374-
script.add("-c");
375-
script.add(cmd.toString());
378+
String logPrefix = String.format("(%s) virt-v2v vddk import", originalVMName);
379+
OutputInterpreter.LineByLineOutputLogger outputLogger =
380+
new OutputInterpreter.LineByLineOutputLogger(logger, logPrefix);
376381

377-
String logPrefix = String.format("(%s) virt-v2v vddk import", originalVMName);
378-
OutputInterpreter.LineByLineOutputLogger outputLogger =
379-
new OutputInterpreter.LineByLineOutputLogger(logger, logPrefix);
382+
logger.info("({}) Starting virt-v2v VDDK conversion", originalVMName);
383+
script.execute(outputLogger);
380384

381-
logger.info("({}) Starting virt-v2v VDDK conversion", originalVMName);
382-
script.execute(outputLogger);
385+
int exitValue = script.getExitValue();
386+
if (exitValue != 0) {
387+
logger.error("({}) virt-v2v failed with exit code {}", originalVMName, exitValue);
388+
}
383389

384-
int exitValue = script.getExitValue();
385-
if (exitValue != 0) {
386-
logger.error("({}) virt-v2v failed with exit code {}", originalVMName, exitValue);
387-
}
388-
try {
389-
Files.deleteIfExists(Path.of(passwordFilePath));
390-
logger.debug("({}) Deleted password file {}", originalVMName, passwordFilePath);
391-
} catch (Exception e) {
392-
logger.warn("({}) Failed to delete password file {}: {}", originalVMName, passwordFilePath, e.getMessage());
390+
return exitValue == 0;
391+
} finally {
392+
try {
393+
Files.deleteIfExists(Path.of(passwordFilePath));
394+
logger.debug("({}) Deleted password file {}", originalVMName, passwordFilePath);
395+
} catch (Exception e) {
396+
logger.warn("({}) Failed to delete password file {}: {}", originalVMName, passwordFilePath, e.getMessage());
397+
}
393398
}
394-
395-
return exitValue == 0;
396399
}
397400

398401
protected String getVcenterThumbprint(String vcenterHost, long timeout, String originalVMName) {

0 commit comments

Comments
 (0)