// LiveComputerLocation specifies the location of a live physical machine as well as the credentials to access it. public static ConverterComputerSpecLiveComputerLocation BuildLiveSourceLocation(String sourceName, String sourceUsername, String sourcePassword, String osType, String sslThumbprint) { ConverterComputerSpecLiveComputerLocation liveSourceLocation = new ConverterComputerSpecLiveComputerLocation(); liveSourceLocation.hostname = sourceName; liveSourceLocation.username = sourceUsername; liveSourceLocation.password = sourcePassword; liveSourceLocation.osType = osType; liveSourceLocation.verifyPeer = true; liveSourceLocation.verifyPeerSpecified = true; liveSourceLocation.sslThumbprint = sslThumbprint; return liveSourceLocation; }
public InstallAgentResult InstallAgent(String sourceName, int sourceAgentPort, String sourceThumbprint, String sourceUsername, String sourcePassword, bool sourcePostponeReboot) { // Check for Agent existence. ConverterComputerSpecLiveComputerLocation liveComputerLocation = Common.BuildLiveSourceLocation(sourceName, sourceUsername, sourcePassword, "windowsOs", sourceThumbprint); ConverterComputerSpec computerSpec = new ConverterComputerSpec(); computerSpec.location = liveComputerLocation; bool availabilityValidated = false; bool retry; do { retry = false; try { _converterService.ConverterValidateAgentAvailability(_converterServerContent.queryManager, computerSpec); availabilityValidated = true; } catch (SoapException e) { String remoteThumbprint = ExtractCertificateThumbprintFromFaultMessage(e.Message); if (remoteThumbprint != null) { if (liveComputerLocation.sslThumbprint == null || liveComputerLocation.sslThumbprint.Length == 0) { if (ReadYesNo("\nSource machine certificate validation failed.\n" + "Source machine: " + liveComputerLocation.hostname + "\n" + "Certificate thumprint: " + remoteThumbprint + "\n" + "Proceed with connecting to the source machine?", false)) { liveComputerLocation.sslThumbprint = remoteThumbprint; retry = true; } } if (!retry) { Console.WriteLine("Caught SoapException - \n" + " Actor : " + e.Actor + "\n" + " Code : " + e.Code + "\n" + " Detail XML : " + e.Detail.OuterXml); return(new InstallAgentResult(false, null)); } } else { Console.WriteLine("Agent isn't installed on source machine {0} '" + e.Message + "'. Try to install agent...", sourceName); } } catch (Exception e) { Console.WriteLine("Agent isn't installed on source machine {0} '" + e.Message + "'. Try to install agent...", sourceName); } } while (retry); if (availabilityValidated) { return(new InstallAgentResult(true, liveComputerLocation.sslThumbprint)); } try { ConverterAgentManagerAgentDeploymentResult result = _converterService.ConverterInstallAgent(_converterServerContent.agentManager, sourceName, sourceAgentPort, true, sourceUsername, sourcePassword, sourcePostponeReboot, true); if (result.status == ConverterAgentManagerDeploymentStatus.completed) { return(new InstallAgentResult(true, result.sslThumbprint)); } else if (result.status == ConverterAgentManagerDeploymentStatus.rebootRequired && sourcePostponeReboot == true) { Console.WriteLine("A reboot of the physical source {0} is required for the agent installation to succeed. Please try the P2V after rebooting the source", sourceName); return(new InstallAgentResult(false, result.sslThumbprint)); } else if (result.status == ConverterAgentManagerDeploymentStatus.rebootRequired && sourcePostponeReboot == false) { _converterService.ConverterRebootMachine(_converterServerContent.agentManager, sourceName, sourceUsername, sourcePassword); Console.WriteLine("A reboot of the physical source {0} has been initiated.", sourceName); } // Update source computer spec thumbprint with the one returned after agent // deployment, if any liveComputerLocation.sslThumbprint = result.sslThumbprint; // If a reboot of the Physical source has been initiated. for (int attempt = 0; attempt < _totalAttempts; attempt++) { try { _converterService.ConverterValidateAgentAvailability(_converterServerContent.queryManager, computerSpec); availabilityValidated = true; break; } catch (Exception e) { Console.WriteLine("Caught Exception : " + e.Message + " Trying again..."); System.Threading.Thread.Sleep(_waitSeconds * 1000); } } return(new InstallAgentResult(availabilityValidated, result.sslThumbprint)); } catch (SoapException se) { Console.WriteLine("Caught SoapException - \n" + " Actor : " + se.Actor + "\n" + " Code : " + se.Code + "\n" + " Detail XML : " + se.Detail.OuterXml); } catch (Exception e) { Console.WriteLine("Caught Exception : \n" + " Name : " + e.GetType().Name + "\n" + " Message : " + e.Message + "\n" + " Trace : " + e.StackTrace); } return(new InstallAgentResult(false, null)); }
public ConverterServerConversionConversionJobInfo SubmitJob(ConverterServerConversionConversionJobSpec jobSpec) { ConverterServerConversionConversionJobInfo result = null; bool retry; do { retry = false; try { result = _converterService.ConverterServerConversionManagerCreateJob(_converterServerContent.conversionManager, jobSpec, null); } catch (SoapException e) { String remoteThumbprint = ExtractCertificateThumbprintFromFaultMessage(e.Detail.InnerText); if (remoteThumbprint != null) { // source machine spec ConverterComputerSpecLiveComputerLocation liveSourceLocation = (ConverterComputerSpecLiveComputerLocation)jobSpec.source.location; // destination connection spec ConverterVimConnectionSpec vimConnectionSpec = ((ConverterTargetVmSpecManagedVmLocation)jobSpec.conversionParams.cloningParams.target.location).vimConnect; if (liveSourceLocation != null && (liveSourceLocation.sslThumbprint == null || liveSourceLocation.sslThumbprint.Length == 0)) { if (ReadYesNo("\nSource machine certificate validation failed.\n" + "Source machine: " + liveSourceLocation.hostname + "\n" + "Certificate thumprint: " + remoteThumbprint + "\n" + "Proceed with connecting to the source machine?", false)) { liveSourceLocation.sslThumbprint = remoteThumbprint; retry = true; } } else if (vimConnectionSpec != null && (vimConnectionSpec.sslThumbprint == null || vimConnectionSpec.sslThumbprint.Length == 0)) { if (ReadYesNo("\nDestination vCenter/ESX server certificate validation failed.\n" + "Destination vCenter/ESX server: " + vimConnectionSpec.hostname + "\n" + "Certificate thumprint: " + remoteThumbprint + "\n" + "Proceed with connecting to the destination server?", false)) { vimConnectionSpec.sslThumbprint = remoteThumbprint; retry = true; } } } if (!retry) { Console.WriteLine("Caught SoapException - \n" + " Actor : " + e.Actor + "\n" + " Code : " + e.Code + "\n" + " Detail XML : " + e.Detail.OuterXml); } } catch (Exception e) { Console.WriteLine("Caught Exception : \n" + " Name : " + e.GetType().Name + "\n" + " Message : " + e.Message + "\n" + " Trace : " + e.StackTrace); } } while (retry); return(result); }