fixes for Vagrant images
This commit is contained in:
parent
0cd72e56be
commit
b9e8f486c1
@ -147,25 +147,25 @@ class ImageBuild:
|
||||
if self.image_type in ["Vagrant"]:
|
||||
_map = {
|
||||
"Vbox": {"format": "vmdk", "provider": "virtualbox"},
|
||||
"Libvirt": {"format": "qcow2", "provider": "libvirt"},
|
||||
"VMware": {"format": "vmdk", "convertOptions": ["-o", "subformat=streamOptimized"], "provider": "vmware_desktop"}
|
||||
"Libvirt": {"format": "qcow2", "provider": "libvirt", "virtual_size": 10},
|
||||
"VMware": {"format": "vmdk", "provider": "vmware_desktop"}
|
||||
}
|
||||
output = f"{_map[self.variant]['format']}" #type: ignore
|
||||
options = _map[self.variant]['convertOptions'] if 'convertOptions' in _map[self.variant].keys() else '' #type: ignore
|
||||
provider = f"{_map[self.variant]['provider']}" # type: ignore
|
||||
|
||||
self.prepare_vagrant(provider)
|
||||
self.stage_commands = [
|
||||
["qemu-img", "convert", "-c", "-f", "raw", "-O", output, *options, lambda: f"{STORAGE_DIR}/{self.target_uuid}.body", f"{self.outdir}/{self.outname}.{output}"],
|
||||
["tar", "-C", self.outdir, "-czf", f"/tmp/{self.outname}.box", '.'],
|
||||
["mv", f"/tmp/{self.outname}.box", self.outdir]
|
||||
]
|
||||
self.prepare_vagrant(_map[self.variant])
|
||||
|
||||
if self.stage_commands:
|
||||
self.stage_commands.append(["cp", "-v", lambda: f"{STORAGE_DIR}/{self.target_uuid}.meta", f"{self.outdir}/build.meta"])
|
||||
|
||||
|
||||
def prepare_vagrant(self, provider):
|
||||
def prepare_vagrant(self, options):
|
||||
"""Setup the output directory for the Vagrant type variant, dropping templates as required"""
|
||||
file_loader = FileSystemLoader(f"{_rootdir}/templates")
|
||||
tmplenv = Environment(loader=file_loader)
|
||||
@ -179,11 +179,17 @@ class ImageBuild:
|
||||
provider = "vmware_desktop"
|
||||
templates[f"{self.outname}.vmx"] = tmplenv.get_template('vagrant/vmx.tmpl')
|
||||
|
||||
|
||||
if self.variant == "Libvirt":
|
||||
# Libvirt vagrant driver expects the qcow2 file to be called box.img.
|
||||
qemu_command_index = [i for i, d in enumerate(self.stage_commands) if d[0] == "qemu-img"][0]
|
||||
self.stage_commands.insert(qemu_command_index+1, ["mv", f"{self.outdir}/{self.outname}.qcow2", f"{self.outdir}/box.img"])
|
||||
|
||||
for name, template in templates.items():
|
||||
print(name, template)
|
||||
self.render_template(f"{self.outdir}/{name}", template,
|
||||
name=self.outname,
|
||||
provider=provider
|
||||
arch=self.architecture.name,
|
||||
options=options
|
||||
)
|
||||
|
||||
def checkout_kickstarts(self) -> int:
|
||||
|
@ -0,0 +1,56 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
|
||||
# Example configuration of new VM..
|
||||
#
|
||||
#config.vm.define :test_vm do |test_vm|
|
||||
# Box name
|
||||
#
|
||||
#test_vm.vm.box = "rockylinux"
|
||||
|
||||
# Domain Specific Options
|
||||
#
|
||||
# See README for more info.
|
||||
|
||||
# Interfaces for VM
|
||||
#
|
||||
# Networking features in the form of `config.vm.network`
|
||||
#
|
||||
#test_vm.vm.network :private_network, :ip => '10.20.30.40'
|
||||
#test_vm.vm.network :public_network, :ip => '10.20.30.41'
|
||||
#end
|
||||
|
||||
# Options for Libvirt Vagrant provider.
|
||||
config.vm.provider :libvirt do |libvirt|
|
||||
|
||||
# A hypervisor name to access. Different drivers can be specified, but
|
||||
# this version of provider creates KVM machines only. Some examples of
|
||||
# drivers are KVM (QEMU hardware accelerated), QEMU (QEMU emulated),
|
||||
# Xen (Xen hypervisor), lxc (Linux Containers),
|
||||
# esx (VMware ESX), vmwarews (VMware Workstation) and more. Refer to
|
||||
# documentation for available drivers (http://libvirt.org/drivers.html).
|
||||
libvirt.driver = "kvm"
|
||||
|
||||
# The name of the server, where Libvirtd is running.
|
||||
# libvirt.host = "localhost"
|
||||
|
||||
# If use ssh tunnel to connect to Libvirt.
|
||||
libvirt.connect_via_ssh = false
|
||||
|
||||
# The username and password to access Libvirt. Password is not used when
|
||||
# connecting via ssh.
|
||||
libvirt.username = "root"
|
||||
#libvirt.password = "secret"
|
||||
|
||||
# Libvirt storage pool name, where box image and instance snapshots will
|
||||
# be stored.
|
||||
libvirt.storage_pool_name = "default"
|
||||
|
||||
# Set a prefix for the machines that's different than the project dir name.
|
||||
#libvirt.default_prefix = ''
|
||||
end
|
||||
end
|
109
iso/empanadas/empanadas/templates/vagrant/box.tmpl.ovf
Normal file
109
iso/empanadas/empanadas/templates/vagrant/box.tmpl.ovf
Normal file
@ -0,0 +1,109 @@
|
||||
<?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="{{ name }}.vmdk"/>
|
||||
</References>
|
||||
<DiskSection>
|
||||
<Info>List of the virtual disks used in the package</Info>
|
||||
<Disk ovf:capacity="41943040000" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" vbox:uuid="289f1414-3b53-40b9-8d43-1993c752c5cc"/>
|
||||
</DiskSection>
|
||||
<VirtualSystem ovf:id="{{ name }}">
|
||||
<Info>A virtual machine</Info>
|
||||
<OperatingSystemSection ovf:id="80">
|
||||
<Info>The kind of installed guest operating system</Info>
|
||||
<Description>RedHat_64</Description>
|
||||
<vbox:OSType ovf:required="false">RedHat_64</vbox:OSType>
|
||||
</OperatingSystemSection>
|
||||
<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>rockylinux-{{ arch }}</vssd:VirtualSystemIdentifier>
|
||||
<vssd:VirtualSystemType>virtualbox-2.2</vssd:VirtualSystemType>
|
||||
</System>
|
||||
<Item>
|
||||
<rasd:Caption>2 virtual CPU</rasd:Caption>
|
||||
<rasd:Description>Number of virtual CPUs</rasd:Description>
|
||||
<rasd:ElementName>2 virtual CPU</rasd:ElementName>
|
||||
<rasd:InstanceID>1</rasd:InstanceID>
|
||||
<rasd:ResourceType>3</rasd:ResourceType>
|
||||
<rasd:VirtualQuantity>2</rasd:VirtualQuantity>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:AllocationUnits>MegaBytes</rasd:AllocationUnits>
|
||||
<rasd:Caption>8192 MB of memory</rasd:Caption>
|
||||
<rasd:Description>Memory Size</rasd:Description>
|
||||
<rasd:ElementName>8192 MB of memory</rasd:ElementName>
|
||||
<rasd:InstanceID>2</rasd:InstanceID>
|
||||
<rasd:ResourceType>4</rasd:ResourceType>
|
||||
<rasd:VirtualQuantity>8192</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: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>5</rasd:InstanceID>
|
||||
<rasd:Parent>3</rasd:Parent>
|
||||
<rasd:ResourceType>17</rasd:ResourceType>
|
||||
</Item>
|
||||
</VirtualHardwareSection>
|
||||
<vbox:Machine ovf:required="false" version="1.16-macosx" uuid="{c93f1200-846a-460f-a220-9a6e712c7399}" name="{{ name }}" OSType="RedHat_64" snapshotFolder="Snapshots">
|
||||
<ovf:Info>Complete VirtualBox machine configuration in VirtualBox format</ovf:Info>
|
||||
<Hardware>
|
||||
<CPU count="2">
|
||||
<PAE enabled="true"/>
|
||||
<LongMode enabled="true"/>
|
||||
<X2APIC enabled="true"/>
|
||||
<HardwareVirtExLargePages enabled="true"/>
|
||||
</CPU>
|
||||
<Memory RAMSize="8192"/>
|
||||
<Boot>
|
||||
<Order position="1" device="HardDisk"/>
|
||||
<Order position="2" device="DVD"/>
|
||||
<Order position="3" device="None"/>
|
||||
<Order position="4" device="None"/>
|
||||
</Boot>
|
||||
<Display VRAMSize="4"/>
|
||||
<VideoCapture file="." fps="25"/>
|
||||
<RemoteDisplay enabled="true">
|
||||
<VRDEProperties>
|
||||
<Property name="TCP/Address" value="127.0.0.1"/>
|
||||
<Property name="TCP/Ports" value="5902"/>
|
||||
</VRDEProperties>
|
||||
</RemoteDisplay>
|
||||
<BIOS>
|
||||
<IOAPIC enabled="true"/>
|
||||
<SmbiosUuidLittleEndian enabled="true"/>
|
||||
</BIOS>
|
||||
<AudioAdapter driver="CoreAudio" enabledIn="false" enabledOut="false"/>
|
||||
</Hardware>
|
||||
<StorageControllers>
|
||||
<StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
|
||||
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
|
||||
<Image uuid="{289f1414-3b53-40b9-8d43-1993c752c5cc}"/>
|
||||
</StorageController>
|
||||
</StorageControllers>
|
||||
</vbox:Machine>
|
||||
</VirtualSystem>
|
||||
</Envelope>
|
@ -1,3 +1 @@
|
||||
{
|
||||
"provider": "{{ provider }}"
|
||||
}
|
||||
{{ options | tojson(indent=2 )}}
|
||||
|
Loading…
Reference in New Issue
Block a user