19
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
20
# MA 02110-1301 USA.
23
import DistroInstaller
25
22
from Guest import Guest
26
from VirtualDevice import VirtualDevice
27
from VirtualDisk import VirtualDisk
28
from VirtualCharDevice import VirtualCharDevice
30
24
class FullVirtGuest(Guest):
26
_default_os_type = "hvm"
32
28
def __init__(self, type=None, arch=None, connection=None,
33
hypervisorURI=None, emulator=None, installer=None):
35
installer = DistroInstaller.DistroInstaller(type = type,
38
Guest.__init__(self, type, connection, hypervisorURI, installer)
43
self.features = { "acpi": None, "pae":
44
_util.is_pae_capable(self.conn), "apic": None }
29
hypervisorURI=None, emulator=None, installer=None,
31
Guest.__init__(self, type, connection, hypervisorURI, installer,
46
34
self.emulator = emulator
51
guest = self._caps.guestForOSType(type=self.installer.os_type,
53
if (not self.emulator) and guest:
54
for dom in guest.domains:
55
if dom.hypervisor_type == self.installer.type:
56
self.emulator = dom.emulator
57
self.loader = dom.loader
59
# Fall back to default hardcoding
60
if self.emulator is None:
61
if self.type == "xen":
62
if self._caps.host.arch in ("x86_64"):
63
self.emulator = "/usr/lib64/xen/bin/qemu-dm"
65
self.emulator = "/usr/lib/xen/bin/qemu-dm"
67
if (not self.loader) and self.type == "xen":
68
self.loader = "/usr/lib/xen/boot/hvmloader"
70
def _get_default_console_device(self):
71
dev = VirtualCharDevice.get_dev_instance(self.conn,
72
VirtualCharDevice.DEV_CONSOLE,
73
VirtualCharDevice.CHAR_PTY)
76
def _get_emulator_xml(self):
78
if self.emulator is not None:
79
emu_xml = " <emulator>%s</emulator>" % self.emulator
83
def _set_defaults(self, devlist_func):
84
disktype = VirtualDevice.VIRTUAL_DEV_DISK
85
nettype = VirtualDevice.VIRTUAL_DEV_NET
86
disk_bus = self._lookup_device_param(disktype, "bus")
87
net_model = self._lookup_device_param(nettype, "model")
89
# Only overwrite params if they weren't already specified
90
for net in devlist_func(nettype):
91
if net_model and not net.model:
94
for disk in devlist_func(disktype):
95
if (disk_bus and not disk.bus and
96
disk.device == VirtualDisk.DEVICE_DISK):
99
if self.clock.offset == None:
100
self.clock.offset = self._lookup_osdict_key("clock")
102
# Run this last, so we get first crack at disk attributes
103
Guest._set_defaults(self, devlist_func)
39
def _get_loader(self):
40
if not self.installer:
42
return self.installer.loader
43
def _set_loader(self, val):
45
if not self.installer:
47
self.installer.loader = val
48
loader = property(_get_loader, _set_loader)