Ejemplo n.º 1
0
 def __do_node_clean_validate_fail(self, mock_validate, clean_steps=None):
     # InvalidParameterValue should cause node to go to CLEANFAIL
     mock_validate.side_effect = exception.InvalidParameterValue('error')
     tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
     node = obj_utils.create_test_node(
         self.context,
         driver='fake-hardware',
         provision_state=states.CLEANING,
         target_provision_state=tgt_prov_state)
     with task_manager.acquire(self.context, node.uuid,
                               shared=False) as task:
         cleaning.do_node_clean(task, clean_steps=clean_steps)
     node.refresh()
     self.assertEqual(states.CLEANFAIL, node.provision_state)
     self.assertEqual(tgt_prov_state, node.target_provision_state)
     mock_validate.assert_called_once_with(mock.ANY, mock.ANY)
Ejemplo n.º 2
0
 def __do_node_clean_prepare_clean_wait(self,
                                        mock_prep,
                                        mock_validate,
                                        clean_steps=None):
     mock_prep.return_value = states.CLEANWAIT
     tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
     node = obj_utils.create_test_node(
         self.context,
         driver='fake-hardware',
         provision_state=states.CLEANING,
         target_provision_state=tgt_prov_state)
     with task_manager.acquire(self.context, node.uuid,
                               shared=False) as task:
         cleaning.do_node_clean(task, clean_steps=clean_steps)
     node.refresh()
     self.assertEqual(states.CLEANWAIT, node.provision_state)
     self.assertEqual(tgt_prov_state, node.target_provision_state)
     mock_prep.assert_called_once_with(mock.ANY, mock.ANY)
     mock_validate.assert_called_once_with(mock.ANY, mock.ANY)
Ejemplo n.º 3
0
    def test__do_node_clean_automated_enabled_individual_none(
            self, mock_validate, mock_network):
        self.config(automated_clean=True, group='conductor')

        node = obj_utils.create_test_node(
            self.context,
            driver='fake-hardware',
            provision_state=states.CLEANING,
            target_provision_state=states.AVAILABLE,
            last_error=None,
            automated_clean=None)
        with task_manager.acquire(self.context, node.uuid,
                                  shared=False) as task:
            cleaning.do_node_clean(task)
        node.refresh()

        # Assert that the node was cleaned
        self.assertTrue(mock_validate.called)
        self.assertIn('clean_steps', node.driver_internal_info)
Ejemplo n.º 4
0
    def test__do_node_clean_automated_disabled(self, mock_validate):
        self.config(automated_clean=False, group='conductor')

        node = obj_utils.create_test_node(
            self.context,
            driver='fake-hardware',
            provision_state=states.CLEANING,
            target_provision_state=states.AVAILABLE,
            last_error=None)
        with task_manager.acquire(self.context, node.uuid,
                                  shared=False) as task:
            cleaning.do_node_clean(task)
        node.refresh()

        # Assert that the node was moved to available without cleaning
        self.assertFalse(mock_validate.called)
        self.assertEqual(states.AVAILABLE, node.provision_state)
        self.assertEqual(states.NOSTATE, node.target_provision_state)
        self.assertEqual({}, node.clean_step)
        self.assertNotIn('clean_steps', node.driver_internal_info)
        self.assertNotIn('clean_step_index', node.driver_internal_info)
Ejemplo n.º 5
0
    def __do_node_clean(self,
                        mock_power_valid,
                        mock_network_valid,
                        mock_next_step,
                        mock_steps,
                        clean_steps=None):
        if clean_steps:
            tgt_prov_state = states.MANAGEABLE
            driver_info = {}
        else:
            tgt_prov_state = states.AVAILABLE
            driver_info = {'clean_steps': self.clean_steps}

        node = obj_utils.create_test_node(
            self.context,
            driver='fake-hardware',
            provision_state=states.CLEANING,
            target_provision_state=tgt_prov_state,
            last_error=None,
            power_state=states.POWER_OFF,
            driver_internal_info=driver_info)

        with task_manager.acquire(self.context, node.uuid,
                                  shared=False) as task:
            cleaning.do_node_clean(task, clean_steps=clean_steps)

            node.refresh()

            mock_power_valid.assert_called_once_with(mock.ANY, task)
            mock_network_valid.assert_called_once_with(mock.ANY, task)
            mock_next_step.assert_called_once_with(task, 0)
            mock_steps.assert_called_once_with(task)
            if clean_steps:
                self.assertEqual(clean_steps,
                                 node.driver_internal_info['clean_steps'])

        # Check that state didn't change
        self.assertEqual(states.CLEANING, node.provision_state)
        self.assertEqual(tgt_prov_state, node.target_provision_state)
