Esempio n. 1
0
 def _run_dog(self, command, subcommand, *params):
     cmd = ('env', 'LC_ALL=C', 'LANG=C', 'dog', command, subcommand, '-a',
            self.addr, '-p', self.port) + params
     try:
         return utils.execute(*cmd)
     except OSError as e:
         with excutils.save_and_reraise_exception():
             if e.errno == errno.ENOENT:
                 msg = _LE('Sheepdog is not installed. '
                           'OSError: command is %s.')
             else:
                 msg = _LE('OSError: command is %s.')
             LOG.error(msg, cmd)
     except processutils.ProcessExecutionError as e:
         _stderr = e.stderr
         if _stderr.startswith(self.DOG_RESP_CONNECTION_ERROR):
             reason = (_('Failed to connect to sheep daemon. '
                         'addr: %(addr)s, port: %(port)s'), {
                             'addr': self.addr,
                             'port': self.port
                         })
             raise exception.SheepdogError(reason=reason)
         raise exception.SheepdogCmdError(
             cmd=e.cmd,
             exit_code=e.exit_code,
             stdout=e.stdout.replace('\n', '\\n'),
             stderr=e.stderr.replace('\n', '\\n'))
Esempio n. 2
0
 def _run_qemu_img(self, command, *params):
     """Executes qemu-img command wrapper"""
     cmd = ['env', 'LC_ALL=C', 'LANG=C', 'qemu-img', command]
     for param in params:
         if param.startswith(self.QEMU_SHEEPDOG_PREFIX):
             # replace 'sheepdog:vdiname[:snapshotname]' to
             #         'sheepdog:addr:port:vdiname[:snapshotname]'
             param = param.replace(
                 self.QEMU_SHEEPDOG_PREFIX,
                 '%(prefix)s%(addr)s:%(port)s:' % {
                     'prefix': self.QEMU_SHEEPDOG_PREFIX,
                     'addr': self.addr,
                     'port': self.port
                 }, 1)
         cmd.append(param)
     try:
         return utils.execute(*cmd)
     except OSError as e:
         with excutils.save_and_reraise_exception():
             if e.errno == errno.ENOENT:
                 msg = _LE('Qemu-img is not installed. '
                           'OSError: command is %(cmd)s.')
             else:
                 msg = _LE('OSError: command is %(cmd)s.')
             LOG.error(msg, {'cmd': tuple(cmd)})
     except processutils.ProcessExecutionError as e:
         raise exception.SheepdogCmdError(
             cmd=e.cmd,
             exit_code=e.exit_code,
             stdout=e.stdout.replace('\n', '\\n'),
             stderr=e.stderr.replace('\n', '\\n'))
Esempio n. 3
0
 def test_create_unknown_error(self, fake_logger, fake_execute):
     cmd = self.test_data.cmd_dog_vdi_create(self._vdiname, self._vdisize)
     exit_code = 1
     stdout = 'stdout_dummy'
     stderr = 'stderr_dummy'
     expected_msg = self.test_data.sheepdog_cmd_error(
         cmd=cmd, exit_code=exit_code, stdout=stdout, stderr=stderr)
     fake_execute.side_effect = exception.SheepdogCmdError(
         cmd=cmd, exit_code=exit_code, stdout=stdout.replace('\n', '\\n'),
         stderr=stderr.replace('\n', '\\n'))
     ex = self.assertRaises(exception.SheepdogCmdError, self.client.create,
                            self._vdiname, self._vdisize)
     self.assertTrue(fake_logger.error.called)
     self.assertEqual(expected_msg, ex.msg)
