2
# Copyright 2010 Red Hat, Inc.
3
# Cole Robinson <crobinso@redhat.com>
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
import XMLBuilderDomain
22
from XMLBuilderDomain import _xml_property
24
class Boot(XMLBuilderDomain.XMLBuilderDomain):
26
Class for generating boot device related XML
29
BOOT_DEVICE_HARDDISK = "hd"
30
BOOT_DEVICE_CDROM = "cdrom"
31
BOOT_DEVICE_FLOPPY = "fd"
32
BOOT_DEVICE_NETWORK = "network"
33
boot_devices = [BOOT_DEVICE_HARDDISK, BOOT_DEVICE_CDROM,
34
BOOT_DEVICE_FLOPPY, BOOT_DEVICE_NETWORK]
36
_dumpxml_xpath = "/domain/os"
37
def __init__(self, conn, parsexml=None, parsexmlnode=None, caps=None):
38
XMLBuilderDomain.XMLBuilderDomain.__init__(self, conn, parsexml,
42
self._enable_bootmenu = None
45
self._kernel_args = None
47
def _get_enable_bootmenu(self):
48
return self._enable_bootmenu
49
def _set_enable_bootmenu(self, val):
50
self._enable_bootmenu = val
51
def _get_menu_converter(self, val):
55
return bool(val == "yes")
56
enable_bootmenu = _xml_property(_get_enable_bootmenu, _set_enable_bootmenu,
57
get_converter=_get_menu_converter,
58
set_converter=lambda s, x: x and "yes" or "no",
59
xpath="./os/bootmenu/@enable")
61
def _get_bootorder(self):
62
return self._bootorder
63
def _set_bootorder(self, val):
65
def _bootorder_xpath_list(self):
67
for idx in range(len(self._get_bootorder())):
68
l.append("./os/boot[%d]/@dev" % (idx + 1))
70
bootorder = _xml_property(_get_bootorder, _set_bootorder,
72
xml_set_list=_bootorder_xpath_list,
73
xpath="./os/boot/@dev")
75
def _get_kernel(self):
77
def _set_kernel(self, val):
79
kernel = _xml_property(_get_kernel, _set_kernel,
82
def _get_initrd(self):
84
def _set_initrd(self, val):
86
initrd = _xml_property(_get_initrd, _set_initrd,
89
def _get_kernel_args(self):
90
return self._kernel_args
91
def _set_kernel_args(self, val):
92
self._kernel_args = val
93
kernel_args = _xml_property(_get_kernel_args, _set_kernel_args,
96
def _get_xml_config(self):
100
xml = _util.xml_append(xml, " <kernel>%s</kernel>" %
101
_util.xml_escape(self.kernel))
103
xml = _util.xml_append(xml, " <initrd>%s</initrd>" %
104
_util.xml_escape(self.initrd))
106
xml = _util.xml_append(xml, " <cmdline>%s</cmdline>" %
107
_util.xml_escape(self.kernel_args))
110
for dev in self.bootorder:
111
xml = _util.xml_append(xml, " <boot dev='%s'/>" % dev)
113
if self.enable_bootmenu in [True, False]:
114
val = self.enable_bootmenu and "yes" or "no"
115
xml = _util.xml_append(xml,
116
" <bootmenu enable='%s'/>" % val)