Пример #1
0
def reboot(adapter, instance, hard):
    """Reboots a VM.

    :param adapter: A pypowervm.adapter.Adapter.
    :param instance: The nova instance to reboot.
    :param hard: Boolean True if hard reboot, False otherwise.
    :raises: InstanceRebootFailure
    """
    # Synchronize power-on and power-off ops on a given instance
    with lockutils.lock('power_%s' % instance.uuid):
        try:
            entry = get_instance_wrapper(adapter, instance)
            if entry.state != pvm_bp.LPARState.NOT_ACTIVATED:
                if hard:
                    power.PowerOp.stop(
                        entry, opts=popts.PowerOffOpts().vsp_hard().restart())
                else:
                    power.power_off_progressive(entry, restart=True)
            else:
                # pypowervm does NOT throw an exception if "already down".
                # Any other exception from pypowervm is a legitimate failure;
                # let it raise up.
                # If we get here, pypowervm thinks the instance is down.
                power.power_on(entry, None)
        except pvm_exc.Error as e:
            LOG.exception("PowerVM error during reboot.", instance=instance)
            raise exc.InstanceRebootFailure(reason=six.text_type(e))
Пример #2
0
Файл: vm.py Проект: kstev/nova-1
def reboot(adapter, instance, hard):
    """Reboots a VM.

    :param adapter: A pypowervm.adapter.Adapter.
    :param instance: The nova instance to reboot.
    :param hard: Boolean True if hard reboot, False otherwise.
    :raises: InstanceRebootFailure
    """
    # Synchronize power-on and power-off ops on a given instance
    with lockutils.lock('power_%s' % instance.uuid):
        try:
            entry = get_instance_wrapper(adapter, instance)
            if entry.state != pvm_bp.LPARState.NOT_ACTIVATED:
                if hard:
                    power.PowerOp.stop(
                        entry, opts=popts.PowerOffOpts().vsp_hard().restart())
                else:
                    power.power_off_progressive(entry, restart=True)
            else:
                # pypowervm does NOT throw an exception if "already down".
                # Any other exception from pypowervm is a legitimate failure;
                # let it raise up.
                # If we get here, pypowervm thinks the instance is down.
                power.power_on(entry, None)
        except pvm_exc.Error as e:
            LOG.exception("PowerVM error during reboot.", instance=instance)
            raise exc.InstanceRebootFailure(reason=six.text_type(e))
Пример #3
0
def power_on(adapter, instance, host_uuid, entry=None):
    if entry is None:
        entry = get_instance_wrapper(adapter, instance, host_uuid)

    # Get the current state and see if we can start the VM
    if entry.state in POWERVM_STARTABLE_STATE:
        # Now start the lpar
        power.power_on(entry, host_uuid)
        return True

    return False
Пример #4
0
def power_on(adapter, instance, host_uuid, entry=None):
    if entry is None:
        entry = get_instance_wrapper(adapter, instance, host_uuid)

    # Get the current state and see if we can start the VM
    if entry.state in POWERVM_STARTABLE_STATE:
        # Now start the lpar
        power.power_on(entry, host_uuid)
        return True

    return False
Пример #5
0
 def test_pwron_already_on(self):
     """PowerOn when the system is already powered on."""
     part = self.mock_partition()
     for prefix in power._ALREADY_POWERED_ON_ERRS:
         self.run_job.side_effect = self.validate_run(
             part,
             ex_suff="PowerOn",
             result=self.efail(error="Something %s Something else" %
                               prefix))
         power.power_on(part, None)
         self.assertEqual(1, self.run_job.call_count)
         self.run_job.reset_mock()
