sureshanaparti commented on code in PR #12970:
URL: https://github.com/apache/cloudstack/pull/12970#discussion_r3049264212
##########
plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapper.java:
##########
@@ -84,61 +91,78 @@ public Answer execute(ConvertInstanceCommand cmd,
LibvirtComputingResource serve
logger.info(String.format("(%s) Attempting to convert the instance %s
from %s to KVM",
originalVMName, sourceInstanceName, sourceHypervisorType));
final String temporaryConvertPath =
temporaryStoragePool.getLocalPath();
+ final String temporaryConvertUuid = UUID.randomUUID().toString();
+ boolean verboseModeEnabled =
serverResource.isConvertInstanceVerboseModeEnabled();
- String ovfTemplateDirOnConversionLocation;
- String sourceOVFDirPath;
+ boolean cleanupSecondaryStorage = false;
boolean ovfExported = false;
- if (cmd.getExportOvfToConversionLocation()) {
- String exportInstanceOVAUrl =
getExportInstanceOVAUrl(sourceInstance, originalVMName);
- if (StringUtils.isBlank(exportInstanceOVAUrl)) {
- String err = String.format("Couldn't export OVA for the VM %s,
due to empty url", sourceInstanceName);
- logger.error(String.format("(%s) %s", originalVMName, err));
- return new Answer(cmd, false, err);
- }
+ String ovfTemplateDirOnConversionLocation = null;
- int noOfThreads = cmd.getThreadsCountToExportOvf();
- if (noOfThreads > 1 &&
!serverResource.ovfExportToolSupportsParallelThreads()) {
- noOfThreads = 0;
- }
- ovfTemplateDirOnConversionLocation = UUID.randomUUID().toString();
-
temporaryStoragePool.createFolder(ovfTemplateDirOnConversionLocation);
- sourceOVFDirPath = String.format("%s/%s/", temporaryConvertPath,
ovfTemplateDirOnConversionLocation);
- ovfExported = exportOVAFromVMOnVcenter(exportInstanceOVAUrl,
sourceOVFDirPath, noOfThreads, originalVMName, timeout);
- if (!ovfExported) {
- String err = String.format("Export OVA for the VM %s failed",
sourceInstanceName);
- logger.error(String.format("(%s) %s", originalVMName, err));
- return new Answer(cmd, false, err);
- }
- sourceOVFDirPath = String.format("%s%s/", sourceOVFDirPath,
sourceInstanceName);
- } else {
- ovfTemplateDirOnConversionLocation =
cmd.getTemplateDirOnConversionLocation();
- sourceOVFDirPath = String.format("%s/%s/", temporaryConvertPath,
ovfTemplateDirOnConversionLocation);
- }
+ try {
+ boolean result;
+ if (useVddk) {
+ logger.info("({}) Using VDDK-based conversion (direct from
VMware)", originalVMName);
+ String vddkLibDir = resolveVddkSetting(cmd.getVddkLibDir(),
serverResource.getVddkLibDir());
+ if (StringUtils.isBlank(vddkLibDir)) {
+ String err = String.format("VDDK lib dir is not configured
on the host. " +
+ "Set '%s' in agent.properties to use VDDK-based
conversion.", "vddk.lib.dir");
+ logger.error("({}) {}", originalVMName, err);
+ return new Answer(cmd, false, err);
+ }
+ String libguestfsBackend =
StringUtils.defaultIfBlank(resolveVddkSetting(cmd.getLibguestfsBackend(),
serverResource.getLibguestfsBackend()), "direct");
+ String vddkTransports =
resolveVddkSetting(cmd.getVddkTransports(), serverResource.getVddkTransports());
+ String configuredVddkThumbprint =
resolveVddkSetting(cmd.getVddkThumbprint(), serverResource.getVddkThumbprint());
+ String passwordOption =
serverResource.getDetectedPasswordFileOption();
+ result = performInstanceConversionVddk(sourceInstance,
originalVMName, temporaryConvertPath,
+ vddkLibDir, libguestfsBackend, vddkTransports,
configuredVddkThumbprint,
+ timeout, verboseModeEnabled, extraParams,
temporaryConvertUuid, passwordOption);
+ } else {
+ logger.info("({}) Using OVF-based conversion (export + local
convert)", originalVMName);
+ String sourceOVFDirPath;
+ if (cmd.getExportOvfToConversionLocation()) {
+ String exportInstanceOVAUrl =
getExportInstanceOVAUrl(sourceInstance, originalVMName);
- logger.info(String.format("(%s) Attempting to convert the OVF %s of
the instance %s from %s to KVM",
- originalVMName, ovfTemplateDirOnConversionLocation,
sourceInstanceName, sourceHypervisorType));
+ if (StringUtils.isBlank(exportInstanceOVAUrl)) {
+ String err = String.format("Couldn't export OVA for
the VM %s, due to empty url", sourceInstanceName);
+ logger.error("({}) {}", originalVMName, err);
+ return new Answer(cmd, false, err);
+ }
- final String temporaryConvertUuid = UUID.randomUUID().toString();
- boolean verboseModeEnabled =
serverResource.isConvertInstanceVerboseModeEnabled();
+ int noOfThreads = cmd.getThreadsCountToExportOvf();
+ if (noOfThreads > 1 &&
!serverResource.ovfExportToolSupportsParallelThreads()) {
+ noOfThreads = 0;
+ }
+ ovfTemplateDirOnConversionLocation =
UUID.randomUUID().toString();
+
temporaryStoragePool.createFolder(ovfTemplateDirOnConversionLocation);
+ sourceOVFDirPath = String.format("%s/%s/",
temporaryConvertPath, ovfTemplateDirOnConversionLocation);
+ ovfExported =
exportOVAFromVMOnVcenter(exportInstanceOVAUrl, sourceOVFDirPath, noOfThreads,
originalVMName, timeout);
+
+ if (!ovfExported) {
+ String err = String.format("Export OVA for the VM %s
failed", sourceInstanceName);
+ logger.error("({}) {}", originalVMName, err);
+ return new Answer(cmd, false, err);
+ }
+ sourceOVFDirPath = String.format("%s%s/",
sourceOVFDirPath, sourceInstanceName);
+ } else {
+ ovfTemplateDirOnConversionLocation =
cmd.getTemplateDirOnConversionLocation();
+ sourceOVFDirPath = String.format("%s/%s/",
temporaryConvertPath, ovfTemplateDirOnConversionLocation);
+ }
+
+ result = performInstanceConversion(originalVMName,
sourceOVFDirPath, temporaryConvertPath, temporaryConvertUuid,
+ timeout, verboseModeEnabled, extraParams,
serverResource);
+ }
- boolean cleanupSecondaryStorage = false;
- try {
- boolean result = performInstanceConversion(originalVMName,
sourceOVFDirPath, temporaryConvertPath, temporaryConvertUuid,
- timeout, verboseModeEnabled, extraParams, serverResource);
if (!result) {
- String err = String.format(
- "The virt-v2v conversion for the OVF %s failed. Please
check the agent logs " +
- "for the virt-v2v output. Please try on a
different kvm host which " +
- "has a different virt-v2v version.",
- ovfTemplateDirOnConversionLocation);
- logger.error(String.format("(%s) %s", originalVMName, err));
+ String err = String.format("Instance conversion failed for VM
%s. Please check virt-v2v logs.", sourceInstanceName);
+ logger.error("({}) {}", originalVMName, err);
return new Answer(cmd, false, err);
}
+
return new ConvertInstanceAnswer(cmd, temporaryConvertUuid);
+
Review Comment:
```suggestion
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]