Esempio n. 1
0
    def test__exec_ipmitool_first_call_to_address(self, mock_exec, mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            "ipmitool",
            "-I",
            "lanplus",
            "-H",
            self.info["address"],
            "-L",
            self.info["priv_level"],
            "-U",
            self.info["username"],
            "-f",
            file_handle,
            "A",
            "B",
            "C",
        ]

        mock_timing_support.return_value = False
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)

        ipmi._exec_ipmitool(self.info, "A B C")

        mock_pwf.assert_called_once_with(self.info["password"])
        mock_exec.assert_called_once_with(*args)
        self.assertFalse(mock_sleep.called)
    def _issue_bmc_reset(self, driver_info, task):
        """ Issues a bmc reset and waits till the BMC is ready for servicing
        """
        cmd = 'bmc reset cold'
        node_uuid = task.node.uuid
        self.log.debug("Issuing bmc cold reset to node %s" %(task.node.name))
        try:
            out, err = ipmitool._exec_ipmitool(driver_info, cmd)
            self.log.debug('bmc reset returned stdout: %(stdout)s, stderr:'
                           ' %(stderr)s', {'stdout': out, 'stderr': err})
        except processutils.ProcessExecutionError as err:
            self.log.exception(_translators.log_error('IPMI "bmc reset" failed for node %(node_id)s '
                                                      'with error: %(error)s.'),
                               {'node_id': node_uuid, 'error': err})
            raise exception.IPMIFailure(cmd=cmd)

        sleep_count = 10
        cmd = 'bmc info'
        while sleep_count:
            try:
                out, err = ipmitool._exec_ipmitool(driver_info, cmd)
                self.log.debug('bmc reset returned stdout: %(stdout)s, stderr:'
                               ' %(stderr)s', {'stdout': out, 'stderr': err})
                break
            except processutils.ProcessExecutionError as err:
                self.log.debug(_translators.log_error('IPMI "bmc info" failed for node %(node_id)s '
                                                      'with error: %(error)s. Sleeping and retrying later.'
                                                      'sleep_count: %(sleep_count)s'),
                               {'node_id': node_uuid, 'error': err, 'sleep_count': sleep_count})
                time.sleep(10)
                sleep_count -= 1

        if not sleep_count:
            self.log.exception('After bmc reset, connection to bmc is lost!')
            raise exception.IPMIFailure(cmd='bmc reset')
Esempio n. 3
0
    def test__exec_ipmitool(self, mock_exec, mock_pwf):
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-U',
            self.info['username'],
            '-f',
            file_handle,
            'A',
            'B',
            'C',
        ]

        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)

        ipmi._exec_ipmitool(self.info, 'A B C')

        mock_pwf.assert_called_once_with(self.info['password'])
        mock_exec.assert_called_once_with(*args, attempts=3)
Esempio n. 4
0
    def test__exec_ipmitool(self):
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle,
            'A', 'B', 'C',
            ]

        with mock.patch.object(ipmi, '_make_password_file',
                               autospec=True) as mock_pwf:
            mock_pwf.return_value = file_handle
            with mock.patch.object(utils, 'execute',
                                   autospec=True) as mock_exec:
                mock_exec.return_value = (None, None)

                ipmi._exec_ipmitool(self.info, 'A B C')

                mock_pwf.assert_called_once_with(self.info['password'])
                mock_exec.assert_called_once_with(*args, attempts=3)
Esempio n. 5
0
    def test__exec_ipmitool_without_username(self, mock_exec, mock_pwf,
                                             mock_timing_support, mock_sleep):
        self.info['username'] = None
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-f',
            file_handle,
            'A',
            'B',
            'C',
        ]

        mock_timing_support.return_value = False
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)
        ipmi._exec_ipmitool(self.info, 'A B C')
        self.assertTrue(mock_pwf.called)
        mock_exec.assert_called_once_with(*args)
Esempio n. 6
0
    def test__exec_ipmitool_with_timing(self, mock_exec, mock_pwf,
            mock_timing_support, mock_sleep):
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-R', '12',
            '-N', '5',
            '-f', file_handle,
            'A', 'B', 'C',
            ]

        mock_timing_support.return_value = True
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)

        ipmi._exec_ipmitool(self.info, 'A B C')

        mock_pwf.assert_called_once_with(self.info['password'])
        mock_exec.assert_called_once_with(*args)
Esempio n. 7
0
    def test__exec_ipmitool_first_call_to_address(self, mock_exec, mock_pwf,
            mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle,
            'A', 'B', 'C',
            ]

        mock_timing_support.return_value = False
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)

        ipmi._exec_ipmitool(self.info, 'A B C')

        mock_pwf.assert_called_once_with(self.info['password'])
        mock_exec.assert_called_once_with(*args)
        self.assertFalse(mock_sleep.called)