Пример #6
0
    def test_power_on_off_vios(self, mock_vios, mock_job_p, mock_run_job):
        """Performs a simple set of Power On/Off Tests."""
        mock_vios.adapter = self.adpt
        power._power_on_off(mock_vios, 'PowerOn', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(0, mock_job_p.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()
        self.adpt.reset_mock()

        # Try a power off
        power._power_on_off(mock_vios, 'PowerOff', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        # Only the operation parameter is appended
        self.assertEqual(1, mock_job_p.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try a power off when the RMC state is active
        mock_vios.rmc_state = pvm_bp.RMCState.ACTIVE
        power._power_on_off(mock_vios, 'PowerOff', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        # The operation and immediate(no-delay) parameters are appended
        self.assertEqual(2, mock_job_p.call_count)
        mock_vios.reset_mock()
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try a more complex power off
        power._power_on_off(mock_vios,
                            'PowerOff',
                            '1111',
                            force_immediate=True,
                            restart=True,
                            timeout=100)
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(3, mock_job_p.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try optional parameters
        power.power_on(mock_vios,
                       '1111',
                       add_parms={power.BootMode.KEY: power.BootMode.SMS})
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(1, mock_job_p.call_count)
        mock_job_p.assert_called_with(power.BootMode.KEY, power.BootMode.SMS)
Пример #7
0
def power_on(adapter, instance):
    """Powers on a VM.

    :param adapter: A pypowervm.adapter.Adapter.
    :param instance: The nova instance to power on.
    :raises: InstancePowerOnFailure
    """
    # Synchronize power-on and power-off ops on a given instance
    with lockutils.lock('power_%s' % instance.uuid):
        entry = get_instance_wrapper(adapter, instance)
        # Get the current state and see if we can start the VM
        if entry.state in _POWERVM_STARTABLE_STATE:
            # Now start the lpar
            try:
                power.power_on(entry, None)
            except pvm_exc.Error as e:
                LOG.exception("PowerVM error during power_on.",
                              instance=instance)
                raise exc.InstancePowerOnFailure(reason=six.text_type(e))
Пример #8
0
def power_on(adapter, instance, opts=None):
    """Powers on a VM.

    :param adapter: A pypowervm.adapter.Adapter.
    :param instance: The nova instance to power on.
    :param opts: (Optional) Additional parameters to the pypowervm power_on
                 method.  See that method's docstring for details.
    :return: True if the instance was powered on.  False if it was not in a
             startable state.
    :raises: InstancePowerOnFailure
    """
    # Synchronize power-on and power-off ops on a given instance
    with lockutils.lock('power_%s' % instance.uuid):
        entry = get_instance_wrapper(adapter, instance)

        # Get the current state and see if we can start the VM
        if entry.state in POWERVM_STARTABLE_STATE:
            # Now start the lpar
            power.power_on(entry, None, add_parms=opts)
            return True

    return False
Пример #9
0
    def test_pwron(self):
        """Test the power_on method."""
        lpar = self.mock_partition()
        self.run_job.side_effect = self.validate_run(lpar, "PowerOn")
        power.power_on(lpar, None)
        self.assertEqual(1, self.run_job.call_count)

        self.run_job.reset_mock()

        # Try optional parameters
        self.run_job.side_effect = self.validate_run(
            lpar,
            "PowerOn",
            ex_parms={
                'bootmode=sms', 'iIPLsource=a', 'remove_optical_name=testVopt',
                'remove_optical_time=30'
            },
            ex_synch=False)
        power.power_on(lpar,
                       None,
                       add_parms={
                           power.BootMode.KEY: power.BootMode.SMS,
                           pvm_lpar.IPLSrc.KEY: pvm_lpar.IPLSrc.A,
                           power.RemoveOptical.KEY_TIME: 30,
                           power.RemoveOptical.KEY_NAME: 'testVopt'
                       },
                       synchronous=False)
        self.assertEqual(1, self.run_job.call_count)

        self.run_job.reset_mock()

        # Job timeout, IBMi, implicit remove_optical_time
        ibmi = self.mock_partition(env=pvm_bp.LPARType.OS400)
        self.run_job.side_effect = self.validate_run(
            ibmi,
            "PowerOn",
            ex_parms={'remove_optical_name=test', 'remove_optical_time=0'},
            result=self.etimeout())
        self.assertRaises(pexc.VMPowerOnTimeout,
                          power.power_on,
                          ibmi,
                          None,
                          add_parms=power.RemoveOptical.bld_map(name="test"))

        self.assertEqual(1, self.run_job.call_count)

        self.run_job.reset_mock()

        # Job failure, VIOS partition, explicit remove_optical_time
        vios = self.mock_partition(env=pvm_bp.LPARType.VIOS)
        self.run_job.side_effect = self.validate_run(
            vios,
            "PowerOn",
            ex_parms={'remove_optical_name=test2', 'remove_optical_time=25'},
            result=self.efail())
        self.assertRaises(pexc.VMPowerOnFailure,
                          power.power_on,
                          vios,
                          None,
                          add_parms=power.RemoveOptical.bld_map(name="test2",
                                                                time=25))

        self.assertEqual(1, self.run_job.call_count)
Пример #10
0
    def test_power_on_off(self, mock_lpar, mock_job_p, mock_run_job):
        """Performs a simple set of Power On/Off Tests."""
        def run_job_mock(**kwargs1):
            """Produce a run_job method that validates the given kwarg values.

            E.g. run_job_mock(foo='bar') will produce a mock run_job that
            asserts its foo argument is 'bar'.
            """
            def run_job(*args, **kwargs2):
                for key, val in kwargs1.items():
                    self.assertEqual(val, kwargs2[key])
            return run_job

        mock_lpar.adapter = self.adpt
        power._power_on_off(mock_lpar, 'PowerOn', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(0, mock_job_p.call_count)
        self.assertEqual(1, self.adpt.invalidate_cache_elem.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()
        self.adpt.reset_mock()

        # Try a power off
        power._power_on_off(mock_lpar, 'PowerOff', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        # Only the operation parameter is appended
        self.assertEqual(1, mock_job_p.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try a power off when the RMC state is active
        mock_lpar.rmc_state = pvm_bp.RMCState.ACTIVE
        power._power_on_off(mock_lpar, 'PowerOff', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        # The operation and immediate(no-delay) parameters are appended
        self.assertEqual(2, mock_job_p.call_count)
        mock_lpar.reset_mock()
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try a power off of IBMi
        mock_lpar.rmc_state = pvm_bp.RMCState.INACTIVE
        mock_lpar.env = pvm_bp.LPARType.OS400
        mock_lpar.ref_code = '00000000'
        power._power_on_off(mock_lpar, 'PowerOff', '1111')
        self.assertEqual(1, mock_run_job.call_count)
        # Only the operation parameter is appended
        self.assertEqual(1, mock_job_p.call_count)
        mock_job_p.assert_called_with('operation', 'osshutdown')
        mock_lpar.reset_mock()
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        # Try a more complex power off
        power._power_on_off(mock_lpar, 'PowerOff', '1111',
                            force_immediate=True, restart=True, timeout=100)
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(3, mock_job_p.call_count)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        mock_run_job.side_effect = run_job_mock(synchronous=True)
        # Try optional parameters
        power.power_on(mock_lpar, '1111',
                       add_parms={power.BootMode.KEY: power.BootMode.SMS})
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(1, mock_job_p.call_count)
        mock_job_p.assert_called_with(power.BootMode.KEY, power.BootMode.SMS)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        power.power_on(mock_lpar, '1111', add_parms={
            pvm_lpar.IPLSrc.KEY: pvm_lpar.IPLSrc.A}, synchronous=True)
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(1, mock_job_p.call_count)
        mock_job_p.assert_called_with(pvm_lpar.IPLSrc.KEY, pvm_lpar.IPLSrc.A)
        mock_run_job.reset_mock()
        mock_job_p.reset_mock()

        mock_run_job.side_effect = run_job_mock(synchronous=False)
        power.power_on(mock_lpar, '1111', add_parms={
            power.KeylockPos.KEY: power.KeylockPos.MANUAL}, synchronous=False)
        self.assertEqual(1, mock_run_job.call_count)
        self.assertEqual(1, mock_job_p.call_count)
        mock_job_p.assert_called_with(power.KeylockPos.KEY,
                                      power.KeylockPos.MANUAL)
Пример #11
0
 def execute(self, lpar_wrap):
     LOG.info(_LI('Powering on instance: %s'), self.instance.name)
     power.power_on(lpar_wrap, self.host_uuid, add_parms=self.pwr_opts,
                    synchronous=self.synchronous)
Пример #12
0
 def execute(self, lpar_wrap):
     LOG.info(_LI('Powering on instance: %s'), self.instance.name)
     power.power_on(lpar_wrap,
                    self.host_uuid,
                    add_parms=self.pwr_opts,
                    synchronous=self.synchronous)
Пример #13
0
 def execute(self, lpar_wrap):
     LOG.info(_LI("Powering on instance: %s"), self.instance.name)
     power.power_on(lpar_wrap, self.host_uuid, add_parms=self.pwr_opts)
Пример #14
0
 def execute_impl(self, lpar_wrap):
     power.power_on(lpar_wrap, self.host_uuid, add_parms=self.pwr_opts,
                    synchronous=self.synchronous)