Esempio n. 4
0
 def test_create_fail_to_connect(self, fake_logger, fake_execute):
     cmd = self.test_data.cmd_dog_vdi_create(self._vdiname, self._vdisize)
     exit_code = 2
     stdout = ''
     stderr = self.test_data.DOG_COMMAND_ERROR_FAIL_TO_CONNECT
     expected_msg = self.test_data.sheepdog_cmd_error(
         cmd=cmd, exit_code=exit_code, stdout=stdout, stderr=stderr)
     fake_execute.side_effect = exception.SheepdogCmdError(
         cmd=cmd, exit_code=exit_code, stdout=stdout.replace('\n', '\\n'),
         stderr=stderr.replace('\n', '\\n'))
     ex = self.assertRaises(exception.SheepdogCmdError, self.client.create,
                            self._vdiname, self._vdisize)
     self.assertTrue(fake_logger.error.called)
     self.assertEqual(expected_msg, ex.msg)
Esempio n. 5
0
 def test_create_vdi_already_exists(self, fake_logger, fake_execute):
     cmd = self.test_data.cmd_dog_vdi_create(self._vdiname, self._vdisize)
     exit_code = 1
     stdout = ''
     stderr = (self.test_data.DOG_VDI_CREATE_VDI_ALREADY_EXISTS %
               {'vdiname': self._vdiname})
     expected_msg = self.test_data.sheepdog_cmd_error(
         cmd=cmd, exit_code=exit_code, stdout=stdout, stderr=stderr)
     fake_execute.side_effect = exception.SheepdogCmdError(
         cmd=cmd, exit_code=exit_code, stdout=stdout.replace('\n', '\\n'),
         stderr=stderr.replace('\n', '\\n'))
     ex = self.assertRaises(exception.SheepdogCmdError, self.client.create,
                            self._vdiname, self._vdisize)
     self.assertTrue(fake_logger.error.called)
     self.assertEqual(expected_msg, ex.msg)
Esempio n. 6
0
 def test_check_cluster_status_unknown_error(self, fake_logger,
                                             fake_execute):
     cmd = self.test_data.CMD_DOG_CLUSTER_INFO
     exit_code = 2
     stdout = 'stdout_dummy'
     stderr = 'stdout_dummy'
     expected_msg = self.test_data.sheepdog_cmd_error(cmd=cmd,
                                                      exit_code=exit_code,
                                                      stdout=stdout,
                                                      stderr=stderr)
     fake_execute.side_effect = exception.SheepdogCmdError(
         cmd=cmd, exit_code=exit_code, stdout=stdout, stderr=stderr)
     ex = self.assertRaises(exception.SheepdogCmdError,
                            self.client.check_cluster_status)
     self.assertEqual(expected_msg, ex.msg)
Esempio n. 7
0
 def test_check_cluster_status_fail_to_connect(self, fake_logger,
                                               fake_execute):
     cmd = self.test_data.CMD_DOG_CLUSTER_INFO
     exit_code = 2
     stdout = 'stdout_dummy'
     stderr = self.test_data.DOG_COMMAND_ERROR_FAIL_TO_CONNECT
     expected_msg = self.test_data.sheepdog_cmd_error(cmd=cmd,
                                                      exit_code=exit_code,
                                                      stdout=stdout,
                                                      stderr=stderr)
     fake_execute.side_effect = exception.SheepdogCmdError(
         cmd=cmd, exit_code=exit_code, stdout=stdout.replace('\n', '\\n'),
         stderr=stderr.replace('\n', '\\n'))
     ex = self.assertRaises(exception.SheepdogCmdError,
                            self.client.check_cluster_status)
     self.assertEqual(expected_msg, ex.msg)
     self.assertTrue(fake_logger.error.called)