Esempio n. 8
0
    def test__exec_ipmitool_without_username(self, mock_exec, mock_pwf, mock_timing_support, mock_sleep):
        self.info["username"] = None
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            "ipmitool",
            "-I",
            "lanplus",
            "-H",
            self.info["address"],
            "-L",
            self.info["priv_level"],
            "-f",
            file_handle,
            "A",
            "B",
            "C",
        ]

        mock_timing_support.return_value = False
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)
        ipmi._exec_ipmitool(self.info, "A B C")
        self.assertTrue(mock_pwf.called)
        mock_exec.assert_called_once_with(*args)
Esempio n. 9
0
    def test__exec_ipmitool(self):
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-U',
            self.info['username'],
            '-f',
            file_handle,
            'A',
            'B',
            'C',
        ]

        with mock.patch.object(ipmi, '_make_password_file',
                               autospec=True) as mock_pwf:
            mock_pwf.return_value = file_handle
            with mock.patch.object(utils, 'execute',
                                   autospec=True) as mock_exec:
                mock_exec.return_value = (None, None)

                ipmi._exec_ipmitool(self.info, 'A B C')

                mock_pwf.assert_called_once_with(self.info['password'])
                mock_exec.assert_called_once_with(*args, attempts=3)
Esempio n. 10
0
    def test__exec_ipmitool_first_call_to_address(self, mock_exec, mock_pwf,
                                                  mock_timing_support,
                                                  mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-U',
            self.info['username'],
            '-f',
            file_handle,
            'A',
            'B',
            'C',
        ]

        mock_timing_support.return_value = False
        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)

        ipmi._exec_ipmitool(self.info, 'A B C')

        mock_pwf.assert_called_once_with(self.info['password'])
        mock_exec.assert_called_once_with(*args)
        self.assertFalse(mock_sleep.called)
Esempio n. 11
0
    def test__power_status_error(self):
        self.mox.StubOutWithMock(ipmi, '_exec_ipmitool')
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is badstate\n", None])
        self.mox.ReplayAll()

        state = ipmi._power_status(self.info)
        self.mox.VerifyAll()
        self.assertEqual(state, states.ERROR)
Esempio n. 12
0
    def test_set_boot_device_ok(self):
        self.mox.StubOutWithMock(ipmi, '_exec_ipmitool')

        ipmi._exec_ipmitool(self.info, "chassis bootdev pxe").\
                AndReturn([None, None])
        self.mox.ReplayAll()

        with task_manager.acquire([self.node['uuid']]) as task:
            self.driver.power._set_boot_device(task, self.node, 'pxe')
        self.mox.VerifyAll()
