package org.ovirt.engine.core.utils.ovf; import java.util.List; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.RefObject; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.compat.backendcompat.XmlDocument; public class OvfTemplateWriter extends OvfWriter { protected VmTemplate _vmTemplate; public OvfTemplateWriter(RefObject<XmlDocument> document, VmTemplate vmTemplate, List<DiskImage> images) { super(document, images); _vmTemplate = vmTemplate; } @Override protected void WriteGeneralData() { _writer.WriteStartElement("Name"); _writer.WriteRaw(_vmTemplate.getname()); _writer.WriteEndElement(); _writer.WriteStartElement("TemplateId"); _writer.WriteRaw(_vmTemplate.getId().toString()); _writer.WriteEndElement(); _writer.WriteStartElement("Description"); _writer.WriteRaw(_vmTemplate.getdescription()); _writer.WriteEndElement(); _writer.WriteStartElement("Domain"); _writer.WriteRaw(_vmTemplate.getdomain()); _writer.WriteEndElement(); _writer.WriteStartElement("CreationDate"); _writer.WriteRaw(OvfParser.LocalDateToUtcDateString(_vmTemplate.getcreation_date())); _writer.WriteEndElement(); _writer.WriteStartElement("IsAutoSuspend"); _writer.WriteRaw((new Boolean(_vmTemplate.getis_auto_suspend())).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("TimeZone"); _writer.WriteRaw(_vmTemplate.gettime_zone()); _writer.WriteEndElement(); _writer.WriteStartElement("VmType"); _writer.WriteRaw((new Integer(_vmTemplate.getvm_type().getValue())).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("default_display_type"); _writer.WriteRaw((new Integer(_vmTemplate.getdefault_display_type().getValue())).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("default_boot_sequence"); _writer.WriteRaw((new Integer(_vmTemplate.getdefault_boot_sequence().getValue())).toString()); _writer.WriteEndElement(); if (!StringHelper.isNullOrEmpty(_vmTemplate.getinitrd_url())) { _writer.WriteStartElement("initrd_url"); _writer.WriteRaw(_vmTemplate.getinitrd_url()); _writer.WriteEndElement(); } if (!StringHelper.isNullOrEmpty(_vmTemplate.getkernel_url())) { _writer.WriteStartElement("kernel_url"); _writer.WriteRaw(_vmTemplate.getkernel_url()); _writer.WriteEndElement(); } if (!StringHelper.isNullOrEmpty(_vmTemplate.getkernel_params())) { _writer.WriteStartElement("kernel_params"); _writer.WriteRaw(_vmTemplate.getkernel_params()); _writer.WriteEndElement(); } } @Override protected void WriteAppList() { } @Override protected void WriteContentItems() { // os _writer.WriteStartElement("Section"); _writer.WriteAttributeString("ovf", "id", null, _vmTemplate.getId().toString()); _writer.WriteAttributeString("ovf", "required", null, "false"); _writer.WriteAttributeString("xsi", "type", null, "ovf:OperatingSystemSection_Type"); _writer.WriteStartElement("Info"); _writer.WriteRaw("Guest Operating System"); _writer.WriteEndElement(); _writer.WriteStartElement("Description"); _writer.WriteRaw(_vmTemplate.getos().name()); _writer.WriteEndElement(); _writer.WriteEndElement(); // hardware _writer.WriteStartElement("Section"); _writer.WriteAttributeString("xsi", "type", null, "ovf:VirtualHardwareSection_Type"); _writer.WriteStartElement("Info"); _writer.WriteRaw(String.format("%1$s CPU, %2$s Memeory", _vmTemplate.getnum_of_cpus(), _vmTemplate.getmem_size_mb())); _writer.WriteEndElement(); _writer.WriteStartElement("System"); _writer.WriteStartElement("vssd:VirtualSystemType"); _writer.WriteRaw(String.format("%1$s %2$s", Config.<String> GetValue(ConfigValues.OvfVirtualSystemType), Config.<String> GetValue(ConfigValues.VdcVersion))); _writer.WriteEndElement(); _writer.WriteEndElement(); // item cpu _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw(String.format("%1$s virtual cpu", _vmTemplate.getnum_of_cpus())); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Description"); _writer.WriteRaw("Number of virtual CPU"); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(((Integer) (++_instanceId)).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.CPU); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:num_of_sockets"); _writer.WriteRaw((new Integer(_vmTemplate.getnum_of_sockets())).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:cpu_per_socket"); _writer.WriteRaw((new Integer(_vmTemplate.getcpu_per_socket())).toString()); _writer.WriteEndElement(); _writer.WriteEndElement(); // item // item memory _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw(String.format("%1$s MB of memory", _vmTemplate.getmem_size_mb())); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Description"); _writer.WriteRaw("Memory Size"); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(((Integer) (++_instanceId)).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.Memory); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:AllocationUnits"); _writer.WriteRaw("MegaBytes"); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:VirtualQuantity"); _writer.WriteRaw((new Integer(_vmTemplate.getmem_size_mb())).toString()); _writer.WriteEndElement(); _writer.WriteEndElement(); // item // item drive for (DiskImage image : _images) { _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw(String.format("Drive %1$s", image.getinternal_drive_mapping())); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(image.getId().toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.DiskImage); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:HostResource"); _writer.WriteRaw(image.getimage_group_id() + "/" + image.getId()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Parent"); _writer.WriteRaw(image.getParentId().toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Template"); _writer.WriteRaw(image.getit_guid().toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ApplicationList"); _writer.WriteRaw(image.getappList()); _writer.WriteEndElement(); if (image.getstorage_id() != null) { _writer.WriteStartElement("rasd:StorageId"); _writer.WriteRaw(image.getstorage_id().getValue().toString()); _writer.WriteEndElement(); } if (image.getstorage_pool_id() != null) { _writer.WriteStartElement("rasd:StoragePoolId"); _writer.WriteRaw(image.getstorage_pool_id().getValue().toString()); _writer.WriteEndElement(); } _writer.WriteStartElement("rasd:CreationDate"); _writer.WriteRaw(OvfParser.LocalDateToUtcDateString(image.getcreation_date())); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:LastModified"); _writer.WriteRaw(OvfParser.LocalDateToUtcDateString(image.getlastModified())); _writer.WriteEndElement(); _writer.WriteEndElement(); // item } // item network for (VmNetworkInterface iface : _vmTemplate.getInterfaces()) { _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw("Ethernet adapter on " + iface.getNetworkName()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(((Integer) (++_instanceId)).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.Network); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceSubType"); if (iface.getType() != null) { _writer.WriteRaw(iface.getType().toString()); } _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Connection"); _writer.WriteRaw(iface.getNetworkName()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:Name"); _writer.WriteRaw(iface.getName()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:speed"); // version prior to 2.3 may not have speed so we get it by type if (iface.getSpeed() != null) { _writer.WriteRaw(iface.getSpeed().toString()); } else { _writer.WriteRaw(Integer.toString(VmInterfaceType.forValue( iface.getType()).getSpeed())); } _writer.WriteEndElement(); _writer.WriteEndElement(); // item } // item usb _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw("USB Controller"); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(((Integer) (++_instanceId)).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.USB); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:UsbPolicy"); _writer.WriteRaw(_vmTemplate.getusb_policy().toString()); _writer.WriteEndElement(); _writer.WriteEndElement(); // item // monitor _writer.WriteStartElement("Item"); _writer.WriteStartElement("rasd:Caption"); _writer.WriteRaw("Graphical Controller"); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:InstanceId"); _writer.WriteRaw(((Integer) (++_instanceId)).toString()); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:ResourceType"); _writer.WriteRaw(OvfHardware.Monitor); _writer.WriteEndElement(); _writer.WriteStartElement("rasd:VirtualQuantity"); _writer.WriteRaw((new Integer(_vmTemplate.getnum_of_monitors())).toString()); _writer.WriteEndElement(); _writer.WriteEndElement(); // item } }