ironic.drivers.modules.cimc.common

Source code for ironic.drivers.modules.cimc.common

# Copyright 2015, Cisco Systems.
#
# 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.

from contextlib import contextmanager

from oslo_utils import importutils

from ironic.common import exception
from ironic.common.i18n import _
from ironic.drivers.modules import deploy_utils

REQUIRED_PROPERTIES = {
    'cimc_address': _('IP or Hostname of the CIMC. Required.'),
    'cimc_username': _('CIMC Manager admin username. Required.'),
    'cimc_password': _('CIMC Manager password. Required.'),
}

COMMON_PROPERTIES = REQUIRED_PROPERTIES

imcsdk = importutils.try_import('ImcSdk')


[docs]def parse_driver_info(node): """Parses and creates Cisco driver info. :param node: An Ironic node object. :returns: dictionary that contains node.driver_info parameter/values. :raises: MissingParameterValue if any required parameters are missing. """ info = {} for param in REQUIRED_PROPERTIES: info[param] = node.driver_info.get(param) error_msg = (_("%s driver requires these parameters to be set in the " "node's driver_info.") % node.driver) deploy_utils.check_for_missing_params(info, error_msg) return info
[docs]def handle_login(task, handle, info): """Login to the CIMC handle. Run login on the CIMC handle, catching any ImcException and reraising it as an ironic CIMCException. :param handle: A CIMC handle. :param info: A list of driver info as produced by parse_driver_info. :raises: CIMCException if there error logging in. """ try: handle.login(info['cimc_address'], info['cimc_username'], info['cimc_password']) except imcsdk.ImcException as e: raise exception.CIMCException(node=task.node.uuid, error=e)
[docs]@contextmanager def cimc_handle(task): """Context manager for creating a CIMC handle and logging into it. :param task: The current task object. :raises: CIMCException if login fails :yields: A CIMC Handle for the node in the task. """ info = parse_driver_info(task.node) handle = imcsdk.ImcHandle() handle_login(task, handle, info) try: yield handle finally: handle.logout()
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.