mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-23 20:36:33 +01:00
CP-36392: Refactored so that GetHashCode() does not call the homonymous base class method.
This required refactoring the OVF.AddVirtualSystem() method to accept the system ID as a parameter. Also, removed some unused methods that were calling OVF.AddVirtualSystem(). Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
This commit is contained in:
parent
177c47f79f
commit
ec33caf4b5
@ -175,7 +175,7 @@ namespace XenAdmin.Wizards.CrossPoolMigrateWizard
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
vmsFromSelection.Add(vm);
|
vmsFromSelection.Add(vm);
|
||||||
m_vmMappings.Add(item.XenObject.opaque_ref, new VmMapping { VmNameLabel = item.XenObject.Name() });
|
m_vmMappings.Add(item.XenObject.opaque_ref, new VmMapping(item.XenObject.opaque_ref) {VmNameLabel = item.XenObject.Name()});
|
||||||
}
|
}
|
||||||
|
|
||||||
HasTemplatesOnly = vmsFromSelection.Count > 0 && vmsFromSelection.All(vm => vm.is_a_template);
|
HasTemplatesOnly = vmsFromSelection.Count > 0 && vmsFromSelection.All(vm => vm.is_a_template);
|
||||||
|
@ -209,7 +209,7 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
m_vmMappings.Clear();
|
m_vmMappings.Clear();
|
||||||
string[] sysIds = OVF.FindSystemIds(_selectedOvfPackage.OvfEnvelope);
|
string[] sysIds = OVF.FindSystemIds(_selectedOvfPackage.OvfEnvelope);
|
||||||
foreach (string sysId in sysIds)
|
foreach (string sysId in sysIds)
|
||||||
m_vmMappings.Add(sysId, new VmMapping {VmNameLabel = FindVMName(_selectedOvfPackage.OvfEnvelope, sysId)});
|
m_vmMappings.Add(sysId, new VmMapping(sysId) {VmNameLabel = FindVMName(_selectedOvfPackage.OvfEnvelope, sysId)});
|
||||||
|
|
||||||
m_pageHost.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
m_pageHost.SelectedOvfEnvelope = _selectedOvfPackage.OvfEnvelope;
|
||||||
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
m_pageHost.SetDefaultTarget(m_pageHost.ChosenItem ?? m_selectedObject);
|
||||||
@ -262,7 +262,9 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
}
|
}
|
||||||
else if (type == typeof(ImageVMConfigPage))
|
else if (type == typeof(ImageVMConfigPage))
|
||||||
{
|
{
|
||||||
var newMapping = new VmMapping
|
var sysId = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
|
var newMapping = new VmMapping(sysId)
|
||||||
{
|
{
|
||||||
VmNameLabel = m_pageVMconfig.VmName,
|
VmNameLabel = m_pageVMconfig.VmName,
|
||||||
CpuCount = m_pageVMconfig.CpuCount,
|
CpuCount = m_pageVMconfig.CpuCount,
|
||||||
@ -284,14 +286,13 @@ namespace XenAdmin.Wizards.ImportWizard
|
|||||||
|
|
||||||
if (!newMapping.Equals(oldMapping))
|
if (!newMapping.Equals(oldMapping))
|
||||||
{
|
{
|
||||||
m_envelopeFromVhd = OVF.CreateOvfEnvelope(newMapping.VmNameLabel,
|
m_envelopeFromVhd = OVF.CreateOvfEnvelope(sysId, newMapping.VmNameLabel,
|
||||||
newMapping.CpuCount, newMapping.Memory,
|
newMapping.CpuCount, newMapping.Memory,
|
||||||
newMapping.BootParams, newMapping.PlatformSettings,
|
newMapping.BootParams, newMapping.PlatformSettings,
|
||||||
newMapping.Capacity,
|
newMapping.Capacity,
|
||||||
m_pageImportSource.FilePath, m_pageImportSource.ImageLength, BrandManager.ProductBrand);
|
m_pageImportSource.FilePath, m_pageImportSource.ImageLength, BrandManager.ProductBrand);
|
||||||
|
|
||||||
m_vmMappings.Clear();
|
m_vmMappings.Clear();
|
||||||
var sysId = OVF.FindSystemIds(m_envelopeFromVhd).First();
|
|
||||||
m_vmMappings.Add(sysId, newMapping);
|
m_vmMappings.Add(sysId, newMapping);
|
||||||
|
|
||||||
m_pageHost.VmMappings = m_vmMappings;
|
m_pageHost.VmMappings = m_vmMappings;
|
||||||
|
@ -61,7 +61,8 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
|
|
||||||
#region CREATE ENVELOPE / ADD VIRTUAL SYSTEM
|
#region CREATE ENVELOPE / ADD VIRTUAL SYSTEM
|
||||||
EnvelopeType ovfEnv = OVF.CreateEnvelope(m_applianceFileName);
|
EnvelopeType ovfEnv = OVF.CreateEnvelope(m_applianceFileName);
|
||||||
string vsId = OVF.AddVirtualSystem(ovfEnv, vm.name_label);
|
string vsId = Guid.NewGuid().ToString();
|
||||||
|
OVF.AddVirtualSystem(ovfEnv, vm.name_label, vsId);
|
||||||
string vhsId = OVF.AddVirtualHardwareSection(ovfEnv, vsId);
|
string vhsId = OVF.AddVirtualHardwareSection(ovfEnv, vsId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -36,8 +36,11 @@ namespace XenAdmin.Mappings
|
|||||||
{
|
{
|
||||||
public class VmMapping
|
public class VmMapping
|
||||||
{
|
{
|
||||||
public VmMapping()
|
private readonly string _id;
|
||||||
|
|
||||||
|
public VmMapping(string id)
|
||||||
{
|
{
|
||||||
|
_id = id;
|
||||||
Storage = new Dictionary<string, SR>();
|
Storage = new Dictionary<string, SR>();
|
||||||
StorageToAttach = new Dictionary<string, VDI>();
|
StorageToAttach = new Dictionary<string, VDI>();
|
||||||
Networks = new Dictionary<string, XenAPI.Network>();
|
Networks = new Dictionary<string, XenAPI.Network>();
|
||||||
@ -93,7 +96,7 @@ namespace XenAdmin.Mappings
|
|||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
{
|
{
|
||||||
return base.GetHashCode();
|
return _id.GetHashCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,317 +153,10 @@ namespace XenOvf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnvelopeType ConvertPhysicaltoOVF(DiskInfo[] vhdExports, string pathToOvf, string ovfName)
|
|
||||||
{
|
|
||||||
return ConvertPhysicaltoOVF(vhdExports, pathToOvf, ovfName, LANGUAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public EnvelopeType ConvertPhysicaltoOVF(DiskInfo[] vhdExports, string pathToOvf, string ovfName, string lang)
|
|
||||||
{
|
|
||||||
CollectInformation();
|
|
||||||
var env = CreateEnvelope(ovfName, lang);
|
|
||||||
string vmUuid = AddVirtualSystem(env, lang, ovfName);
|
|
||||||
string vhsId = AddVirtualHardwareSection(env, vmUuid, lang);
|
|
||||||
AddVssd(env, vmUuid, vhsId);
|
|
||||||
AddCPUs(env, vmUuid);
|
|
||||||
AddMemory(env, vmUuid);
|
|
||||||
AddNetworks(env, vmUuid, lang);
|
|
||||||
CreateConnectedDevices(env, vmUuid, vhdExports);
|
|
||||||
|
|
||||||
#region CREATE PVP ENTRIES
|
|
||||||
|
|
||||||
foreach (DiskInfo di in vhdExports)
|
|
||||||
{
|
|
||||||
string pvpFilename = string.Format(@"{0}.pvp", Path.GetFileNameWithoutExtension(di.VhdFileName));
|
|
||||||
string pvpPathWithFilename = Path.Combine(pathToOvf, pvpFilename);
|
|
||||||
if (File.Exists(pvpPathWithFilename))
|
|
||||||
{
|
|
||||||
AddExternalFile(env, pvpFilename, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
FinalizeEnvelope(env);
|
|
||||||
log.DebugFormat("OVF.Create completed, {0}", ovfName);
|
|
||||||
return env;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Hyper-V Export CIM XML vm meta data to OVF xml
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="hvxmlFileName">filename</param>
|
|
||||||
/// <param name="ovfName">ovfname</param>
|
|
||||||
/// <param name="lang">language</param>
|
|
||||||
/// <returns>ovf xml string</returns>
|
|
||||||
public string ConvertHyperVtoOVF(string hvxmlFileName, string ovfName, string lang)
|
|
||||||
{
|
|
||||||
string hvxml = Tools.LoadFile(hvxmlFileName);
|
|
||||||
hvxml = hvxml.Replace("utf-16", "utf-8"); // fails if we don't do this.
|
|
||||||
string xmlstring = null;
|
|
||||||
Ms_Declarations_Type hvobj = Tools.Deserialize<Ms_Declarations_Type>(hvxml);
|
|
||||||
if (hvobj != null &&
|
|
||||||
hvobj.declgroups != null &&
|
|
||||||
hvobj.declgroups.Count > 0 &&
|
|
||||||
hvobj.declgroups[0].values != null &&
|
|
||||||
hvobj.declgroups[0].values.Count > 0)
|
|
||||||
{
|
|
||||||
EnvelopeType env = ConvertFromHyperVXml(hvobj, ovfName, lang);
|
|
||||||
xmlstring = Tools.Serialize(env, typeof(EnvelopeType), Tools.LoadNamespaces());
|
|
||||||
log.Debug("XenOvf::ConvertHyperVtoOVF completed");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidDataException(Messages.CONVERSION_NO_DATA);
|
|
||||||
}
|
|
||||||
return xmlstring;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region PRIVATE
|
#region PRIVATE
|
||||||
|
|
||||||
private EnvelopeType ConvertFromHyperVXml(Ms_Declarations_Type hvobj, string ovfname, string lang)
|
|
||||||
{
|
|
||||||
EnvelopeType env = CreateEnvelope(ovfname, lang);
|
|
||||||
string systemId = AddVirtualSystem(env, lang, ovfname);
|
|
||||||
string vhsid = AddVirtualHardwareSection(env, systemId, lang);
|
|
||||||
|
|
||||||
|
|
||||||
foreach (Ms_WrapperInstance_Type wrap in hvobj.declgroups[0].values)
|
|
||||||
{
|
|
||||||
RASD_Type rasd = new RASD_Type();
|
|
||||||
switch (wrap.instance.className)
|
|
||||||
{
|
|
||||||
#region CASE: Msvm_VirtualSystemSettingData
|
|
||||||
|
|
||||||
case "Msvm_VirtualSystemSettingData":
|
|
||||||
{
|
|
||||||
string ElementName = null;
|
|
||||||
string InstanceId = null;
|
|
||||||
string SystemName = null;
|
|
||||||
string VirtualSystemType = null;
|
|
||||||
foreach (Ms_Property_Base_Type prop in wrap.instance.Properties)
|
|
||||||
{
|
|
||||||
switch (prop.Name)
|
|
||||||
{
|
|
||||||
case "ElementName":
|
|
||||||
{
|
|
||||||
ElementName = ((Ms_ParameterValue_Type)prop).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "InstanceID":
|
|
||||||
{
|
|
||||||
InstanceId = ((Ms_ParameterValue_Type)prop).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "SystemName":
|
|
||||||
{
|
|
||||||
SystemName = ((Ms_ParameterValue_Type)prop).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "VirtualSystemType":
|
|
||||||
{
|
|
||||||
VirtualSystemType = ((Ms_ParameterValue_Type)prop).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AddVirtualSystemSettingData(env, systemId, vhsid, ElementName, ElementName, ElementName, InstanceId, VirtualSystemType);
|
|
||||||
UpdateVirtualSystemName(env, systemId, lang, ElementName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region CASE: ResourceAllocationSettingData
|
|
||||||
|
|
||||||
case "Msvm_ProcessorSettingData":
|
|
||||||
case "Msvm_MemorySettingData":
|
|
||||||
case "Msvm_SyntheticEthernetPortSettingData":
|
|
||||||
case "Msvm_ResourceAllocationSettingData":
|
|
||||||
{
|
|
||||||
foreach (Ms_Property_Base_Type prop in wrap.instance.Properties)
|
|
||||||
{
|
|
||||||
if (prop is Ms_ParameterValue_Type)
|
|
||||||
{
|
|
||||||
if (((Ms_ParameterValue_Type)prop).Value == null ||
|
|
||||||
((Ms_ParameterValue_Type)prop).Value.Length <= 0)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (prop is Ms_ParameterValueArray_Type)
|
|
||||||
{
|
|
||||||
if (((Ms_ParameterValueArray_Type)prop).Values == null ||
|
|
||||||
((Ms_ParameterValueArray_Type)prop).Values.Length <= 0)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyInfo[] properties = rasd.GetType().GetProperties();
|
|
||||||
foreach (PropertyInfo pi in properties)
|
|
||||||
{
|
|
||||||
if (pi.Name.ToLower().Equals(prop.Name.ToLower()))
|
|
||||||
{
|
|
||||||
object newvalue = null;
|
|
||||||
if (prop is Ms_ParameterValue_Type)
|
|
||||||
{
|
|
||||||
switch (prop.Type.ToLower())
|
|
||||||
{
|
|
||||||
case "string":
|
|
||||||
{
|
|
||||||
newvalue = new cimString((string)((Ms_ParameterValue_Type)prop).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "boolean":
|
|
||||||
{
|
|
||||||
newvalue = new cimBoolean();
|
|
||||||
((cimBoolean)newvalue).Value = Convert.ToBoolean(((Ms_ParameterValue_Type)prop).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "uint16":
|
|
||||||
{
|
|
||||||
newvalue = new cimUnsignedShort();
|
|
||||||
((cimUnsignedShort)newvalue).Value = Convert.ToUInt16(((Ms_ParameterValue_Type)prop).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "uint32":
|
|
||||||
{
|
|
||||||
newvalue = new cimUnsignedInt();
|
|
||||||
((cimUnsignedInt)newvalue).Value = Convert.ToUInt32(((Ms_ParameterValue_Type)prop).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "uint64":
|
|
||||||
{
|
|
||||||
newvalue = new cimUnsignedLong();
|
|
||||||
((cimUnsignedLong)newvalue).Value = Convert.ToUInt64(((Ms_ParameterValue_Type)prop).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (prop is Ms_ParameterValueArray_Type)
|
|
||||||
{
|
|
||||||
switch (prop.Type.ToLower())
|
|
||||||
{
|
|
||||||
case "string":
|
|
||||||
{
|
|
||||||
List<cimString> sarray = new List<cimString>();
|
|
||||||
foreach (Ms_ParameterValue_Type svalue in ((Ms_ParameterValueArray_Type)prop).Values)
|
|
||||||
{
|
|
||||||
sarray.Add(new cimString(svalue.Value));
|
|
||||||
}
|
|
||||||
newvalue = sarray.ToArray();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object tmpobject = null;
|
|
||||||
switch (pi.Name.ToLower())
|
|
||||||
{
|
|
||||||
case "caption":
|
|
||||||
{
|
|
||||||
newvalue = new Caption(((cimString)newvalue).Value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "changeabletype":
|
|
||||||
{
|
|
||||||
tmpobject = newvalue;
|
|
||||||
newvalue = new ChangeableType();
|
|
||||||
((ChangeableType)newvalue).Value = ((cimUnsignedShort)tmpobject).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "consumervisibility":
|
|
||||||
{
|
|
||||||
tmpobject = newvalue;
|
|
||||||
newvalue = new ConsumerVisibility();
|
|
||||||
((ConsumerVisibility)newvalue).Value = ((cimUnsignedShort)tmpobject).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "mappingbehavior":
|
|
||||||
{
|
|
||||||
tmpobject = newvalue;
|
|
||||||
newvalue = new MappingBehavior();
|
|
||||||
((MappingBehavior)newvalue).Value = ((cimUnsignedShort)tmpobject).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "resourcetype":
|
|
||||||
{
|
|
||||||
tmpobject = newvalue;
|
|
||||||
newvalue = new ResourceType();
|
|
||||||
((ResourceType)newvalue).Value = ((cimUnsignedShort)tmpobject).Value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "connection":
|
|
||||||
case "hostresource":
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
pi.SetValue(rasd, newvalue, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (rasd != null)
|
|
||||||
{
|
|
||||||
if (FillEmptyRequiredFields(rasd))
|
|
||||||
{
|
|
||||||
if (rasd.ResourceType.Value == 21 &&
|
|
||||||
rasd.Caption.Value.ToLower().StartsWith(_ovfrm.GetString("RASD_19_CAPTION").ToLower()))
|
|
||||||
{
|
|
||||||
string filename = Path.GetFileName(rasd.Connection[0].Value);
|
|
||||||
AddFileReference(env, lang, filename, rasd.InstanceID.Value, 0, WIN_FILE_FORMAT_URI);
|
|
||||||
AddRasd(env, systemId, rasd);
|
|
||||||
}
|
|
||||||
else if (rasd.ResourceType.Value == 10)
|
|
||||||
{
|
|
||||||
AddNetwork(env, systemId, lang, rasd.InstanceID.Value, rasd.Caption.Value, rasd.Address.Value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AddRasd(env, systemId, rasd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region CASE: Msvm_VLANEndpointSettingData
|
|
||||||
|
|
||||||
case "Msvm_VLANEndpointSettingData":
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region CASE: SKIPPED / DEFAULT
|
|
||||||
|
|
||||||
case "Msvm_VirtualSystemExportSettingData":
|
|
||||||
case "Msvm_VirtualSystemGlobalSettingData":
|
|
||||||
case "Msvm_HeartbeatComponentSettingData":
|
|
||||||
case "Msvm_KvpExchangeComponentSettingData":
|
|
||||||
case "Msvm_ShutdownComponentSettingData":
|
|
||||||
case "Msvm_TimeSyncComponentSettingData":
|
|
||||||
case "Msvm_VssComponentSettingData":
|
|
||||||
case "Msvm_SwitchPort":
|
|
||||||
case "Msvm_VirtualSwitch":
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FinalizeEnvelope(env);
|
|
||||||
return env;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CollectInformation()
|
private void CollectInformation()
|
||||||
{
|
{
|
||||||
Win32_ComputerSystem = null;
|
Win32_ComputerSystem = null;
|
||||||
|
@ -1305,32 +1305,26 @@ namespace XenOvf
|
|||||||
return vhs;
|
return vhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string AddVirtualSystem(EnvelopeType ovfObj, string ovfname)
|
|
||||||
{
|
|
||||||
return AddVirtualSystem(ovfObj, LANGUAGE, ovfname);
|
|
||||||
}
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add a Virtual System Section to OVF
|
/// Add a Virtual System Section to OVF
|
||||||
/// MUST be done at least once.
|
/// MUST be done at least once.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ovfObj">object of type EnvelopeType</param>
|
/// <param name="ovfObj">object of type EnvelopeType</param>
|
||||||
/// <param name="lang">Language</param>
|
|
||||||
/// <param name="ovfname">Name of the OVF</param>
|
/// <param name="ovfname">Name of the OVF</param>
|
||||||
|
/// <param name="sysId">the unique id of the virtual system</param>
|
||||||
|
/// <param name="lang">Language</param>
|
||||||
/// <returns>InstanceId of Virtual System</returns>
|
/// <returns>InstanceId of Virtual System</returns>
|
||||||
public static string AddVirtualSystem(EnvelopeType ovfObj, string lang, string ovfname)
|
public static void AddVirtualSystem(EnvelopeType ovfObj, string ovfname, string sysId, string lang = LANGUAGE)
|
||||||
{
|
{
|
||||||
|
VirtualSystem_Type vs = new VirtualSystem_Type {id = sysId};
|
||||||
VirtualSystem_Type vs = new VirtualSystem_Type();
|
|
||||||
vs.id = Guid.NewGuid().ToString();
|
|
||||||
string info = _ovfrm.GetString("VIRTUAL_SYSTEM_TYPE_INFO");
|
string info = _ovfrm.GetString("VIRTUAL_SYSTEM_TYPE_INFO");
|
||||||
vs.Info = new Msg_Type(AddToStringSection(ovfObj, lang, info), info);
|
vs.Info = new Msg_Type(AddToStringSection(ovfObj, lang, info), info);
|
||||||
vs.Name = new Msg_Type[1] { new Msg_Type(AddToStringSection(ovfObj, lang, ovfname), ovfname) };
|
vs.Name = new[] {new Msg_Type(AddToStringSection(ovfObj, lang, ovfname), ovfname)};
|
||||||
|
|
||||||
AddVirtualSystem(ovfObj, vs);
|
AddVirtualSystem(ovfObj, vs);
|
||||||
AddOperatingSystemSection(ovfObj, vs.id, lang, null, null);
|
AddOperatingSystemSection(ovfObj, vs.id, lang, null, null);
|
||||||
|
|
||||||
log.Debug("OVF.AddVirtualSystem(obj,lang,ovfname) completed");
|
log.Debug("OVF.AddVirtualSystem(obj,lang,ovfname) completed");
|
||||||
return vs.id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddVirtualSystem(EnvelopeType ovfEnv, VirtualSystem_Type vs)
|
public static void AddVirtualSystem(EnvelopeType ovfEnv, VirtualSystem_Type vs)
|
||||||
@ -1391,12 +1385,12 @@ namespace XenOvf
|
|||||||
|
|
||||||
#region CREATEs
|
#region CREATEs
|
||||||
|
|
||||||
public static EnvelopeType CreateOvfEnvelope(string vmName, ulong cpuCount, ulong memory,
|
public static EnvelopeType CreateOvfEnvelope(string systemID, string vmName, ulong cpuCount, ulong memory,
|
||||||
string bootParams, string platformSettings, ulong capacity,
|
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);
|
||||||
string systemID = AddVirtualSystem(env, vmName);
|
AddVirtualSystem(env, vmName, systemID);
|
||||||
|
|
||||||
string hdwareSectionId = AddVirtualHardwareSection(env, systemID);
|
string hdwareSectionId = AddVirtualHardwareSection(env, systemID);
|
||||||
string guid = Guid.NewGuid().ToString();
|
string guid = Guid.NewGuid().ToString();
|
||||||
@ -1465,26 +1459,6 @@ namespace XenOvf
|
|||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnvelopeType Create(DiskInfo[] vhdExports, string pathToOvf, string ovfName)
|
|
||||||
{
|
|
||||||
return Create(vhdExports, pathToOvf, ovfName, LANGUAGE);
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Create an OVF (xml string) from local system.
|
|
||||||
/// *** Element[0] of VHDExports MUST be the BOOT Disk ***
|
|
||||||
/// DiskInfo.VHDFileName == The name the VHD will have after export.
|
|
||||||
/// DiskInfo.DriveId == "PHYSICALDRIVE0","PHYSICALDRIVE1"...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="vhdExports">LIST of Names to the VHD Files to be created REQUIREMENTS: 1. Element[0] MUST be the boot device</param>
|
|
||||||
/// <param name="pathToOvf"></param>
|
|
||||||
/// <param name="lang"></param>
|
|
||||||
/// <param name="ovfName">Name of the OVF Package</param>
|
|
||||||
/// <returns>xml string representing the OVF</returns>
|
|
||||||
public EnvelopeType Create(DiskInfo[] vhdExports, string pathToOvf, string ovfName, string lang)
|
|
||||||
{
|
|
||||||
return ConvertPhysicaltoOVF(vhdExports, pathToOvf, ovfName, lang);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EnvelopeType CreateEnvelope(string ovfName)
|
public static EnvelopeType CreateEnvelope(string ovfName)
|
||||||
{
|
{
|
||||||
return CreateEnvelope(ovfName, LANGUAGE);
|
return CreateEnvelope(ovfName, LANGUAGE);
|
||||||
|
Loading…
Reference in New Issue
Block a user