@@ -57,9 +57,6 @@ public class LibvirtConvertInstanceCommandWrapper extends CommandWrapper<Convert
5757 private static final List <Hypervisor .HypervisorType > supportedInstanceConvertSourceHypervisors =
5858 List .of (Hypervisor .HypervisorType .VMware );
5959 private static final Pattern SHA1_FINGERPRINT_PATTERN = Pattern .compile ("(?i)(?:SHA1\\ s+)?Fingerprint\\ s*=\\ s*([0-9A-F:]+)" );
60- private static final Pattern VERSION_PREFIX_PATTERN = Pattern .compile ("^(\\ d+)(?:\\ .(\\ d+))?(?:\\ .(\\ d+))?.*" );
61- private static final String LEGACY_PASSWORD_FILE_OPTION = "--password-file" ;
62- private static final String PASSWORD_INTERACTIVE_FILE_OPTION = "-ip" ;
6360
6461 @ Override
6562 public Answer execute (ConvertInstanceCommand cmd , LibvirtComputingResource serverResource ) {
@@ -115,10 +112,10 @@ public Answer execute(ConvertInstanceCommand cmd, LibvirtComputingResource serve
115112 String libguestfsBackend = StringUtils .defaultIfBlank (resolveVddkSetting (cmd .getLibguestfsBackend (), serverResource .getLibguestfsBackend ()), "direct" );
116113 String vddkTransports = resolveVddkSetting (cmd .getVddkTransports (), serverResource .getVddkTransports ());
117114 String configuredVddkThumbprint = resolveVddkSetting (cmd .getVddkThumbprint (), serverResource .getVddkThumbprint ());
118- String virtV2vVersion = serverResource .getHostVirtV2vVersion ();
115+ String passwordOption = serverResource .getDetectedPasswordFileOption ();
119116 result = performInstanceConversionVddk (sourceInstance , originalVMName , temporaryConvertPath ,
120117 vddkLibDir , libguestfsBackend , vddkTransports , configuredVddkThumbprint ,
121- timeout , verboseModeEnabled , extraParams , virtV2vVersion );
118+ timeout , verboseModeEnabled , extraParams , temporaryConvertUuid , passwordOption );
122119 } else {
123120 logger .info ("({}) Using OVF-based conversion (export + local convert)" , originalVMName );
124121 String sourceOVFDirPath ;
@@ -312,7 +309,7 @@ protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance,
312309 String libguestfsBackend , String vddkTransports ,
313310 String configuredVddkThumbprint ,
314311 long timeout , boolean verboseModeEnabled , String extraParams ,
315- String virtV2vVersion ) {
312+ String temporaryConvertUuid , String passwordOption ) {
316313
317314 String vcenterPassword = vmwareInstance .getVcenterPassword ();
318315 if (StringUtils .isBlank (vcenterPassword )) {
@@ -340,7 +337,12 @@ protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance,
340337 cmd .append ("virt-v2v " );
341338 cmd .append ("--root first " );
342339 cmd .append ("-ic '" ).append (vpxUrl ).append ("' " );
343- cmd .append (getPasswordInputOptionForVersion (virtV2vVersion )).append (" " ).append (passwordFilePath ).append (" " );
340+ if (StringUtils .isBlank (passwordOption )) {
341+ logger .error ("({}) Could not determine supported password file option for virt-v2v" , originalVMName );
342+ return false ;
343+ }
344+
345+ cmd .append (passwordOption ).append (" " ).append (passwordFilePath ).append (" " );
344346 cmd .append ("-it vddk " );
345347 cmd .append ("-io vddk-libdir=" ).append (vddkLibDir ).append (" " );
346348 String vddkThumbprint = StringUtils .trimToNull (configuredVddkThumbprint );
@@ -359,6 +361,7 @@ protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance,
359361 cmd .append ("-o local " );
360362 cmd .append ("-os " ).append (temporaryConvertFolder ).append (" " );
361363 cmd .append ("-of qcow2 " );
364+ cmd .append ("-on " ).append (temporaryConvertUuid ).append (" " );
362365
363366 if (verboseModeEnabled ) {
364367 cmd .append ("-v " );
@@ -393,43 +396,6 @@ protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance,
393396 return exitValue == 0 ;
394397 }
395398
396- protected String getPasswordInputOptionForVersion (String virtV2vVersion ) {
397- // virt-v2v 2.8.1 replaced --password-file with -ip.
398- if (isVersionAtLeast (virtV2vVersion , 2 , 8 , 1 )) {
399- return PASSWORD_INTERACTIVE_FILE_OPTION ;
400- }
401- return LEGACY_PASSWORD_FILE_OPTION ;
402- }
403-
404- private boolean isVersionAtLeast (String version , int major , int minor , int patch ) {
405- int [] parsedVersion = parseVersionPrefix (version );
406- if (parsedVersion == null ) {
407- return false ;
408- }
409- if (parsedVersion [0 ] != major ) {
410- return parsedVersion [0 ] > major ;
411- }
412- if (parsedVersion [1 ] != minor ) {
413- return parsedVersion [1 ] > minor ;
414- }
415- return parsedVersion [2 ] >= patch ;
416- }
417-
418- private int [] parseVersionPrefix (String version ) {
419- String normalized = StringUtils .trimToNull (version );
420- if (normalized == null ) {
421- return null ;
422- }
423- Matcher matcher = VERSION_PREFIX_PATTERN .matcher (normalized );
424- if (!matcher .matches ()) {
425- return null ;
426- }
427- return new int [] {
428- Integer .parseInt (matcher .group (1 )),
429- StringUtils .isNotBlank (matcher .group (2 )) ? Integer .parseInt (matcher .group (2 )) : 0 ,
430- StringUtils .isNotBlank (matcher .group (3 )) ? Integer .parseInt (matcher .group (3 )) : 0
431- };
432- }
433399
434400 protected String getVcenterThumbprint (String vcenterHost , long timeout , String originalVMName ) {
435401 if (StringUtils .isBlank (vcenterHost )) {
0 commit comments