From a837f92e39c74f1a97e358f1a8ecfcdb0915bf6c Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 29 Mar 2012 16:25:10 -0400 Subject: [PATCH] Fix libvirt rescue. Updates libvirt connection.py so that it chowns console.log correctly when performing a rescue. Fixes LP Bug #968587. Change-Id: I38a97df92330a9f20f43e9e4598da3375c6a22dc --- nova/virt/libvirt/connection.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py index 9a910d05b28..caa912d9884 100644 --- a/nova/virt/libvirt/connection.py +++ b/nova/virt/libvirt/connection.py @@ -955,9 +955,7 @@ def get_console_output(self, instance): else: raise exception.Error(_("Guest does not have a console available")) - console_log = os.path.join(FLAGS.instances_path, instance['name'], - 'console.log') - libvirt_utils.chown(console_log, os.getuid()) + self._chown_console_log_for_instance(instance['name']) data = self._flush_libvirt_console(pty) fpath = self._append_to_file(data, console_log) @@ -1099,6 +1097,13 @@ def _create_swap(target, swap_mb): libvirt_utils.create_image('raw', target, '%dM' % swap_mb) libvirt_utils.mkfs('swap', target) + @staticmethod + def _chown_console_log_for_instance(instance_name): + console_log = os.path.join(FLAGS.instances_path, instance_name, + 'console.log') + if os.path.exists(console_log): + libvirt_utils.chown(console_log, os.getuid()) + def _create_image(self, context, instance, libvirt_xml, suffix='', disk_images=None, network_info=None, block_device_info=None): @@ -1121,6 +1126,9 @@ def basepath(fname='', suffix=suffix): container_dir = '%s/rootfs' % basepath(suffix='') libvirt_utils.ensure_tree(container_dir) + # NOTE(dprince): for rescue console.log may already exist... chown it. + self._chown_console_log_for_instance(instance['name']) + # NOTE(vish): No need add the suffix to console.log libvirt_utils.write_to_file(basepath('console.log', ''), '', 007)