Exemple #1
0
    def test_instance_failure_flow_start_failed(self, _mock_novaclient):
        _mock_novaclient.return_value = self.fake_client

        # create test data
        server = self.fake_client.servers.create(self.instance_id,
                                                 host="fake-host",
                                                 ha_enabled=True)

        # test StopInstanceTask
        self._test_stop_instance()

        def fake_start_server(context, uuid):
            # assume that while starting instance goes into error state
            setattr(server, 'OS-EXT-STS:vm_state', "error")
            return server

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.novaclient)
        with mock.patch.object(self.novaclient, 'start_server',
                               fake_start_server):
            task.execute(self.ctxt, self.instance_id)

        # test ConfirmInstanceActiveTask
        task = instance_failure.ConfirmInstanceActiveTask(self.novaclient)
        self.assertRaises(
            exception.InstanceRecoveryFailureException, task.execute,
            self.ctxt, self.instance_id)
    def test_instance_failure_flow(self, _mock_notify, _mock_novaclient):
        _mock_novaclient.return_value = self.fake_client

        # create test data
        self.fake_client.servers.create(self.instance_id,
                                        host="fake-host",
                                        ha_enabled=True)

        # test StopInstanceTask
        self._test_stop_instance()

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient)
        task.execute(self.instance_id)

        # test ConfirmInstanceActiveTask
        self._test_confirm_instance_is_active()

        # verify progress details
        _mock_notify.assert_has_calls([
            mock.call('Stopping instance: ' + self.instance_id),
            mock.call("Stopped instance: '" + self.instance_id + "'", 1.0),
            mock.call("Starting instance: '" + self.instance_id + "'"),
            mock.call("Instance started: '" + self.instance_id + "'", 1.0),
            mock.call("Confirming instance '" + self.instance_id +
                      "' vm_state is ACTIVE"),
            mock.call(
                "Confirmed instance '" + self.instance_id +
                "' vm_state is ACTIVE", 1.0)
        ])
    def test_instance_failure_flow_not_ha_enabled_but_conf_option_is_set(
            self, _mock_notify, _mock_novaclient):
        # Setting this config option to True indicates masakari has to recover
        # the instance irrespective of whether it is HA_Enabled or not.
        self.override_config("process_all_instances", True, "instance_failure")
        _mock_novaclient.return_value = self.fake_client

        # create test data
        self.fake_client.servers.create(self.instance_id,
                                        host="fake-host",
                                        vm_state="resized")

        # test StopInstanceTask
        self._test_stop_instance()

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient)
        task.execute(self.instance_id)

        # test ConfirmInstanceActiveTask
        self._test_confirm_instance_is_active()

        # verify progress details
        _mock_notify.assert_has_calls([
            mock.call('Stopping instance: ' + self.instance_id),
            mock.call("Stopped instance: '" + self.instance_id + "'", 1.0),
            mock.call("Starting instance: '" + self.instance_id + "'"),
            mock.call("Instance started: '" + self.instance_id + "'", 1.0),
            mock.call("Confirming instance '" + self.instance_id +
                      "' vm_state is ACTIVE"),
            mock.call(
                "Confirmed instance '" + self.instance_id +
                "' vm_state is ACTIVE", 1.0)
        ])
Exemple #4
0
    def test_instance_failure_flow_resized_instance(self, _mock_novaclient):
        _mock_novaclient.return_value = self.fake_client

        # create test data
        self.fake_client.servers.create(self.instance_id,
                                        host="fake-host",
                                        ha_enabled=True, vm_state="resized")

        # test StopInstanceTask
        self._test_stop_instance()

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.novaclient)
        task.execute(self.ctxt, self.instance_id)

        # test ConfirmInstanceActiveTask
        self._test_confirm_instance_is_active()
Exemple #5
0
    def test_instance_failure_flow_not_ha_enabled_but_conf_option_is_set(
            self, _mock_novaclient):
        # Setting this config option to True indicates masakari has to recover
        # the instance irrespective of whether it is HA_Enabled or not.
        self.override_config("process_all_instances",
                             True, "instance_failure")
        _mock_novaclient.return_value = self.fake_client

        # create test data
        self.fake_client.servers.create(self.instance_id,
                                        host="fake-host", vm_state="resized")

        # test StopInstanceTask
        self._test_stop_instance()

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.novaclient)
        task.execute(self.ctxt, self.instance_id)

        # test ConfirmInstanceActiveTask
        self._test_confirm_instance_is_active()
    def test_instance_failure_flow_start_failed(self, _mock_notify,
                                                _mock_novaclient):
        _mock_novaclient.return_value = self.fake_client

        # create test data
        server = self.fake_client.servers.create(self.instance_id,
                                                 host="fake-host",
                                                 ha_enabled=True)

        # test StopInstanceTask
        self._test_stop_instance()

        def fake_start_server(context, uuid):
            # assume that while starting instance goes into error state
            setattr(server, 'OS-EXT-STS:vm_state', "error")
            return server

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient)
        with mock.patch.object(self.novaclient, 'start_server',
                               fake_start_server):
            task.execute(self.instance_id)

        # test ConfirmInstanceActiveTask
        task = instance_failure.ConfirmInstanceActiveTask(
            self.ctxt, self.novaclient)
        self.assertRaises(exception.InstanceRecoveryFailureException,
                          task.execute, self.instance_id)

        # verify progress details
        _mock_notify.assert_has_calls([
            mock.call('Stopping instance: ' + self.instance_id),
            mock.call("Stopped instance: '" + self.instance_id + "'", 1.0),
            mock.call("Starting instance: '" + self.instance_id + "'"),
            mock.call("Instance started: '" + self.instance_id + "'", 1.0),
            mock.call("Confirming instance '" + self.instance_id +
                      "' vm_state is ACTIVE"),
            mock.call('Failed to start instance 1', 1.0)
        ])
    def test_instance_failure_flow_custom_ha_key(self, _mock_notify,
                                                 _mock_novaclient):
        _mock_novaclient.return_value = self.fake_client

        ha_enabled_key = 'Ensure-My-HA'

        self.override_config('ha_enabled_instance_metadata_key',
                             ha_enabled_key, 'instance_failure')

        # create test data with custom ha_enabled_key
        self.fake_client.servers.create(self.instance_id,
                                        host="fake-host",
                                        ha_enabled=True,
                                        ha_enabled_key=ha_enabled_key)

        # test StopInstanceTask
        self._test_stop_instance()

        # test StartInstanceTask
        task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient)
        task.execute(self.instance_id)

        # test ConfirmInstanceActiveTask
        self._test_confirm_instance_is_active()

        # verify progress details
        _mock_notify.assert_has_calls([
            mock.call('Stopping instance: ' + self.instance_id),
            mock.call("Stopped instance: '" + self.instance_id + "'", 1.0),
            mock.call("Starting instance: '" + self.instance_id + "'"),
            mock.call("Instance started: '" + self.instance_id + "'", 1.0),
            mock.call("Confirming instance '" + self.instance_id +
                      "' vm_state is ACTIVE"),
            mock.call(
                "Confirmed instance '" + self.instance_id +
                "' vm_state is ACTIVE", 1.0)
        ])