Ejemplo n.º 1
0
    def delete_connection(self, initiator_target_map):
        """Delete connection.

        Updates/deletes connection control for the given initiator target map.
        initiator_target_map - each initiator WWN mapped to a list of one
        or more target WWN:
        eg:
        {
            '10008c7cff523b01': ['20240002ac000a50', '20240002ac000a40']
        }
        """
        connected_fabric = None
        try:
            for initiator in initiator_target_map.keys():
                target_list = initiator_target_map[initiator]
                LOG.info(_("Delete connection Target List:%s"),
                         {initiator: target_list})

                # get SAN context for the target list
                fabric_map = self.get_san_context(target_list)
                LOG.debug(
                    _("Delete connection Fabric Map from SAN "
                      "context: %s"), fabric_map)

                # iterate over each SAN and apply connection control
                for fabric in fabric_map.keys():
                    connected_fabric = fabric
                    t_list = fabric_map[fabric]
                    # get valid I-T map to add connection control
                    i_t_map = {initiator: t_list}
                    valid_i_t_map = self.get_valid_initiator_target_map(
                        i_t_map, False)
                    LOG.info(
                        _("Final filtered map for delete "
                          "connection: %s"), valid_i_t_map)

                    # Call driver to delete connection control
                    if len(valid_i_t_map) > 0:
                        self.driver.delete_connection(fabric, valid_i_t_map)

            LOG.debug(
                _("Delete Connection - Finished iterating over all"
                  " target list"))
        except Exception as e:
            msg = _("Failed removing connection for fabric=%(fabric)s: "
                    "Error:%(err)s") % {
                        'fabric': connected_fabric,
                        'err': str(e)
                    }
            LOG.error(msg)
            raise exception.ZoneManagerException(reason=msg)
    def add_connection(self, initiator_target_map):
        """Add connection control.

        Adds connection control for the given initiator target map.
        initiator_target_map - each initiator WWN mapped to a list of one
        or more target WWN:
        eg:
        {
            '10008c7cff523b01': ['20240002ac000a50', '20240002ac000a40']
        }
        """
        connected_fabric = None
        try:
            for initiator in initiator_target_map.keys():
                target_list = initiator_target_map[initiator]
                LOG.debug("Target List: %s", target_list)

                # get SAN context for the target list
                fabric_map = self.get_san_context(target_list)
                LOG.debug("Fabric Map after context lookup: %s", fabric_map)
                # iterate over each SAN and apply connection control
                for fabric in fabric_map.keys():
                    connected_fabric = fabric
                    t_list = fabric_map[fabric]
                    # get valid I-T map to add connection control
                    i_t_map = {initiator: t_list}
                    valid_i_t_map = self.get_valid_initiator_target_map(
                        i_t_map, True)
                    LOG.info(_LI("Final filtered map for fabric: %s"),
                             valid_i_t_map)

                    # Call driver to add connection control
                    self.driver.add_connection(fabric, valid_i_t_map)

            LOG.info(
                _LI("Add Connection: Finished iterating "
                    "over all target list"))
        except Exception as e:
            msg = _("Failed adding connection for fabric=%(fabric)s: "
                    "Error: %(err)s") % {
                        'fabric': connected_fabric,
                        'err': six.text_type(e)
                    }
            LOG.error(msg)
            raise exception.ZoneManagerException(reason=msg)
Ejemplo n.º 3
0
    def delete_connection(self, conn_info):
        """Delete connection.

        Updates/deletes connection control for the given initiator target map.
        initiator_target_map - each initiator WWN mapped to a list of one
        or more target WWN:

        .. code-block:: python

            e.g.:
            {
                '10008c7cff523b01': ['20240002ac000a50', '20240002ac000a40']
            }
        """
        connected_fabric = None
        host_name = None
        storage_system = None

        try:
            initiator_target_map = (
                conn_info[zone_constant.DATA][zone_constant.IT_MAP])

            if zone_constant.HOST in conn_info[zone_constant.DATA]:
                host_name = conn_info[zone_constant.DATA][zone_constant.HOST]

            if zone_constant.STORAGE in conn_info[zone_constant.DATA]:
                storage_system = (conn_info[zone_constant.DATA][
                    zone_constant.STORAGE].replace(" ", "_"))

            for initiator in initiator_target_map.keys():
                target_list = initiator_target_map[initiator]
                LOG.info(_LI("Delete connection target list: %(targets)s"),
                         {'targets': target_list})

                # get SAN context for the target list
                fabric_map = self.get_san_context(target_list)
                LOG.debug(
                    "Delete connection fabric map from SAN "
                    "context: %(fabricmap)s", {'fabricmap': fabric_map})

                # iterate over each SAN and apply connection control
                for fabric in fabric_map.keys():
                    connected_fabric = fabric
                    t_list = fabric_map[fabric]
                    # get valid I-T map to add connection control
                    i_t_map = {initiator: t_list}
                    valid_i_t_map = self.get_valid_initiator_target_map(
                        i_t_map, False)
                    LOG.info(
                        _LI("Final filtered map for delete connection: "
                            "%(i_t_map)s"), {'i_t_map': valid_i_t_map})

                    # Call driver to delete connection control
                    if len(valid_i_t_map) > 0:
                        self.driver.delete_connection(fabric, valid_i_t_map,
                                                      host_name,
                                                      storage_system)

            LOG.debug("Delete connection - finished iterating over all"
                      " target list")
        except Exception as e:
            msg = _("Failed removing connection for fabric=%(fabric)s: "
                    "Error: %(err)s") % {
                        'fabric': connected_fabric,
                        'err': six.text_type(e)
                    }
            LOG.error(msg)
            raise exception.ZoneManagerException(reason=msg)