Esempio n. 13
0
    def test__exec_ipmitool_second_call_to_address_no_sleep(self, mock_exec, mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [
            [
                "ipmitool",
                "-I",
                "lanplus",
                "-H",
                self.info["address"],
                "-L",
                self.info["priv_level"],
                "-U",
                self.info["username"],
                "-f",
                file_handle1,
                "A",
                "B",
                "C",
            ],
            [
                "ipmitool",
                "-I",
                "lanplus",
                "-H",
                self.info["address"],
                "-L",
                self.info["priv_level"],
                "-U",
                self.info["username"],
                "-f",
                file_handle2,
                "D",
                "E",
                "F",
            ],
        ]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, "A B C")
        mock_exec.assert_called_with(*args[0])
        # act like enough time has passed
        ipmi.LAST_CMD_TIME[self.info["address"]] = time.time() - CONF.ipmi.min_command_interval
        ipmi._exec_ipmitool(self.info, "D E F")
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 14
0
    def test__exec_ipmitool_two_calls_to_diff_address(self, mock_exec,
                                                      mock_pwf,
                                                      mock_timing_support,
                                                      mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [[
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-U',
            self.info['username'],
            '-f',
            file_handle1,
            'A',
            'B',
            'C',
        ],
                [
                    'ipmitool',
                    '-I',
                    'lanplus',
                    '-H',
                    '127.127.127.127',
                    '-L',
                    self.info['priv_level'],
                    '-U',
                    self.info['username'],
                    '-f',
                    file_handle2,
                    'D',
                    'E',
                    'F',
                ]]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, 'A B C')
        mock_exec.assert_called_with(*args[0])
        self.info['address'] = '127.127.127.127'
        ipmi._exec_ipmitool(self.info, 'D E F')
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 15
0
    def test__exec_ipmitool_second_call_to_address_no_sleep(
            self, mock_exec, mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [[
            'ipmitool',
            '-I',
            'lanplus',
            '-H',
            self.info['address'],
            '-L',
            self.info['priv_level'],
            '-U',
            self.info['username'],
            '-f',
            file_handle1,
            'A',
            'B',
            'C',
        ],
                [
                    'ipmitool',
                    '-I',
                    'lanplus',
                    '-H',
                    self.info['address'],
                    '-L',
                    self.info['priv_level'],
                    '-U',
                    self.info['username'],
                    '-f',
                    file_handle2,
                    'D',
                    'E',
                    'F',
                ]]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, 'A B C')
        mock_exec.assert_called_with(*args[0])
        # act like enough time has passed
        ipmi.LAST_CMD_TIME[self.info['address']] = (
            time.time() - CONF.ipmi.min_command_interval)
        ipmi._exec_ipmitool(self.info, 'D E F')
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 16
0
    def test__exec_ipmitool_two_calls_to_diff_address(self, mock_exec, mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [
            [
                "ipmitool",
                "-I",
                "lanplus",
                "-H",
                self.info["address"],
                "-L",
                self.info["priv_level"],
                "-U",
                self.info["username"],
                "-f",
                file_handle1,
                "A",
                "B",
                "C",
            ],
            [
                "ipmitool",
                "-I",
                "lanplus",
                "-H",
                "127.127.127.127",
                "-L",
                self.info["priv_level"],
                "-U",
                self.info["username"],
                "-f",
                file_handle2,
                "D",
                "E",
                "F",
            ],
        ]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, "A B C")
        mock_exec.assert_called_with(*args[0])
        self.info["address"] = "127.127.127.127"
        ipmi._exec_ipmitool(self.info, "D E F")
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 17
0
def send_raw(task, raw_bytes):
    """Send raw bytes to the BMC. Bytes should be a string of bytes.

    :param task: a TaskManager instance.
    :param raw_bytes: a string of raw bytes to send, e.g. '0x00 0x01'
    :returns: a tuple with stdout and stderr.
    :raises: IPMIFailure on an error from ipmitool.
    :raises: MissingParameterValue if a required parameter is missing.
    :raises: InvalidParameterValue when an invalid value is specified.

    """
    node_uuid = task.node.uuid
    LOG.debug('Sending node %(node)s raw bytes %(bytes)s',
              {'bytes': raw_bytes, 'node': node_uuid})
    driver_info = ipmitool._parse_driver_info(task.node)
    cmd = 'raw %s' % raw_bytes

    try:
        out, err = ipmitool._exec_ipmitool(driver_info, cmd)
        LOG.debug('send raw bytes returned stdout: %(stdout)s, stderr:'
                  ' %(stderr)s', {'stdout': out, 'stderr': err})
    except (exception.PasswordFileFailedToCreate,
            processutils.ProcessExecutionError) as e:
        LOG.exception(_LE('IPMI "raw bytes" failed for node %(node_id)s '
                      'with error: %(error)s.'),
                      {'node_id': node_uuid, 'error': e})
        raise exception.IPMIFailure(cmd=cmd)

    return out, err
Esempio n. 18
0
def dump_sdr(task, file_path):
    """Dump SDR data to a file.

    :param task: a TaskManager instance.
    :param file_path: the path to SDR dump file.
    :raises: IPMIFailure on an error from ipmitool.
    :raises: MissingParameterValue if a required parameter is missing.
    :raises: InvalidParameterValue when an invalid value is specified.

    """
    node_uuid = task.node.uuid
    LOG.debug('Dump SDR data for node %(node)s to file %(name)s',
              {'name': file_path, 'node': node_uuid})
    driver_info = ipmitool._parse_driver_info(task.node)
    cmd = 'sdr dump %s' % file_path

    try:
        out, err = ipmitool._exec_ipmitool(driver_info, cmd)
        LOG.debug('dump SDR returned stdout: %(stdout)s, stderr:'
                  ' %(stderr)s', {'stdout': out, 'stderr': err})
    except (exception.PasswordFileFailedToCreate,
            processutils.ProcessExecutionError) as e:
        LOG.exception(_LE('IPMI "sdr dump" failed for node %(node_id)s '
                      'with error: %(error)s.'),
                      {'node_id': node_uuid, 'error': e})
        raise exception.IPMIFailure(cmd=cmd)