Ejemplo n.º 6
0
 def test__do_node_clean_maintenance(self, mock_prep, mock_tear_down):
     CONF.set_override('allow_provisioning_in_maintenance',
                       False,
                       group='conductor')
     node = obj_utils.create_test_node(
         self.context,
         driver='fake-hardware',
         provision_state=states.CLEANING,
         target_provision_state=states.AVAILABLE,
         maintenance=True,
         maintenance_reason='Original reason')
     with task_manager.acquire(self.context, node.uuid,
                               shared=False) as task:
         cleaning.do_node_clean(task)
         node.refresh()
         self.assertEqual(states.CLEANFAIL, node.provision_state)
         self.assertEqual(states.AVAILABLE, node.target_provision_state)
         self.assertIn('is not allowed', node.last_error)
         self.assertTrue(node.maintenance)
         self.assertEqual('Original reason', node.maintenance_reason)
     self.assertFalse(mock_prep.called)
     self.assertFalse(mock_tear_down.called)
Ejemplo n.º 7
0
 def _test__do_node_clean_cache_bios(self,
                                     mock_bios,
                                     mock_validate,
                                     mock_prep,
                                     mock_next_step,
                                     mock_steps,
                                     mock_log,
                                     clean_steps=None,
                                     enable_unsupported=False,
                                     enable_exception=False):
     if enable_unsupported:
         mock_bios.side_effect = exception.UnsupportedDriverExtension('')
     elif enable_exception:
         mock_bios.side_effect = exception.IronicException('test')
     mock_prep.return_value = states.NOSTATE
     tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
     node = obj_utils.create_test_node(
         self.context,
         driver='fake-hardware',
         provision_state=states.CLEANING,
         target_provision_state=tgt_prov_state)
     with task_manager.acquire(self.context, node.uuid,
                               shared=False) as task:
         cleaning.do_node_clean(task, clean_steps=clean_steps)
         node.refresh()
         mock_bios.assert_called_once_with(mock.ANY, task)
         if clean_steps:
             self.assertEqual(states.CLEANING, node.provision_state)
             self.assertEqual(tgt_prov_state, node.target_provision_state)
         else:
             self.assertEqual(states.CLEANING, node.provision_state)
             self.assertEqual(states.AVAILABLE, node.target_provision_state)
         mock_validate.assert_called_once_with(mock.ANY, task)
         if enable_exception:
             mock_log.exception.assert_called_once_with(
                 'Caching of bios settings failed on node {}. '
                 'Continuing with node cleaning.'.format(node.uuid))
Ejemplo n.º 8
0
 def __do_node_clean_steps_fail(self,
                                mock_steps,
                                mock_validate,
                                clean_steps=None,
                                invalid_exc=True):
     if invalid_exc:
         mock_steps.side_effect = exception.InvalidParameterValue('invalid')
     else:
         mock_steps.side_effect = exception.NodeCleaningFailure('failure')
     tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE
     node = obj_utils.create_test_node(
         self.context,
         driver='fake-hardware',
         uuid=uuidutils.generate_uuid(),
         provision_state=states.CLEANING,
         target_provision_state=tgt_prov_state)
     with task_manager.acquire(self.context, node.uuid,
                               shared=False) as task:
         cleaning.do_node_clean(task, clean_steps=clean_steps)
         mock_validate.assert_called_once_with(mock.ANY, task)
     node.refresh()
     self.assertEqual(states.CLEANFAIL, node.provision_state)
     self.assertEqual(tgt_prov_state, node.target_provision_state)
     mock_steps.assert_called_once_with(mock.ANY)