Ejemplo n.º 4
0
    def add_connection(self, conn_info):
        """Add connection control.

        Adds connection control for the given initiator target map.
        initiator_target_map - each initiator WWN mapped to a list of one
        or more target WWN:

        .. code-block:: python

            e.g.:
            {
                '10008c7cff523b01': ['20240002ac000a50', '20240002ac000a40']
            }
        """
        connected_fabric = None
        host_name = None
        storage_system = None

        try:
            # Make sure the driver is loaded and we are initialized
            self._log_unsupported_driver_warning()
            self._require_initialized()
        except exception.ZoneManagerNotInitialized:
            LOG.error("Cannot add Fibre Channel Zone because the "
                      "Zone Manager is not initialized properly.",
                      resource={'type': 'zone_manager',
                                'id': self.__class__.__name__})
            return

        try:
            initiator_target_map = (
                conn_info[zone_constant.DATA][zone_constant.IT_MAP])

            if zone_constant.HOST in conn_info[zone_constant.DATA]:
                host_name = conn_info[
                    zone_constant.DATA][
                    zone_constant.HOST].replace(" ", "_")

            if zone_constant.STORAGE in conn_info[zone_constant.DATA]:
                storage_system = (
                    conn_info[
                        zone_constant.DATA][
                        zone_constant.STORAGE].replace(" ", "_"))

            for initiator in initiator_target_map.keys():
                target_list = initiator_target_map[initiator]
                LOG.debug("Target list : %(targets)s",
                          {'targets': target_list})

                # get SAN context for the target list
                fabric_map = self.get_san_context(target_list)
                LOG.debug("Fabric map after context lookup: %(fabricmap)s",
                          {'fabricmap': fabric_map})
                # iterate over each SAN and apply connection control
                for fabric in fabric_map.keys():
                    connected_fabric = fabric
                    t_list = fabric_map[fabric]
                    # get valid I-T map to add connection control
                    i_t_map = {initiator: t_list}
                    valid_i_t_map = self.get_valid_initiator_target_map(
                        i_t_map, True)
                    LOG.info("Final filtered map for fabric: %(i_t_map)s",
                             {'i_t_map': valid_i_t_map})

                    # Call driver to add connection control
                    self.driver.add_connection(fabric, valid_i_t_map,
                                               host_name, storage_system)

            LOG.info("Add connection: finished iterating "
                     "over all target list")
        except Exception as e:
            msg = _("Failed adding connection for fabric=%(fabric)s: "
                    "Error: %(err)s") % {'fabric': connected_fabric,
                                         'err': six.text_type(e)}
            LOG.error(msg)
            raise exception.ZoneManagerException(reason=msg)
Ejemplo n.º 5
0
    def add_connection(self, conn_info):
        """Add connection control.

        Adds connection control for the given initiator target map.
        initiator_target_map - each initiator WWN mapped to a list of one
        or more target WWN:
        eg:
        {
            '10008c7cff523b01': ['20240002ac000a50', '20240002ac000a40']
        }
        """
        connected_fabric = None
        host_name = None
        storage_system = None

        try:
            initiator_target_map = (
                conn_info[zone_constant.DATA][zone_constant.IT_MAP])

            if zone_constant.HOST in conn_info[zone_constant.DATA]:
                host_name = conn_info[
                    zone_constant.DATA][
                    zone_constant.HOST].replace(" ", "_")

            if zone_constant.STORAGE in conn_info[zone_constant.DATA]:
                storage_system = (
                    conn_info[
                        zone_constant.DATA][
                        zone_constant.STORAGE].replace(" ", "_"))

            for initiator in initiator_target_map.keys():
                target_list = initiator_target_map[initiator]
                LOG.debug("Target list : %(targets)s",
                          {'targets': target_list})

                # get SAN context for the target list
                fabric_map = self.get_san_context(target_list)
                LOG.debug("Fabric map after context lookup: %(fabricmap)s",
                          {'fabricmap': fabric_map})
                # iterate over each SAN and apply connection control
                for fabric in fabric_map.keys():
                    connected_fabric = fabric
                    t_list = fabric_map[fabric]
                    # get valid I-T map to add connection control
                    i_t_map = {initiator: t_list}
                    valid_i_t_map = self.get_valid_initiator_target_map(
                        i_t_map, True)
                    LOG.info(_LI("Final filtered map for fabric: %(i_t_map)s"),
                             {'i_t_map': valid_i_t_map})

                    # Call driver to add connection control
                    self.driver.add_connection(fabric, valid_i_t_map,
                                               host_name, storage_system)

            LOG.info(_LI("Add connection: finished iterating "
                         "over all target list"))
        except Exception as e:
            msg = _("Failed adding connection for fabric=%(fabric)s: "
                    "Error: %(err)s") % {'fabric': connected_fabric,
                                         'err': six.text_type(e)}
            LOG.error(msg)
            raise exception.ZoneManagerException(reason=msg)