protected override void RunCore() { // The appliance has a signature and the user asked to verify it. if (m_verifySignature) { Description = Messages.VERIFYING_SIGNATURE; try { m_package.VerifySignature(); log.Info($"Verified signature for package {m_package.Name}"); } catch (Exception e) { log.Error($"Signature verification failed for package {m_package.Name}", e); throw new Exception(String.Format(Messages.VERIFYING_SIGNATURE_ERROR, e.Message)); } } // The appliance has // - a signature (in which case it also has a manifest that should be verified AFTER the signature); or // - a manifest without a signature // and the user asked to verify it if (m_verifySignature || m_verifyManifest) { Description = Messages.VERIFYING_MANIFEST; try { m_package.VerifyManifest(); log.Info($"Verified manifest for package {m_package.Name}"); } catch (Exception e) { log.Error($"Manifest verification failed for package {m_package.Name}", e); throw new Exception(String.Format(Messages.VERIFYING_MANIFEST_ERROR, e.Message)); } } PercentComplete = 20; Description = string.Format(Messages.IMPORT_APPLIANCE_PREPARING, m_package.Name); //create a copy of the OVF var envelopes = new List <EnvelopeType>(); foreach (var vmMapping in m_vmMappings) { CheckForCancellation(); string systemid = vmMapping.Key; var mapping = vmMapping.Value; EnvelopeType[] envs = OVF.Split(m_package.OvfEnvelope, "system", new object[] { new[] { systemid } }); //storage foreach (var kvp in mapping.Storage) { OVF.SetTargetSRInRASD(envs[0], systemid, kvp.Key, kvp.Value.uuid); } foreach (var kvp in mapping.StorageToAttach) { OVF.SetTargetVDIInRASD(envs[0], systemid, kvp.Key, kvp.Value.uuid); } //network foreach (var kvp in mapping.Networks) { OVF.SetTargetNetworkInRASD(envs[0], systemid, kvp.Key, kvp.Value.uuid); } if (m_runfixups) { string cdId = OVF.SetRunOnceBootCDROMOSFixup(envs[0], systemid, Path.GetDirectoryName(m_package.PackageSourceFile)); OVF.SetTargetISOSRInRASD(envs[0], systemid, cdId, m_selectedIsoSr.uuid); } envelopes.Add(envs[0]); } EnvelopeType env = OVF.Merge(envelopes, m_package.Name); object importedObject; try //import VMs { m_package.ExtractToWorkingDir(CheckForCancellation); CheckForCancellation(); OVF.ParseEncryption(env, out m_encryptionClass, out m_encryptionVersion); importedObject = Process(env, m_package.WorkingDir, m_package.Name); } catch (OperationCanceledException) { throw new CancelledException(); } finally { m_package.CleanUpWorkingDir(); } PercentComplete = 100; Description = Messages.COMPLETED; if (_startAutomatically && importedObject is XenRef <VM_appliance> applianceRef) { var appliance = Connection.Resolve(applianceRef); if (appliance != null) { new StartApplianceAction(appliance, false).RunAsync(); } } }