Source code for kiwi.storage.subformat.template.virtualbox_ovf

# Copyright (c) 2019 SUSE Linux GmbH.  All rights reserved.
#
# This file is part of kiwi.
#
# kiwi is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# kiwi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with kiwi.  If not, see <http://www.gnu.org/licenses/>
#

from string import Template


[docs] class VirtualboxOvfTemplate: """ **Generate a OVF file template for a vagrant virtualbox box** This class provides a template for virtualbox' ovf configuration file that is embedded inside the vagrant box. The template itself was extracted from a vagrant box that was build via packer and from a script provided by Neal Gompa. """ def __init__(self): # note: the OS ID is set to Other Linux 64 self.OVF_TEMPLATE = """<?xml version="1.0"?> <Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine"> <References> <File ovf:id="file1" ovf:href="box.vmdk"/> </References> <DiskSection> <Info>List of the virtual disks used in the package</Info> <Disk ovf:capacity="${disk_image_capacity}" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" vbox:uuid="${root_uuid}"/> </DiskSection> <NetworkSection> <Info>Logical networks used in the package</Info> <Network ovf:name="NAT"> <Description>Logical network used by this appliance.</Description> </Network> </NetworkSection> <VirtualSystem ovf:id="${vm_name}"> <Info>A virtual machine</Info> <OperatingSystemSection ovf:id="101"> <Info>The kind of installed guest operating system</Info> <Description>${vm_description}</Description> <vbox:OSType ovf:required="false">Linux_64</vbox:OSType> </OperatingSystemSection> <vbox:Machine ovf:required="false" name="${vm_name}" uuid="${root_uuid}" OSType="Linux_64"> <Hardware> <AudioAdapter enabled="false"/> <Memory RAMSize="1024"/> </Hardware> <StorageControllers> <StorageController name="SATA Controller" type="AHCI" PortCount="1" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3"> <AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0"> <Image uuid="{${root_uuid}}"/> </AttachedDevice> </StorageController> </StorageControllers> </vbox:Machine> <VirtualHardwareSection> <Info>Virtual hardware requirements for a virtual machine</Info> <System> <vssd:ElementName>Virtual Hardware Family</vssd:ElementName> <vssd:InstanceID>0</vssd:InstanceID> <vssd:VirtualSystemIdentifier>${vm_name}</vssd:VirtualSystemIdentifier> <vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType> </System> <Item> <rasd:Caption>1 virtual CPU</rasd:Caption> <rasd:Description>Number of virtual CPUs</rasd:Description> <rasd:ElementName>1 virtual CPU(s)</rasd:ElementName> <rasd:InstanceID>1</rasd:InstanceID> <rasd:ResourceType>3</rasd:ResourceType> <rasd:VirtualQuantity>1</rasd:VirtualQuantity> </Item> <Item> <rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits> <rasd:Caption>1024 MB of memory</rasd:Caption> <rasd:Description>Memory Size</rasd:Description> <rasd:ElementName>1024 MB of memory</rasd:ElementName> <rasd:InstanceID>2</rasd:InstanceID> <rasd:ResourceType>4</rasd:ResourceType> <rasd:VirtualQuantity>1024</rasd:VirtualQuantity> </Item> <Item> <rasd:Address>0</rasd:Address> <rasd:Caption>ideController0</rasd:Caption> <rasd:Description>IDE Controller</rasd:Description> <rasd:ElementName>ideController0</rasd:ElementName> <rasd:InstanceID>3</rasd:InstanceID> <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> <rasd:ResourceType>5</rasd:ResourceType> </Item> <Item> <rasd:Address>1</rasd:Address> <rasd:Caption>ideController1</rasd:Caption> <rasd:Description>IDE Controller</rasd:Description> <rasd:ElementName>ideController1</rasd:ElementName> <rasd:InstanceID>4</rasd:InstanceID> <rasd:ResourceSubType>PIIX4</rasd:ResourceSubType> <rasd:ResourceType>5</rasd:ResourceType> </Item> <Item> <rasd:Address>0</rasd:Address> <rasd:Caption>sataController0</rasd:Caption> <rasd:Description>SATA Controller</rasd:Description> <rasd:ElementName>sataController0</rasd:ElementName> <rasd:InstanceID>5</rasd:InstanceID> <rasd:ResourceSubType>AHCI</rasd:ResourceSubType> <rasd:ResourceType>20</rasd:ResourceType> </Item> <Item> <rasd:AddressOnParent>3</rasd:AddressOnParent> <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation> <rasd:Caption>sound</rasd:Caption> <rasd:Description>Sound Card</rasd:Description> <rasd:ElementName>sound</rasd:ElementName> <rasd:InstanceID>6</rasd:InstanceID> <rasd:ResourceSubType>ensoniq1371</rasd:ResourceSubType> <rasd:ResourceType>35</rasd:ResourceType> </Item> <Item> <rasd:AddressOnParent>0</rasd:AddressOnParent> <rasd:Caption>disk1</rasd:Caption> <rasd:Description>Disk Image</rasd:Description> <rasd:ElementName>disk1</rasd:ElementName> <rasd:HostResource>/disk/vmdisk1</rasd:HostResource> <rasd:InstanceID>7</rasd:InstanceID> <rasd:Parent>5</rasd:Parent> <rasd:ResourceType>17</rasd:ResourceType> </Item> <Item> <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> <rasd:Caption>Ethernet adapter on 'NAT'</rasd:Caption> <rasd:Connection>NAT</rasd:Connection> <rasd:ElementName>Ethernet adapter on 'NAT'</rasd:ElementName> <rasd:InstanceID>8</rasd:InstanceID> <rasd:ResourceSubType>E1000</rasd:ResourceSubType> <rasd:ResourceType>10</rasd:ResourceType> </Item> </VirtualHardwareSection> </VirtualSystem> </Envelope> """
[docs] def get_template(self): """ Return the actual ovf template. The following values must be substituted: - ``vm_name``: the name of this VM - ``disk_image_capacity``: Size of the virtual disk image in GB - ``vm_description``: a description of this VM """ return Template(self.OVF_TEMPLATE)