Esempio n. 8
0
 def _run_dog(self, command, subcommand, *params):
     """Execute dog command wrapper."""
     addr = self.get_addr()
     cmd = ('env', 'LC_ALL=C', 'LANG=C', 'dog', command, subcommand, '-a',
            addr, '-p', self.port) + params
     try:
         (_stdout, _stderr) = utils.execute(*cmd)
         if _stderr.startswith(self.DOG_RESP_CONNECTION_ERROR):
             # NOTE(tishizaki)
             # Dog command does not return error_code although
             # dog command cannot connect to sheep process.
             # That is a Sheepdog's bug.
             # To avoid a Sheepdog's bug, now we need to check stderr.
             # If Sheepdog has been fixed, this check logic is needed
             # by old Sheepdog users.
             reason = (_('Failed to connect to sheep daemon. '
                         'addr: %(addr)s, port: %(port)s'), {
                             'addr': addr,
                             'port': self.port
                         })
             raise exception.SheepdogError(reason=reason)
         return (_stdout, _stderr)
     except OSError as e:
         with excutils.save_and_reraise_exception():
             if e.errno == errno.ENOENT:
                 msg = _LE('Sheepdog is not installed. '
                           'OSError: command is %s.')
             else:
                 msg = _LE('OSError: command is %s.')
             LOG.error(msg, cmd)
     except processutils.ProcessExecutionError as e:
         _stderr = e.stderr
         if _stderr.startswith(self.DOG_RESP_CONNECTION_ERROR):
             reason = (_('Failed to connect to sheep daemon. '
                         'addr: %(addr)s, port: %(port)s'), {
                             'addr': addr,
                             'port': self.port
                         })
             raise exception.SheepdogError(reason=reason)
         raise exception.SheepdogCmdError(
             cmd=e.cmd,
             exit_code=e.exit_code,
             stdout=e.stdout.replace('\n', '\\n'),
             stderr=e.stderr.replace('\n', '\\n'))
Esempio n. 9
0
 def _run_dog(self, command, subcommand, *params):
     cmd = ('env', 'LC_ALL=C', 'LANG=C', 'dog', command, subcommand,
            '-a', self.addr, '-p', self.port) + params
     try:
         return utils.execute(*cmd)
     except OSError as e:
         with excutils.save_and_reraise_exception():
             if e.errno == errno.ENOENT:
                 msg = _LE('Sheepdog is not installed. '
                           'OSError: command is %s.')
             else:
                 msg = _LE('OSError: command is %s.')
             LOG.error(msg, cmd)
     except processutils.ProcessExecutionError as e:
         raise exception.SheepdogCmdError(
             cmd=e.cmd,
             exit_code=e.exit_code,
             stdout=e.stdout.replace('\n', '\\n'),
             stderr=e.stderr.replace('\n', '\\n'))
Esempio n. 10
0
 def _run_qemu_img(self, command, *params):
     """Executes qemu-img command wrapper."""
     addr = self.get_addr()
     cmd = ['env', 'LC_ALL=C', 'LANG=C', 'qemu-img', command]
     for param in params:
         if param.startswith(self.QEMU_SHEEPDOG_PREFIX):
             # replace 'sheepdog:vdiname[:snapshotname]' to
             #         'sheepdog:addr:port:vdiname[:snapshotname]'
             param = param.replace(
                 self.QEMU_SHEEPDOG_PREFIX,
                 '%(prefix)s%(addr)s:%(port)s:' % {
                     'prefix': self.QEMU_SHEEPDOG_PREFIX,
                     'addr': addr,
                     'port': self.port
                 }, 1)
         cmd.append(param)
     try:
         return utils.execute(*cmd)
     except OSError as e:
         with excutils.save_and_reraise_exception():
             if e.errno == errno.ENOENT:
                 msg = ('Qemu-img is not installed. OSError: command is '
                        '%(cmd)s.')
             else:
                 msg = 'OSError: command is %(cmd)s.'
             LOG.error(msg, {'cmd': tuple(cmd)})
     except processutils.ProcessExecutionError as e:
         _stderr = e.stderr
         if self.QEMU_IMG_RESP_CONNECTION_ERROR in _stderr:
             reason = (_('Failed to connect to sheep daemon. '
                         'addr: %(addr)s, port: %(port)s'), {
                             'addr': addr,
                             'port': self.port
                         })
             raise exception.SheepdogError(reason=reason)
         raise exception.SheepdogCmdError(
             cmd=e.cmd,
             exit_code=e.exit_code,
             stdout=e.stdout.replace('\n', '\\n'),
             stderr=e.stderr.replace('\n', '\\n'))