Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
 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))
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
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)
Ejemplo n.º 12
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))
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
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)
Ejemplo n.º 15
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)