diff options
author | Armando Migliaccio <amigliaccio@internap.com> | 2012-12-18 14:11:16 +0000 |
---|---|---|
committer | Armando Migliaccio <amigliaccio@internap.com> | 2012-12-18 14:39:40 +0000 |
commit | e6acd86b8419018f25e96f484340b7631c3e127b (patch) | |
tree | a1e7bdb5f01de63f244312cd3f0a89bf5bf87383 | |
parent | 46675d85dbb6c3fb7e417eb0c7ad4a4cccb30523 (diff) | |
download | nova-e6acd86b8419018f25e96f484340b7631c3e127b.tar.gz nova-e6acd86b8419018f25e96f484340b7631c3e127b.tar.xz nova-e6acd86b8419018f25e96f484340b7631c3e127b.zip |
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
-rw-r--r-- | etc/nova/rootwrap.d/compute.filters | 3 | ||||
-rw-r--r-- | nova/virt/xenapi/vm_utils.py | 23 |
2 files changed, 18 insertions, 8 deletions
diff --git a/etc/nova/rootwrap.d/compute.filters b/etc/nova/rootwrap.d/compute.filters index cb7ad7487..a835122cc 100644 --- a/etc/nova/rootwrap.d/compute.filters +++ b/etc/nova/rootwrap.d/compute.filters @@ -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 diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index be1a0f4ef..67dcfcb04 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -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 |