Esempio n. 19
0
    def test__exec_ipmitool_without_username(self, mock_exec, mock_pwf):
        self.info['username'] = None
        pw_file_handle = tempfile.NamedTemporaryFile()
        pw_file = pw_file_handle.name
        file_handle = open(pw_file, "w")
        args = [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-f', file_handle,
            'A', 'B', 'C',
            ]

        mock_pwf.return_value = file_handle
        mock_exec.return_value = (None, None)
        ipmi._exec_ipmitool(self.info, 'A B C')
        self.assertTrue(mock_pwf.called)
        mock_exec.assert_called_once_with(*args, attempts=3)
Esempio n. 20
0
    def test__exec_ipmitool(self):
        pw_file = '/tmp/password_file'
        file_handle = open(pw_file, "w")

        self.mox.StubOutWithMock(ipmi, '_make_password_file')
        self.mox.StubOutWithMock(utils, 'execute')
        args = [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-U', self.info['username'],
            '-f', file_handle,
            'A', 'B', 'C',
            ]
        ipmi._make_password_file(self.info['password']).AndReturn(file_handle)
        utils.execute(*args, attempts=3).AndReturn((None, None))
        self.mox.ReplayAll()

        ipmi._exec_ipmitool(self.info, 'A B C')
        self.mox.VerifyAll()
Esempio n. 21
0
    def test__exec_ipmitool_second_call_to_address_no_sleep(self, mock_exec,
            mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [[
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle1,
            'A', 'B', 'C',
        ],
        [
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle2,
            'D', 'E', 'F',
        ]]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, 'A B C')
        mock_exec.assert_called_with(*args[0])
        # act like enough time has passed
        ipmi.LAST_CMD_TIME[self.info['address']] = (time.time() -
                CONF.ipmi.min_command_interval)
        ipmi._exec_ipmitool(self.info, 'D E F')
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 22
0
    def test__exec_ipmitool_two_calls_to_diff_address(self, mock_exec,
            mock_pwf, mock_timing_support, mock_sleep):
        ipmi.LAST_CMD_TIME = {}
        pw_file_handle1 = tempfile.NamedTemporaryFile()
        pw_file1 = pw_file_handle1.name
        file_handle1 = open(pw_file1, "w")
        pw_file_handle2 = tempfile.NamedTemporaryFile()
        pw_file2 = pw_file_handle2.name
        file_handle2 = open(pw_file2, "w")
        args = [[
            'ipmitool',
            '-I', 'lanplus',
            '-H', self.info['address'],
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle1,
            'A', 'B', 'C',
        ],
        [
            'ipmitool',
            '-I', 'lanplus',
            '-H', '127.127.127.127',
            '-L', self.info['priv_level'],
            '-U', self.info['username'],
            '-f', file_handle2,
            'D', 'E', 'F',
        ]]

        mock_timing_support.return_value = False
        mock_pwf.side_effect = iter([file_handle1, file_handle2])
        mock_exec.side_effect = iter([(None, None), (None, None)])

        ipmi._exec_ipmitool(self.info, 'A B C')
        mock_exec.assert_called_with(*args[0])
        self.info['address'] = '127.127.127.127'
        ipmi._exec_ipmitool(self.info, 'D E F')
        self.assertFalse(mock_sleep.called)
        mock_exec.assert_called_with(*args[1])
Esempio n. 23
0
    def test_get_power_state(self):
        self.mox.StubOutWithMock(ipmi, '_exec_ipmitool')
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is off\n", None])
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is on\n", None])
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["\n", None])
        self.mox.ReplayAll()

        pstate = self.driver.power.get_power_state(None, self.node)
        self.assertEqual(pstate, states.POWER_OFF)

        pstate = self.driver.power.get_power_state(None, self.node)
        self.assertEqual(pstate, states.POWER_ON)

        pstate = self.driver.power.get_power_state(None, self.node)
        self.assertEqual(pstate, states.ERROR)

        self.mox.VerifyAll()
Esempio n. 24
0
    def test__power_on_max_retries(self):
        self.config(ipmi_power_retry=2)
        self.mox.StubOutWithMock(ipmi, '_exec_ipmitool')

        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is off\n", None])
        ipmi._exec_ipmitool(self.info, "power on").AndReturn([None, None])
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is off\n", None])
        ipmi._exec_ipmitool(self.info, "power on").AndReturn([None, None])
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is off\n", None])
        ipmi._exec_ipmitool(self.info, "power on").AndReturn([None, None])
        ipmi._exec_ipmitool(self.info, "power status").AndReturn(
                ["Chassis Power is off\n", None])
        self.mox.ReplayAll()

        state = ipmi._power_on(self.info)
        self.mox.VerifyAll()
        self.assertEqual(state, states.ERROR)