Execute pygrub using nova-rootwrap in xenapi

Preserve the behavior where, if pygrub fails, compute attempts
to spawn the VM in HVM mode.

Fixes bug #1091628

Change-Id: Ia462964ebb1fc21d8e289de32557a2e7867f1257
This commit is contained in:
Armando Migliaccio 2012-12-18 14:11:16 +00:00
parent 46675d85db
commit e6acd86b84
2 changed files with 18 additions and 8 deletions

View File

@ -92,6 +92,9 @@ iscsiadm: CommandFilter, iscsiadm, root
# nova/virt/xenapi/vm_utils.py: 'parted', '--script', dev_path, ..*.
parted: CommandFilter, parted, root
# nova/virt/xenapi/vm_utils.py: 'pygrub', '-qn', dev_path
pygrub: CommandFilter, /usr/bin/pygrub, root
# nova/virt/xenapi/vm_utils.py: fdisk %(dev_path)s
fdisk: CommandFilter, /sbin/fdisk, root

View File

@ -1910,14 +1910,21 @@ def _get_this_vm_ref(session):
def _is_vdi_pv(dev):
LOG.debug(_("Running pygrub against %s"), dev)
dev_path = utils.make_dev_path(dev)
output = os.popen('pygrub -qn %s' % dev_path)
for line in output.readlines():
#try to find kernel string
m = re.search('(?<=kernel:)/.*(?:>)', line)
if m and m.group(0).find('xen') != -1:
LOG.debug(_("Found Xen kernel %s") % m.group(0))
return True
LOG.debug(_("No Xen kernel found. Booting HVM."))
try:
out, err = utils.execute('pygrub', '-qn', dev_path, run_as_root=True)
for line in out:
# try to find kernel string
m = re.search('(?<=kernel:)/.*(?:>)', line)
if m and m.group(0).find('xen') != -1:
LOG.debug(_("Found Xen kernel %s") % m.group(0))
return True
LOG.debug(_("No Xen kernel found. Booting HVM."))
except exception.ProcessExecutionError:
LOG.exception(_("Error while executing pygrub! Please, ensure the "
"binary is installed correctly, and available in your "
"PATH; on some Linux distros, pygrub may be installed "
"in /usr/lib/xen-X.Y/bin/pygrub. Attempting to boot "
"in HVM mode."))
return False