def get_console_output(self, context, instance): """Get console output for an instance :param context: security context :param instance: nova.objects.instance.Instance """ LOG.debug('get_console_output called for instance', instance=instance) try: console_log = self.container_dir.get_console_path(instance.name) if not os.path.exists(console_log): return "" uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute('chown', '%s:%s' % (uid, uid), console_log, run_as_root=True) utils.execute('chmod', '755', os.path.join( self.container_dir.get_container_dir( instance.name), instance.name), run_as_root=True) with open(console_log, 'rb') as fp: log_data, remaning = utils.last_bytes(fp, MAX_CONSOLE_BYTES) return log_data except Exception as ex: with excutils.save_and_reraise_exception(): LOG.error(_LE('Failed to get container output' ' for %(instance)s: %(ex)s'), {'instance': instance.name, 'ex': ex}, instance=instance)
def get_console_output(self, context, instance): """Get console output for an instance :param context: security context :param instance: nova.objects.instance.Instance """ LOG.debug('get_console_output called for instance', instance=instance) try: console_log = self.container_dir.get_console_path(instance.name) if not os.path.exists(console_log): return "" uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute('chown', '%s:%s' % (uid, uid), console_log, run_as_root=True) utils.execute('chmod', '755', os.path.join( self.container_dir.get_container_dir( instance.name), instance.name), run_as_root=True) with open(console_log, 'rb') as fp: log_data, remaning = utils.last_bytes(fp, MAX_CONSOLE_BYTES) return log_data except Exception as ex: with excutils.save_and_reraise_exception(): LOG.error(_LE('Failed to get container output' ' for %(instance)s: %(ex)s'), { 'instance': instance.name, 'ex': ex }, instance=instance)
def get_container_console(self, instance): LOG.debug('Container console log') console_log = container_utils.get_container_console(instance) with open(console_log, 'rb') as fp: log_data, remaining = utils.last_bytes(fp, MAX_CONSOLE_BYTES) if remaining > 0: LOG.info(_('Truncated console log returned, ' '%d bytes ignored'), remaining, instance=instance) return log_data
def get_console_output(self, context, instance): LOG.debug('in console output') console_log = self.container_dir.get_console_path(instance.uuid) uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute('chown', '%s:%s' % (uid, uid), console_log, run_as_root=True) utils.execute('chmod', '755', self.container_dir.get_container_dir(instance.uuid), run_as_root=True) with open(console_log, 'rb') as fp: log_data, remaning = utils.last_bytes(fp, MAX_CONSOLE_BYTES) return log_data
def get_console_log(self, instance): if self.client.container_defined(instance.uuid): return console_dir = os.path.join(CONF.lxd.lxd_root_dir, instance.uuid) console_log = self._get_console_path(instance) uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute('chown', '%s:%s' % (uid, uid), console_log, run_as_root=True) utils.execute('chmod', '755', console_dir, run_as_root=True) with open(console_log, 'rb') as fp: log_data, remaining = utils.last_bytes(fp, MAX_CONSOLE_BYTES) if remaining > 0: LOG.info(_('Truncated console log returned, ' '%d bytes ignored'), remaining, instance=instance) return log_data
def get_console_output(self, context, instance): """Get the output of the container console. See `nova.virt.driver.ComputeDriver.get_console_output` for more information. """ instance_attrs = common.InstanceAttributes(instance) console_path = instance_attrs.console_path if not os.path.exists(console_path): return '' uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute( 'chown', '%s:%s' % (uid, uid), console_path, run_as_root=True) utils.execute( 'chmod', '755', instance_attrs.container_path, run_as_root=True) with open(console_path, 'rb') as f: log_data, _ = utils.last_bytes(f, MAX_CONSOLE_BYTES) return log_data
def get_console_output(self, context, instance): LOG.debug('in console output') console_log = self.container_dir.get_console_path(instance.name) if not os.path.exists(console_log): return uid = pwd.getpwuid(os.getuid()).pw_uid utils.execute('chown', '%s:%s' % (uid, uid), console_log, run_as_root=True) utils.execute('chmod', '755', os.path.join( self.container_dir.get_container_dir( instance.name), instance.name), run_as_root=True) with open(console_log, 'rb') as fp: log_data, remaning = utils.last_bytes(fp, MAX_CONSOLE_BYTES) return log_data
def test_seek_too_far_real_file(self): # StringIO doesn't raise IOError if you see past the start of the file. with tempfile.TemporaryFile() as flo: content = b'1234567890' flo.write(content) self.assertEqual((content, 0), utils.last_bytes(flo, 1000))
def test_read_all(self): self.f.seek(0, os.SEEK_SET) out, remaining = utils.last_bytes(self.f, 1000) self.assertEqual(out, b'1234567890') self.assertFalse(remaining > 0)
def test_truncated(self): self.f.seek(0, os.SEEK_SET) out, remaining = utils.last_bytes(self.f, 5) self.assertEqual(out, b'67890') self.assertTrue(remaining > 0)
def test_seek_too_far_real_file(self): # StringIO doesn't raise IOError if you see past the start of the file. flo = tempfile.TemporaryFile() content = '1234567890' flo.write(content) self.assertEqual((content, 0), utils.last_bytes(flo, 1000))
def test_read_all(self): self.f.seek(0, os.SEEK_SET) out, remaining = utils.last_bytes(self.f, 1000) self.assertEqual(out, '1234567890') self.assertFalse(remaining > 0)
def test_truncated(self): self.f.seek(0, os.SEEK_SET) out, remaining = utils.last_bytes(self.f, 5) self.assertEqual(out, '67890') self.assertTrue(remaining > 0)
def test_truncated(self): self.f.seek(0, os.SEEK_SET) out, remaining = utils.last_bytes(self.f, 5) self.assertEqual(out, b"67890") self.assertGreater(remaining, 0)