# Copyright 2016 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

"""
Dummy interface implementations for use as defaults with optional interfaces.

Note that unlike fake implementatios, these do not pass validation and raise
exceptions for user-accessible actions.
"""

from ironic.common import exception
from ironic.drivers import base


def _fail(iface, task, *args, **kwargs):
    # TODO(dtanstur): support hardware types
    driver = task.node.driver
    raise exception.UnsupportedDriverExtension(
        driver=driver, extension=iface.interface_type)


class FailMixin(object):
    """Mixin to add to an interface to make it fail validation."""

    def get_properties(self):
        return {}

    validate = _fail


class NoConsole(FailMixin, base.ConsoleInterface):
    """Console interface implementation that raises errors on all requests."""
    stop_console = get_console = start_console = _fail


class NoRescue(FailMixin, base.RescueInterface):
    """Rescue interface implementation that raises errors on all requests."""
    rescue = unrescue = _fail


class NoVendor(FailMixin, base.VendorInterface):
    """Vendor interface implementation that raises errors on all requests."""

    def driver_validate(self, method, **kwargs):
        raise exception.UnsupportedDriverExtension(
            driver=type(self).__name__, extension=self.interface_type)


class NoInspect(FailMixin, base.InspectInterface):
    """Inspect interface implementation that raises errors on all requests."""
    inspect_hardware = _fail


class NoRAID(FailMixin, base.RAIDInterface):
    """RAID interface implementation that raises errors on all requests."""
    create_configuration = delete_configuration = _fail

    def validate_raid_config(self, task, raid_config):
        _fail(self, task)

# Copyright 2016 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

"""
Dummy interface implementations for use as defaults with optional interfaces.

Note that unlike fake implementatios, these do not pass validation and raise
exceptions for user-accessible actions.
"""

from ironic.common import exception
from ironic.drivers import base


def _fail(iface, task, *args, **kwargs):
    # TODO(dtanstur): support hardware types
    driver = task.node.driver
    raise exception.UnsupportedDriverExtension(
        driver=driver, extension=iface.interface_type)


class FailMixin(object):
    """Mixin to add to an interface to make it fail validation."""

    def get_properties(self):
        return {}

    validate = _fail


class NoConsole(FailMixin, base.ConsoleInterface):
    """Console interface implementation that raises errors on all requests."""
    stop_console = get_console = start_console = _fail


class NoRescue(FailMixin, base.RescueInterface):
    """Rescue interface implementation that raises errors on all requests."""
    rescue = unrescue = _fail


class NoVendor(FailMixin, base.VendorInterface):
    """Vendor interface implementation that raises errors on all requests."""

    def driver_validate(self, method, **kwargs):
        raise exception.UnsupportedDriverExtension(
            driver=type(self).__name__, extension=self.interface_type)


class NoInspect(FailMixin, base.InspectInterface):
    """Inspect interface implementation that raises errors on all requests."""
    inspect_hardware = _fail


class NoRAID(FailMixin, base.RAIDInterface):
    """RAID interface implementation that raises errors on all requests."""
    create_configuration = delete_configuration = _fail

    def validate_raid_config(self, task, raid_config):
        _fail(self, task)

# Copyright 2016 Red Hat, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # #      http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. Dummy interface implementations for use as defaults with optional interfaces.  Note that unlike fake implementatios, these do not pass validation and raise exceptions for user-accessible actions. # TODO(dtanstur): support hardware types Mixin to add to an interface to make it fail validation. Console interface implementation that raises errors on all requests. Rescue interface implementation that raises errors on all requests. Vendor interface implementation that raises errors on all requests. Inspect interface implementation that raises errors on all requests. RAID interface implementation that raises errors on all requests.