mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-27 02:56:01 +01:00
CA-350411 part 2: Add conditional page control refresh in Import Wizard
Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
This commit is contained in:
parent
355321faea
commit
051c205899
@ -55,17 +55,17 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the page's title (headline)
|
/// Gets the page's title (headline)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override string PageTitle { get { return Messages.IMAGE_DEFINITION_PAGE_TITLE; } }
|
public override string PageTitle => Messages.IMAGE_DEFINITION_PAGE_TITLE;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the page's label in the (left hand side) wizard progress panel
|
/// Gets the page's label in the (left hand side) wizard progress panel
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override string Text { get { return Messages.IMAGE_DEFINITION_PAGE_TEXT; } }
|
public override string Text => Messages.IMAGE_DEFINITION_PAGE_TEXT;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the value by which the help files section for this page is identified
|
/// Gets the value by which the help files section for this page is identified
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override string HelpID { get { return "VMConfig"; } }
|
public override string HelpID => "VMConfig";
|
||||||
|
|
||||||
protected override bool ImplementsIsDirty()
|
protected override bool ImplementsIsDirty()
|
||||||
{
|
{
|
||||||
@ -99,13 +99,13 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
public bool IsWim { internal get; set; }
|
public bool IsWim { internal get; set; }
|
||||||
|
|
||||||
public string VmName { get { return m_textBoxVMName.Text; } }
|
public string VmName => m_textBoxVMName.Text;
|
||||||
|
|
||||||
public ulong CpuCount { get { return (ulong)m_upDownCpuCount.Value; } }
|
public ulong CpuCount => (ulong)m_upDownCpuCount.Value;
|
||||||
|
|
||||||
public ulong Memory { get { return (ulong)m_upDownMemory.Value; } }
|
public ulong Memory => (ulong)m_upDownMemory.Value;
|
||||||
|
|
||||||
public ulong AdditionalSpace { get { return m_groupBoxAddSpace.Enabled ? (ulong)m_upDownAddSpace.Value * GB : 0; } }
|
public ulong AdditionalSpace => m_groupBoxAddSpace.Visible && m_groupBoxAddSpace.Enabled ? (ulong)m_upDownAddSpace.Value * GB : 0;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
#region Accessors
|
#region Accessors
|
||||||
|
|
||||||
public EnvelopeType SelectedOvfEnvelope { internal get; set; }
|
public EnvelopeType SelectedOvfEnvelope { private get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Package containing the selected OVF appliance.
|
/// Package containing the selected OVF appliance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Package SelectedOvfPackage { internal get; set; }
|
public Package SelectedOvfPackage { private get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
public EnvelopeType SelectedOvfEnvelope
|
public EnvelopeType SelectedOvfEnvelope
|
||||||
{
|
{
|
||||||
internal get
|
private get
|
||||||
{
|
{
|
||||||
return _selectedOvfEnvelope;
|
return _selectedOvfEnvelope;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnvelopeType SelectedOvfEnvelope { get; set; }
|
public EnvelopeType SelectedOvfEnvelope { private get; set; }
|
||||||
|
|
||||||
protected override string IntroductionText => Messages.IMPORT_WIZARD_NETWORKING_INTRO;
|
protected override string IntroductionText => Messages.IMPORT_WIZARD_NETWORKING_INTRO;
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnvelopeType SelectedOvfEnvelope { get; set; }
|
public EnvelopeType SelectedOvfEnvelope { private get; set; }
|
||||||
|
|
||||||
public override StorageResourceContainer ResourceData(string sysId)
|
public override StorageResourceContainer ResourceData(string sysId)
|
||||||
{
|
{
|
||||||
|
@ -32,18 +32,18 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using XenAdmin.Actions;
|
using XenAdmin.Actions;
|
||||||
using XenAdmin.Actions.OvfActions;
|
using XenAdmin.Actions.OvfActions;
|
||||||
|
using XenAdmin.Actions.VMActions;
|
||||||
|
using XenAdmin.Commands;
|
||||||
using XenAdmin.Controls;
|
using XenAdmin.Controls;
|
||||||
using XenAdmin.Core;
|
using XenAdmin.Core;
|
||||||
using XenAdmin.Mappings;
|
using XenAdmin.Mappings;
|
||||||
using XenAdmin.Network;
|
using XenAdmin.Network;
|
||||||
using XenAdmin.Wizards.GenericPages;
|
using XenAdmin.Wizards.GenericPages;
|
||||||
using XenAPI;
|
using XenAPI;
|
||||||
using System.Linq;
|
|
||||||
using XenAdmin.Actions.VMActions;
|
|
||||||
using XenAdmin.Commands;
|
|
||||||
using XenOvf;
|
using XenOvf;
|
||||||
using XenOvf.Definitions;
|
using XenOvf.Definitions;
|
||||||
using XenOvf.Utilities;
|
using XenOvf.Utilities;
|
||||||
@ -78,7 +78,10 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
private ImportType? m_typeOfImport;
|
private ImportType? m_typeOfImport;
|
||||||
private bool m_ignoreAffinitySet;
|
private bool m_ignoreAffinitySet;
|
||||||
private EnvelopeType m_envelopeFromVhd;
|
private EnvelopeType m_envelopeFromVhd;
|
||||||
private IXenConnection TargetConnection { get; set; }
|
private Package _selectedOvfPackage;
|
||||||
|
private string _selectedImagePath;
|
||||||
|
private Host _selectedAffinity;
|
||||||
|
private IXenConnection _targetConnection;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public ImportWizard(IXenConnection con, IXenObject xenObject, string filename, bool ovfModeOnly = false)
|
public ImportWizard(IXenConnection con, IXenObject xenObject, string filename, bool ovfModeOnly = false)
|
||||||
@ -128,7 +131,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
m_pageXvaStorage.ImportXvaAction.EndWizard(m_pageFinish.StartVmsAutomatically, m_pageXvaNetwork.VIFs);
|
m_pageXvaStorage.ImportXvaAction.EndWizard(m_pageFinish.StartVmsAutomatically, m_pageXvaNetwork.VIFs);
|
||||||
break;
|
break;
|
||||||
case ImportType.Ovf:
|
case ImportType.Ovf:
|
||||||
new ImportApplianceAction(TargetConnection,
|
new ImportApplianceAction(_targetConnection,
|
||||||
m_pageImportSource.SelectedOvfPackage,
|
m_pageImportSource.SelectedOvfPackage,
|
||||||
m_vmMappings,
|
m_vmMappings,
|
||||||
m_pageSecurity.VerifyManifest,
|
m_pageSecurity.VerifyManifest,
|
||||||
@ -139,7 +142,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
m_pageFinish.StartVmsAutomatically).RunAsync();
|
m_pageFinish.StartVmsAutomatically).RunAsync();
|
||||||
break;
|
break;
|
||||||
case ImportType.Vhd:
|
case ImportType.Vhd:
|
||||||
new ImportImageAction(TargetConnection,
|
new ImportImageAction(_targetConnection,
|
||||||
m_envelopeFromVhd,
|
m_envelopeFromVhd,
|
||||||
Path.GetDirectoryName(m_pageImportSource.FilePath),
|
Path.GetDirectoryName(m_pageImportSource.FilePath),
|
||||||
m_vmMappings,
|
m_vmMappings,
|
||||||
@ -171,17 +174,15 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
protected override void UpdateWizardContent(XenTabPage page)
|
protected override void UpdateWizardContent(XenTabPage page)
|
||||||
{
|
{
|
||||||
var type = page.GetType();
|
var type = page.GetType();
|
||||||
var oldTypeOfImport = m_typeOfImport; //store previous type
|
|
||||||
|
|
||||||
if (type == typeof(ImportSourcePage))
|
if (type == typeof(ImportSourcePage))
|
||||||
{
|
{
|
||||||
#region ImportSourcePage
|
var oldTypeOfImport = m_typeOfImport; //store previous type
|
||||||
|
|
||||||
m_typeOfImport = m_pageImportSource.TypeOfImport;
|
m_typeOfImport = m_pageImportSource.TypeOfImport;
|
||||||
|
|
||||||
var appliancePages = new XenTabPage[] { m_pageEula, m_pageHost, m_pageStorage, m_pageNetwork, m_pageSecurity, m_pageOptions };
|
var appliancePages = new XenTabPage[] { m_pageEula, m_pageHost, m_pageStorage, m_pageNetwork, m_pageSecurity, m_pageOptions };
|
||||||
var imagePages = new XenTabPage[] { m_pageVMconfig, m_pageHost, m_pageStorage, m_pageNetwork, m_pageOptions };
|
var imagePages = new XenTabPage[] { m_pageVMconfig, m_pageHost, m_pageStorage, m_pageNetwork, m_pageOptions };
|
||||||
var xvaPages = new XenTabPage[] { m_pageXvaHost, m_pageXvaStorage, m_pageXvaNetwork };
|
var xvaPages = new XenTabPage[] { m_pageXvaHost, m_pageXvaStorage, m_pageXvaNetwork };
|
||||||
var newVmMappings = m_vmMappings;
|
|
||||||
|
|
||||||
switch (m_typeOfImport)
|
switch (m_typeOfImport)
|
||||||
{
|
{
|
||||||
@ -195,29 +196,27 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
RemovePages(xvaPages);
|
RemovePages(xvaPages);
|
||||||
AddAfterPage(m_pageImportSource, appliancePages);
|
AddAfterPage(m_pageImportSource, appliancePages);
|
||||||
}
|
}
|
||||||
var newSelectedOvfPackage = m_pageImportSource.SelectedOvfPackage;
|
|
||||||
var newSelectedOvfEnvelope = newSelectedOvfPackage.OvfEnvelope;
|
|
||||||
|
|
||||||
if (oldTypeOfImport != ImportType.Ovf
|
var oldSelectedOvfPackage = _selectedOvfPackage;
|
||||||
|| m_pageSecurity.SelectedOvfPackage != newSelectedOvfPackage
|
_selectedOvfPackage = m_pageImportSource.SelectedOvfPackage;
|
||||||
|| m_pageEula.SelectedOvfEnvelope != newSelectedOvfEnvelope
|
|
||||||
|| m_pageHost.SelectedOvfEnvelope != newSelectedOvfEnvelope
|
if (oldTypeOfImport != ImportType.Ovf || oldSelectedOvfPackage != _selectedOvfPackage)
|
||||||
|| m_pageHost.VmMappings != newVmMappings
|
|
||||||
|| m_pageStorage.SelectedOvfEnvelope != newSelectedOvfEnvelope
|
|
||||||
|| lunPerVdiMappingPage.SelectedOvfEnvelope != newSelectedOvfEnvelope
|
|
||||||
|| m_pageHost.SelectedOvfEnvelope != newSelectedOvfEnvelope)
|
|
||||||
{
|
{
|
||||||
m_pageEula.SelectedOvfEnvelope = newSelectedOvfEnvelope;
|
m_pageEula.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
m_pageSecurity.SelectedOvfPackage = newSelectedOvfPackage;
|
m_pageSecurity.SelectedOvfPackage = _selectedOvfPackage;
|
||||||
|
|
||||||
CheckDisabledPages(m_pageEula, m_pageSecurity); //decide whether to disable these progress steps
|
CheckDisabledPages(m_pageEula, m_pageSecurity); //decide whether to disable these progress steps
|
||||||
ResetVmMappings(newSelectedOvfEnvelope);
|
|
||||||
m_pageHost.SelectedOvfEnvelope = newSelectedOvfEnvelope;
|
m_vmMappings.Clear();
|
||||||
|
string[] sysIds = OVF.FindSystemIds(_selectedOvfPackage.OvfEnvelope);
|
||||||
|
foreach (string sysId in sysIds)
|
||||||
|
m_vmMappings.Add(sysId, new VmMapping {VmNameLabel = FindVMName(_selectedOvfPackage.OvfEnvelope, sysId)});
|
||||||
|
|
||||||
|
m_pageHost.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
||||||
m_pageHost.VmMappings = newVmMappings;
|
m_pageHost.VmMappings = m_vmMappings;
|
||||||
m_pageStorage.SelectedOvfEnvelope = newSelectedOvfEnvelope;
|
m_pageStorage.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
lunPerVdiMappingPage.SelectedOvfEnvelope = newSelectedOvfEnvelope;
|
lunPerVdiMappingPage.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
m_pageNetwork.SelectedOvfEnvelope = newSelectedOvfEnvelope;
|
m_pageNetwork.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
|
|
||||||
NotifyNextPagesOfChange(m_pageEula, m_pageHost, m_pageStorage, m_pageNetwork, m_pageSecurity, m_pageOptions);
|
NotifyNextPagesOfChange(m_pageEula, m_pageHost, m_pageStorage, m_pageNetwork, m_pageSecurity, m_pageOptions);
|
||||||
}
|
}
|
||||||
@ -230,19 +229,19 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
RemovePages(appliancePages);
|
RemovePages(appliancePages);
|
||||||
RemovePages(xvaPages);
|
RemovePages(xvaPages);
|
||||||
AddAfterPage(m_pageImportSource, imagePages);
|
AddAfterPage(m_pageImportSource, imagePages);
|
||||||
|
|
||||||
|
//if _targetConnection=null, i.e. we haven't selected a connection yet, do not add the page
|
||||||
|
if (_targetConnection != null && BootModesControl.ShowBootModeOptions(_targetConnection))
|
||||||
|
AddAfterPage(m_pageNetwork, m_pageBootOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
var newIsWim = m_pageImportSource.IsWIM;
|
var oldSelectedImagePath = _selectedImagePath;
|
||||||
|
_selectedImagePath = m_pageImportSource.FilePath;
|
||||||
|
|
||||||
if (oldTypeOfImport != ImportType.Vhd
|
if (oldTypeOfImport != ImportType.Vhd || oldSelectedImagePath != _selectedImagePath)
|
||||||
|| m_pageVMconfig.IsWim != newIsWim
|
|
||||||
|| m_pageHost.VmMappings != newVmMappings
|
|
||||||
|| m_pageHost.SelectedOvfEnvelope != null)
|
|
||||||
{
|
{
|
||||||
m_pageVMconfig.IsWim = newIsWim;
|
m_vmMappings.Clear();
|
||||||
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
m_pageVMconfig.IsWim = m_pageImportSource.IsWIM;
|
||||||
m_pageHost.SelectedOvfEnvelope = null;
|
|
||||||
m_pageHost.VmMappings = newVmMappings;
|
|
||||||
NotifyNextPagesOfChange(m_pageVMconfig, m_pageHost, m_pageStorage, m_pageNetwork, m_pageOptions);
|
NotifyNextPagesOfChange(m_pageVMconfig, m_pageHost, m_pageStorage, m_pageNetwork, m_pageOptions);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -260,60 +259,107 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
m_pageXvaStorage.FilePath = m_pageImportSource.FilePath;
|
m_pageXvaStorage.FilePath = m_pageImportSource.FilePath;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
else if (type == typeof(ImageVMConfigPage))
|
else if (type == typeof(ImageVMConfigPage))
|
||||||
{
|
{
|
||||||
//then use it to create an ovf for the import
|
var newMapping = new VmMapping
|
||||||
|
|
||||||
var newEnvelope = OVF.CreateOvfEnvelope(m_pageVMconfig.VmName,
|
|
||||||
m_pageVMconfig.CpuCount, m_pageVMconfig.Memory,
|
|
||||||
m_pageBootOptions.BootParams, m_pageBootOptions.PlatformSettings,
|
|
||||||
m_pageImportSource.DiskCapacity, m_pageImportSource.IsWIM, m_pageVMconfig.AdditionalSpace,
|
|
||||||
m_pageImportSource.FilePath, m_pageImportSource.ImageLength, BrandManager.ProductBrand);
|
|
||||||
|
|
||||||
if (newEnvelope != m_envelopeFromVhd)
|
|
||||||
{
|
{
|
||||||
ResetVmMappings(m_envelopeFromVhd);
|
VmNameLabel = m_pageVMconfig.VmName,
|
||||||
NotifyNextPagesOfChange(m_pageHost, m_pageStorage, m_pageNetwork);
|
CpuCount = m_pageVMconfig.CpuCount,
|
||||||
|
Capacity = m_pageImportSource.DiskCapacity + m_pageVMconfig.AdditionalSpace,
|
||||||
|
Memory = m_pageVMconfig.Memory,
|
||||||
|
BootParams = m_pageBootOptions.BootParams,
|
||||||
|
PlatformSettings = m_pageBootOptions.PlatformSettings
|
||||||
|
};
|
||||||
|
|
||||||
|
var oldMapping = m_vmMappings.Values.FirstOrDefault();
|
||||||
|
if (oldMapping != null)
|
||||||
|
{
|
||||||
|
newMapping.XenRef = oldMapping.XenRef;
|
||||||
|
newMapping.TargetName = oldMapping.TargetName;
|
||||||
|
newMapping.Storage = oldMapping.Storage;
|
||||||
|
newMapping.StorageToAttach = oldMapping.StorageToAttach;
|
||||||
|
newMapping.Networks = oldMapping.Networks;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_envelopeFromVhd = newEnvelope;
|
if (!newMapping.Equals(oldMapping))
|
||||||
m_pageStorage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
{
|
||||||
lunPerVdiMappingPage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
m_envelopeFromVhd = OVF.CreateOvfEnvelope(newMapping.VmNameLabel,
|
||||||
m_pageNetwork.SelectedOvfEnvelope = m_envelopeFromVhd;
|
newMapping.CpuCount, newMapping.Memory,
|
||||||
|
newMapping.BootParams, newMapping.PlatformSettings,
|
||||||
|
newMapping.Capacity,
|
||||||
|
m_pageImportSource.FilePath, m_pageImportSource.ImageLength, BrandManager.ProductBrand);
|
||||||
|
|
||||||
|
m_vmMappings.Clear();
|
||||||
|
var sysId = OVF.FindSystemIds(m_envelopeFromVhd).First();
|
||||||
|
m_vmMappings.Add(sysId, newMapping);
|
||||||
|
|
||||||
|
m_pageHost.VmMappings = m_vmMappings;
|
||||||
|
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
||||||
|
|
||||||
|
m_pageHost.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
|
m_pageStorage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
|
lunPerVdiMappingPage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
|
m_pageNetwork.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
|
|
||||||
|
NotifyNextPagesOfChange(m_pageHost, lunPerVdiMappingPage, m_pageStorage, m_pageNetwork);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == typeof(ImportSelectHostPage))
|
else if (type == typeof(ImportSelectHostPage))
|
||||||
{
|
{
|
||||||
var newConnection = m_pageHost.ChosenItem?.Connection;
|
var oldTargetConnection = _targetConnection;
|
||||||
var newMappings = m_pageHost.VmMappings;
|
_targetConnection = m_pageHost.ChosenItem?.Connection;
|
||||||
|
var oldVmMappings = m_vmMappings;
|
||||||
|
m_vmMappings = m_pageHost.VmMappings;
|
||||||
|
|
||||||
RemovePage(m_pageRbac);
|
if (oldTargetConnection != _targetConnection)
|
||||||
ConfigureRbacPage(TargetConnection);
|
{
|
||||||
|
RemovePage(m_pageRbac);
|
||||||
|
ConfigureRbacPage(_targetConnection);
|
||||||
|
|
||||||
if (m_pageStorage.VmMappings != newMappings
|
RemovePage(m_pageBootOptions);
|
||||||
|| m_pageNetwork.Connection != newConnection
|
if (m_typeOfImport == ImportType.Vhd && BootModesControl.ShowBootModeOptions(_targetConnection))
|
||||||
|| m_pageOptions.Connection != newConnection)
|
AddAfterPage(m_pageNetwork, m_pageBootOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pageStorage.VmMappings = m_vmMappings;
|
||||||
|
m_pageStorage.Connection = _targetConnection;
|
||||||
|
m_pageNetwork.Connection = _targetConnection;
|
||||||
|
m_pageOptions.Connection = _targetConnection;
|
||||||
|
m_pageBootOptions.Connection = _targetConnection;
|
||||||
|
|
||||||
|
if (oldTargetConnection != _targetConnection || oldVmMappings != m_vmMappings)
|
||||||
NotifyNextPagesOfChange(m_pageStorage, m_pageNetwork, m_pageOptions);
|
NotifyNextPagesOfChange(m_pageStorage, m_pageNetwork, m_pageOptions);
|
||||||
|
}
|
||||||
|
else if (type == typeof(ImportBootOptionPage))
|
||||||
|
{
|
||||||
|
var oldMapping = m_vmMappings.Values.First();
|
||||||
|
|
||||||
if (m_pageBootOptions.Connection != newConnection && m_typeOfImport != oldTypeOfImport)
|
if (oldMapping.BootParams != m_pageBootOptions.BootParams ||
|
||||||
|
oldMapping.PlatformSettings != m_pageBootOptions.PlatformSettings)
|
||||||
{
|
{
|
||||||
RemovePage(m_pageBootOptions);
|
string systemId = null;
|
||||||
if (m_typeOfImport == ImportType.Vhd && BootModesControl.ShowBootModeOptions(TargetConnection))
|
if (m_envelopeFromVhd.Item is VirtualSystem_Type vs)
|
||||||
{
|
systemId = vs.id;
|
||||||
AddAfterPage(m_pageNetwork, m_pageBootOptions);
|
else if (m_envelopeFromVhd.Item is VirtualSystemCollection_Type vsc)
|
||||||
}
|
systemId = vsc.Content.FirstOrDefault()?.id;
|
||||||
|
|
||||||
|
if (oldMapping.BootParams != m_pageBootOptions.BootParams)
|
||||||
|
{
|
||||||
|
m_envelopeFromVhd = OVF.UpdateBootParams(m_envelopeFromVhd, systemId, m_pageBootOptions.BootParams);
|
||||||
|
m_vmMappings.Values.First().BootParams = m_pageBootOptions.BootParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldMapping.PlatformSettings != m_pageBootOptions.PlatformSettings)
|
||||||
|
{
|
||||||
|
m_envelopeFromVhd = OVF.UpdatePlatform(m_envelopeFromVhd, systemId, m_pageBootOptions.PlatformSettings);
|
||||||
|
m_vmMappings.Values.First().PlatformSettings = m_pageBootOptions.PlatformSettings;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_vmMappings = newMappings;
|
m_pageStorage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
TargetConnection = newConnection;
|
lunPerVdiMappingPage.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
|
m_pageNetwork.SelectedOvfEnvelope = m_envelopeFromVhd;
|
||||||
m_pageStorage.VmMappings = m_vmMappings;
|
|
||||||
m_pageStorage.Connection = TargetConnection;
|
|
||||||
m_pageNetwork.Connection = TargetConnection;
|
|
||||||
m_pageOptions.Connection = TargetConnection;
|
|
||||||
m_pageBootOptions.Connection = TargetConnection;
|
|
||||||
}
|
}
|
||||||
else if (type == typeof(ImportSelectStoragePage))
|
else if (type == typeof(ImportSelectStoragePage))
|
||||||
{
|
{
|
||||||
@ -339,31 +385,31 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
}
|
}
|
||||||
else if (type == typeof(GlobalSelectHost))
|
else if (type == typeof(GlobalSelectHost))
|
||||||
{
|
{
|
||||||
var newConnection = m_pageXvaHost.SelectedHost == null ? m_pageXvaHost.SelectedConnection : m_pageXvaHost.SelectedHost.Connection;
|
var oldSelectedAffinity = _selectedAffinity;
|
||||||
var newStorageTargetHost = m_ignoreAffinitySet ? null : m_pageXvaHost.SelectedHost;
|
_selectedAffinity = m_pageXvaHost.SelectedHost;
|
||||||
var newNetworkSelectedHost = m_pageXvaHost.SelectedHost;
|
var oldTargetConnection = _targetConnection;
|
||||||
|
_targetConnection = _selectedAffinity == null ? m_pageXvaHost.SelectedConnection : _selectedAffinity.Connection;
|
||||||
|
|
||||||
RemovePage(m_pageRbac);
|
if (oldTargetConnection != _targetConnection)
|
||||||
ConfigureRbacPage(newConnection);
|
{
|
||||||
|
RemovePage(m_pageRbac);
|
||||||
|
ConfigureRbacPage(_targetConnection);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_pageXvaStorage.MTargetConnection != newConnection
|
m_pageXvaStorage.TargetConnection = _targetConnection;
|
||||||
|| m_pageXvaNetwork.MSelectedConnection != newConnection
|
m_pageXvaStorage.TargetHost = m_ignoreAffinitySet ? null : _selectedAffinity;
|
||||||
|| !m_pageXvaNetwork.MSelectedAffinity.Equals(newNetworkSelectedHost)
|
|
||||||
|| !m_pageXvaStorage.MTargetHost.Equals(newStorageTargetHost)
|
m_pageXvaNetwork.SelectedConnection = _targetConnection;
|
||||||
)
|
m_pageXvaNetwork.SelectedAffinity = _selectedAffinity;
|
||||||
|
|
||||||
|
if (oldTargetConnection != _targetConnection ||
|
||||||
|
oldSelectedAffinity != null && _selectedAffinity != null && oldSelectedAffinity.opaque_ref != _selectedAffinity.opaque_ref)
|
||||||
NotifyNextPagesOfChange(m_pageXvaStorage, m_pageXvaNetwork);
|
NotifyNextPagesOfChange(m_pageXvaStorage, m_pageXvaNetwork);
|
||||||
|
|
||||||
m_pageXvaStorage.MTargetConnection = newConnection;
|
|
||||||
m_pageXvaStorage.MTargetHost = newStorageTargetHost;
|
|
||||||
|
|
||||||
m_pageXvaNetwork.MSelectedConnection = newConnection;
|
|
||||||
m_pageXvaNetwork.MSelectedAffinity = m_pageXvaHost.SelectedHost;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (type == typeof(StoragePickerPage))
|
else if (type == typeof(StoragePickerPage))
|
||||||
{
|
{
|
||||||
m_pageFinish.ShowStartVmsGroupBox = m_pageXvaStorage.ImportedVm != null && !m_pageXvaStorage.ImportedVm.is_a_template;
|
m_pageFinish.ShowStartVmsGroupBox = m_pageXvaStorage.ImportedVm != null && !m_pageXvaStorage.ImportedVm.is_a_template;
|
||||||
m_pageXvaNetwork.SetVm(m_pageXvaStorage.ImportedVm);
|
m_pageXvaNetwork.VM = m_pageXvaStorage.ImportedVm;
|
||||||
NotifyNextPagesOfChange(m_pageXvaNetwork);
|
NotifyNextPagesOfChange(m_pageXvaNetwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,7 +613,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
temp.Add(new Tuple(Messages.FINISH_PAGE_VMNAME, m_pageVMconfig.VmName));
|
temp.Add(new Tuple(Messages.FINISH_PAGE_VMNAME, m_pageVMconfig.VmName));
|
||||||
temp.Add(new Tuple(Messages.FINISH_PAGE_CPUCOUNT, m_pageVMconfig.CpuCount.ToString()));
|
temp.Add(new Tuple(Messages.FINISH_PAGE_CPUCOUNT, m_pageVMconfig.CpuCount.ToString()));
|
||||||
temp.Add(new Tuple(Messages.FINISH_PAGE_MEMORY, string.Format(Messages.VAL_MB, m_pageVMconfig.Memory)));
|
temp.Add(new Tuple(Messages.FINISH_PAGE_MEMORY, string.Format(Messages.VAL_MB, m_pageVMconfig.Memory)));
|
||||||
if (Helpers.NaplesOrGreater(TargetConnection))
|
if (Helpers.NaplesOrGreater(_targetConnection))
|
||||||
temp.Add(new Tuple(Messages.BOOT_MODE, m_pageBootOptions.SelectedBootMode.StringOf()));
|
temp.Add(new Tuple(Messages.BOOT_MODE, m_pageBootOptions.SelectedBootMode.StringOf()));
|
||||||
|
|
||||||
if (m_pageImportSource.IsWIM)
|
if (m_pageImportSource.IsWIM)
|
||||||
@ -609,23 +655,6 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResetVmMappings(EnvelopeType ovfEnvelope)
|
|
||||||
{
|
|
||||||
string[] sysIds = OVF.FindSystemIds(ovfEnvelope);
|
|
||||||
m_vmMappings.Clear();
|
|
||||||
|
|
||||||
foreach (string sysId in sysIds)
|
|
||||||
{
|
|
||||||
var vmMap = new VmMapping
|
|
||||||
{
|
|
||||||
VmNameLabel = (m_typeOfImport == ImportType.Ovf)
|
|
||||||
? FindVMName(ovfEnvelope, sysId)
|
|
||||||
: m_pageVMconfig.VmName //it should only iterate once
|
|
||||||
};
|
|
||||||
m_vmMappings.Add(sysId, vmMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsGUID(string expression)
|
private bool IsGUID(string expression)
|
||||||
{
|
{
|
||||||
if (expression != null)
|
if (expression != null)
|
||||||
@ -709,15 +738,15 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
private void m_pageXvaStorage_ImportVmCompleted()
|
private void m_pageXvaStorage_ImportVmCompleted()
|
||||||
{
|
{
|
||||||
Program.Invoke(this, () =>
|
Program.Invoke(this, () =>
|
||||||
{
|
{
|
||||||
if (CurrentStepTabPage.GetType() == typeof(StoragePickerPage))
|
if (CurrentStepTabPage.GetType() == typeof(StoragePickerPage))
|
||||||
{
|
{
|
||||||
m_pageFinish.ShowStartVmsGroupBox = m_pageXvaStorage.ImportedVm != null && !m_pageXvaStorage.ImportedVm.is_a_template;
|
m_pageFinish.ShowStartVmsGroupBox = m_pageXvaStorage.ImportedVm != null && !m_pageXvaStorage.ImportedVm.is_a_template;
|
||||||
m_pageXvaNetwork.SetVm(m_pageXvaStorage.ImportedVm);
|
m_pageXvaNetwork.VM = m_pageXvaStorage.ImportedVm;
|
||||||
NotifyNextPagesOfChange(m_pageXvaNetwork);
|
NotifyNextPagesOfChange(m_pageXvaNetwork);
|
||||||
NextStep();
|
NextStep();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowXenAppXenDesktopWarning(IXenConnection connection)
|
private void ShowXenAppXenDesktopWarning(IXenConnection connection)
|
||||||
|
@ -99,7 +99,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnvelopeType SelectedOvfEnvelope { get; set; }
|
public EnvelopeType SelectedOvfEnvelope { private get; set; }
|
||||||
|
|
||||||
private StorageResourceContainer ResourceData(string sysId)
|
private StorageResourceContainer ResourceData(string sysId)
|
||||||
{
|
{
|
||||||
|
@ -49,9 +49,6 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
#region Private fields
|
#region Private fields
|
||||||
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
internal IXenConnection MSelectedConnection { get; set; }
|
|
||||||
internal Host MSelectedAffinity { get; set; }
|
|
||||||
private VM m_vm;
|
|
||||||
private bool m_buttonNextEnabled;
|
private bool m_buttonNextEnabled;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -108,6 +105,15 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
#region Accessors
|
#region Accessors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Should be set before the Affinity is set.
|
||||||
|
/// </summary>
|
||||||
|
internal IXenConnection SelectedConnection { get; set; }
|
||||||
|
|
||||||
|
internal Host SelectedAffinity { get; set; }
|
||||||
|
|
||||||
|
internal VM VM { get; set; }
|
||||||
|
|
||||||
public List<VIF> VIFs
|
public List<VIF> VIFs
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -136,12 +142,6 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
public void SetVm(VM vm)
|
|
||||||
{
|
|
||||||
m_vm = vm;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
|
|
||||||
private void UpdateControlsEnabledState(bool enabled)
|
private void UpdateControlsEnabledState(bool enabled)
|
||||||
@ -155,7 +155,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
{
|
{
|
||||||
NetworkNetworkColumn.Items.Clear();
|
NetworkNetworkColumn.Items.Clear();
|
||||||
|
|
||||||
var networks = MSelectedConnection.Cache.Networks.Where(ShowNetwork);
|
var networks = SelectedConnection.Cache.Networks.Where(ShowNetwork);
|
||||||
|
|
||||||
foreach (XenAPI.Network network in networks)
|
foreach (XenAPI.Network network in networks)
|
||||||
{
|
{
|
||||||
@ -174,18 +174,18 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
m_networkGridView.SuspendLayout();
|
m_networkGridView.SuspendLayout();
|
||||||
m_networkGridView.Rows.Clear();
|
m_networkGridView.Rows.Clear();
|
||||||
|
|
||||||
if (m_vm.is_a_template && m_vm.VIFs.Count < 1)
|
if (VM.is_a_template && VM.VIFs.Count < 1)
|
||||||
{
|
{
|
||||||
// We need to automatically generate VIFs for Networks marked AutoPlug=true
|
// We need to automatically generate VIFs for Networks marked AutoPlug=true
|
||||||
|
|
||||||
var networks = MSelectedConnection.Cache.Networks;
|
var networks = SelectedConnection.Cache.Networks;
|
||||||
foreach (XenAPI.Network network in networks)
|
foreach (XenAPI.Network network in networks)
|
||||||
{
|
{
|
||||||
if (m_networkGridView.Rows.Count < m_vm.MaxVIFsAllowed() && ShowNetwork(network) && network.GetAutoPlug())
|
if (m_networkGridView.Rows.Count < VM.MaxVIFsAllowed() && ShowNetwork(network) && network.GetAutoPlug())
|
||||||
{
|
{
|
||||||
AddVIFRow(new VIF
|
AddVIFRow(new VIF
|
||||||
{
|
{
|
||||||
Connection = MSelectedConnection,
|
Connection = SelectedConnection,
|
||||||
device = m_networkGridView.Rows.Count.ToString(),
|
device = m_networkGridView.Rows.Count.ToString(),
|
||||||
network = new XenRef<XenAPI.Network>(network.opaque_ref),
|
network = new XenRef<XenAPI.Network>(network.opaque_ref),
|
||||||
MAC = Messages.MAC_AUTOGENERATE
|
MAC = Messages.MAC_AUTOGENERATE
|
||||||
@ -193,16 +193,16 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_vm.is_a_template)
|
else if (VM.is_a_template)
|
||||||
{
|
{
|
||||||
// We need to create off the _vmTemplate
|
// We need to create off the _vmTemplate
|
||||||
|
|
||||||
var vifs = MSelectedConnection.ResolveAll(m_vm.VIFs);
|
var vifs = SelectedConnection.ResolveAll(VM.VIFs);
|
||||||
foreach (VIF vif in vifs)
|
foreach (VIF vif in vifs)
|
||||||
{
|
{
|
||||||
AddVIFRow(new VIF
|
AddVIFRow(new VIF
|
||||||
{
|
{
|
||||||
Connection = MSelectedConnection,
|
Connection = SelectedConnection,
|
||||||
device = vif.device,
|
device = vif.device,
|
||||||
network = vif.network,
|
network = vif.network,
|
||||||
MAC = Messages.MAC_AUTOGENERATE
|
MAC = Messages.MAC_AUTOGENERATE
|
||||||
@ -212,7 +212,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//We need to recreate off vm
|
//We need to recreate off vm
|
||||||
var vifs = MSelectedConnection.ResolveAll(m_vm.VIFs);
|
var vifs = SelectedConnection.ResolveAll(VM.VIFs);
|
||||||
foreach (VIF vif in vifs)
|
foreach (VIF vif in vifs)
|
||||||
AddVIFRow(vif);
|
AddVIFRow(vif);
|
||||||
}
|
}
|
||||||
@ -228,7 +228,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
private XenAPI.Network GetDefaultNetwork()
|
private XenAPI.Network GetDefaultNetwork()
|
||||||
{
|
{
|
||||||
foreach (XenAPI.Network network in MSelectedConnection.Cache.Networks)
|
foreach (XenAPI.Network network in SelectedConnection.Cache.Networks)
|
||||||
if (ShowNetwork(network))
|
if (ShowNetwork(network))
|
||||||
return network;
|
return network;
|
||||||
|
|
||||||
@ -249,13 +249,13 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
if (network.IsMember())
|
if (network.IsMember())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (MSelectedAffinity != null && !MSelectedAffinity.CanSeeNetwork(network))
|
if (SelectedAffinity != null && !SelectedAffinity.CanSeeNetwork(network))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (MSelectedAffinity == null && !network.AllHostsCanSeeNetwork())
|
if (SelectedAffinity == null && !network.AllHostsCanSeeNetwork())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (network.IsSriov() && !m_vm.HasSriovRecommendation())
|
if (network.IsSriov() && !VM.HasSriovRecommendation())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -264,7 +264,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
private void AddVIFRow(VIF vif)
|
private void AddVIFRow(VIF vif)
|
||||||
{
|
{
|
||||||
var row = new VifRow(vif);
|
var row = new VifRow(vif);
|
||||||
XenAPI.Network network = MSelectedConnection.Resolve(vif.network);
|
XenAPI.Network network = SelectedConnection.Resolve(vif.network);
|
||||||
bool isGuestInstallerNetwork = network != null && network.IsGuestInstallerNetwork();
|
bool isGuestInstallerNetwork = network != null && network.IsGuestInstallerNetwork();
|
||||||
|
|
||||||
ToStringWrapper<XenAPI.Network> comboBoxEntry = FindComboBoxEntryForNetwork(network);
|
ToStringWrapper<XenAPI.Network> comboBoxEntry = FindComboBoxEntryForNetwork(network);
|
||||||
@ -332,7 +332,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
private void m_buttonAddNetwork_Click(object sender, EventArgs e)
|
private void m_buttonAddNetwork_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (m_networkGridView.Rows.Count >= m_vm.MaxVIFsAllowed())
|
if (m_networkGridView.Rows.Count >= VM.MaxVIFsAllowed())
|
||||||
{
|
{
|
||||||
using (var dlg = new ErrorDialog(FriendlyErrorNames.VIFS_MAX_ALLOWED)
|
using (var dlg = new ErrorDialog(FriendlyErrorNames.VIFS_MAX_ALLOWED)
|
||||||
{WindowTitle = FriendlyErrorNames.VIFS_MAX_ALLOWED_TITLE})
|
{WindowTitle = FriendlyErrorNames.VIFS_MAX_ALLOWED_TITLE})
|
||||||
@ -342,7 +342,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VIF vif = new VIF {Connection = MSelectedConnection};
|
VIF vif = new VIF {Connection = SelectedConnection};
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -45,9 +45,6 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
public partial class StoragePickerPage : XenTabPage
|
public partial class StoragePickerPage : XenTabPage
|
||||||
{
|
{
|
||||||
#region Private fields
|
#region Private fields
|
||||||
|
|
||||||
internal Host MTargetHost { set; get; }
|
|
||||||
internal IXenConnection MTargetConnection { get; set; }
|
|
||||||
private volatile Task m_importTask;
|
private volatile Task m_importTask;
|
||||||
private bool m_alreadyFoundVM;
|
private bool m_alreadyFoundVM;
|
||||||
private ActionProgressDialog m_actionDialog;
|
private ActionProgressDialog m_actionDialog;
|
||||||
@ -99,8 +96,8 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
SetButtonNextEnabled(false);
|
SetButtonNextEnabled(false);
|
||||||
m_buttonPreviousEnabled = false;
|
m_buttonPreviousEnabled = false;
|
||||||
OnPageUpdated();
|
OnPageUpdated();
|
||||||
ImportXvaAction = new ImportVmAction(MTargetHost == null ? MTargetConnection : MTargetHost.Connection,
|
ImportXvaAction = new ImportVmAction(TargetHost == null ? TargetConnection : TargetHost.Connection,
|
||||||
MTargetHost, FilePath, SR,
|
TargetHost, FilePath, SR,
|
||||||
VMOperationCommand.WarningDialogHAInvalidConfig, VMOperationCommand.StartDiagnosisForm);
|
VMOperationCommand.WarningDialogHAInvalidConfig, VMOperationCommand.StartDiagnosisForm);
|
||||||
ImportXvaAction.Completed += m_importXvaAction_Completed;
|
ImportXvaAction.Completed += m_importXvaAction_Completed;
|
||||||
|
|
||||||
@ -120,7 +117,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
public override void PopulatePage()
|
public override void PopulatePage()
|
||||||
{
|
{
|
||||||
SetButtonNextEnabled(false);
|
SetButtonNextEnabled(false);
|
||||||
m_srPicker.PopulateAsync(SrPicker.SRPickerType.VM, MTargetConnection, MTargetHost, null, null);
|
m_srPicker.PopulateAsync(SrPicker.SRPickerType.VM, TargetConnection, TargetHost, null, null);
|
||||||
IsDirty = true;
|
IsDirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +135,10 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
#region Accessors
|
#region Accessors
|
||||||
|
|
||||||
|
internal IXenConnection TargetConnection { get; set; }
|
||||||
|
|
||||||
|
internal Host TargetHost { get; set; }
|
||||||
|
|
||||||
public ImportVmAction ImportXvaAction { get; private set; }
|
public ImportVmAction ImportXvaAction { get; private set; }
|
||||||
|
|
||||||
public string FilePath { private get; set; }
|
public string FilePath { private get; set; }
|
||||||
@ -184,12 +185,12 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
while (ImportXvaAction.RelatedTask == null)
|
while (ImportXvaAction.RelatedTask == null)
|
||||||
Thread.Sleep(100);
|
Thread.Sleep(100);
|
||||||
|
|
||||||
while ((m_importTask = MTargetConnection.Resolve(ImportXvaAction.RelatedTask)) == null)
|
while ((m_importTask = TargetConnection.Resolve(ImportXvaAction.RelatedTask)) == null)
|
||||||
Thread.Sleep(100);
|
Thread.Sleep(100);
|
||||||
|
|
||||||
// We register a XenObjectsUpdated event handler where we check that the import task has the object creation phase marked as "complete";
|
// We register a XenObjectsUpdated event handler where we check that the import task has the object creation phase marked as "complete";
|
||||||
// Once the object creation is complete, we look for the vm; When we found the vm we unregister this event handler;
|
// Once the object creation is complete, we look for the vm; When we found the vm we unregister this event handler;
|
||||||
MTargetConnection.XenObjectsUpdated += targetConnection_XenObjectsUpdated;
|
TargetConnection.XenObjectsUpdated += targetConnection_XenObjectsUpdated;
|
||||||
|
|
||||||
Program.Invoke(this, CheckTask);
|
Program.Invoke(this, CheckTask);
|
||||||
}
|
}
|
||||||
@ -221,11 +222,11 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
{
|
{
|
||||||
// Should never get here (as we unregister XenObjectsUpdated event handler after we find the vm) but just in case,
|
// Should never get here (as we unregister XenObjectsUpdated event handler after we find the vm) but just in case,
|
||||||
// unregister XenObjectsUpdated event handler
|
// unregister XenObjectsUpdated event handler
|
||||||
MTargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
TargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (VM vm in MTargetConnection.Cache.VMs)
|
foreach (VM vm in TargetConnection.Cache.VMs)
|
||||||
{
|
{
|
||||||
if (!vm.other_config.ContainsKey(ImportVmAction.IMPORT_TASK))
|
if (!vm.other_config.ContainsKey(ImportVmAction.IMPORT_TASK))
|
||||||
continue;
|
continue;
|
||||||
@ -238,7 +239,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
ImportedVm = vm;
|
ImportedVm = vm;
|
||||||
|
|
||||||
// We found the VM, unregister XenObjectsUpdated event handler
|
// We found the VM, unregister XenObjectsUpdated event handler
|
||||||
MTargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
TargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
||||||
|
|
||||||
// And close the dialog, flick to next page.
|
// And close the dialog, flick to next page.
|
||||||
m_actionDialog.Close();
|
m_actionDialog.Close();
|
||||||
@ -267,7 +268,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
if (!(ImportXvaAction.Succeeded) || ImportXvaAction.Cancelled)
|
if (!(ImportXvaAction.Succeeded) || ImportXvaAction.Cancelled)
|
||||||
{
|
{
|
||||||
// task failed or has been cancelled, unregister XenObjectsUpdated event handler
|
// task failed or has been cancelled, unregister XenObjectsUpdated event handler
|
||||||
MTargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
TargetConnection.XenObjectsUpdated -= targetConnection_XenObjectsUpdated;
|
||||||
|
|
||||||
// Give the user a chance to correct any errors
|
// Give the user a chance to correct any errors
|
||||||
m_actionDialog = null;
|
m_actionDialog = null;
|
||||||
|
@ -44,6 +44,11 @@ namespace XenAdmin.Mappings
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string VmNameLabel { get; set; }
|
public string VmNameLabel { get; set; }
|
||||||
|
public ulong Capacity { get; set; }
|
||||||
|
public ulong CpuCount { get; set; }
|
||||||
|
public ulong Memory { get; set; }
|
||||||
|
public string BootParams { get; set; }
|
||||||
|
public string PlatformSettings { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// OpaqueRef of the target pool or host
|
/// OpaqueRef of the target pool or host
|
||||||
@ -66,5 +71,26 @@ namespace XenAdmin.Mappings
|
|||||||
/// Keyed on the id in the ovf file
|
/// Keyed on the id in the ovf file
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<string, XenAPI.Network> Networks { get; set; }
|
public Dictionary<string, XenAPI.Network> Networks { get; set; }
|
||||||
}
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
return obj is VmMapping other &&
|
||||||
|
VmNameLabel == other.VmNameLabel &&
|
||||||
|
Capacity == other.Capacity &&
|
||||||
|
CpuCount == other.CpuCount &&
|
||||||
|
Memory == other.Memory &&
|
||||||
|
BootParams == other.BootParams &&
|
||||||
|
PlatformSettings == other.PlatformSettings &&
|
||||||
|
XenRef == other.XenRef &&
|
||||||
|
TargetName == other.TargetName &&
|
||||||
|
Storage == other.Storage &&
|
||||||
|
StorageToAttach == other.StorageToAttach &&
|
||||||
|
Networks == other.Networks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return base.GetHashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1388,7 +1388,7 @@ namespace XenOvf
|
|||||||
#region CREATEs
|
#region CREATEs
|
||||||
|
|
||||||
public static EnvelopeType CreateOvfEnvelope(string vmName, ulong cpuCount, ulong memory,
|
public static EnvelopeType CreateOvfEnvelope(string vmName, ulong cpuCount, ulong memory,
|
||||||
string bootParams, string platformSettings, ulong diskCapacity, bool isWim, ulong additionalSpace,
|
string bootParams, string platformSettings, ulong capacity,
|
||||||
string diskPath, ulong imageLength, string productBrand)
|
string diskPath, ulong imageLength, string productBrand)
|
||||||
{
|
{
|
||||||
EnvelopeType env = CreateEnvelope(vmName);
|
EnvelopeType env = CreateEnvelope(vmName);
|
||||||
@ -1415,10 +1415,6 @@ namespace XenOvf
|
|||||||
AddNetwork(env, systemID, netId, string.Format(Messages.NETWORK_NAME, 0), Messages.OVF_NET_DESCRIPTION, null);
|
AddNetwork(env, systemID, netId, string.Format(Messages.NETWORK_NAME, 0), Messages.OVF_NET_DESCRIPTION, null);
|
||||||
|
|
||||||
string diskId = Guid.NewGuid().ToString();
|
string diskId = Guid.NewGuid().ToString();
|
||||||
ulong capacity = diskCapacity;
|
|
||||||
|
|
||||||
if (isWim)
|
|
||||||
capacity += additionalSpace;
|
|
||||||
|
|
||||||
AddDisk(env, systemID, diskId, diskPath, true, Messages.OVF_DISK_CAPTION, Messages.OVF_CREATED, imageLength, capacity);
|
AddDisk(env, systemID, diskId, diskPath, true, Messages.OVF_DISK_CAPTION, Messages.OVF_CREATED, imageLength, capacity);
|
||||||
|
|
||||||
@ -1426,6 +1422,45 @@ namespace XenOvf
|
|||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static EnvelopeType UpdateBootParams(EnvelopeType env, string systemID, string bootParams)
|
||||||
|
{
|
||||||
|
return UpdateOtherSystemSettingsData(env, systemID, "HVM_boot_params", "order=dc;" + bootParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EnvelopeType UpdatePlatform(EnvelopeType env, string systemID, string platformSettings)
|
||||||
|
{
|
||||||
|
return UpdateOtherSystemSettingsData(env, systemID, "platform", "nx=true;acpi=true;apic=true;pae=true;stdvga=0;" + platformSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static EnvelopeType UpdateOtherSystemSettingsData(EnvelopeType env, string systemID, string setting, string value)
|
||||||
|
{
|
||||||
|
VirtualHardwareSection_Type[] vhsArray = FindVirtualHardwareSection(env, systemID);
|
||||||
|
VirtualHardwareSection_Type foundVhs = null;
|
||||||
|
|
||||||
|
foreach (VirtualHardwareSection_Type vhs in vhsArray)
|
||||||
|
{
|
||||||
|
if (vhs.System?.VirtualSystemType == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var vst = vhs.System.VirtualSystemType.Value;
|
||||||
|
if (string.IsNullOrEmpty(vst) || !vst.ToLower().StartsWith("xen") && !vst.ToLower().StartsWith("hvm"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foundVhs = vhs;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foundVhs == null)
|
||||||
|
return env;
|
||||||
|
|
||||||
|
var config = foundVhs.VirtualSystemOtherConfigurationData.FirstOrDefault(d => d.Name == setting);
|
||||||
|
if (config == null)
|
||||||
|
return env;
|
||||||
|
|
||||||
|
config.Value = new cimString(value);
|
||||||
|
return env;
|
||||||
|
}
|
||||||
|
|
||||||
public EnvelopeType Create(DiskInfo[] vhdExports, string pathToOvf, string ovfName)
|
public EnvelopeType Create(DiskInfo[] vhdExports, string pathToOvf, string ovfName)
|
||||||
{
|
{
|
||||||
return Create(vhdExports, pathToOvf, ovfName, LANGUAGE);
|
return Create(vhdExports, pathToOvf, ovfName, LANGUAGE);
|
||||||
|
Loading…
Reference in New Issue
Block a user