def update_zones(self, zones, activate, fabric_vsan, operation, active_zone_set, zone_status): """Update the zone configuration. This method will update the zone configuration passed by user. :param zones: zone names mapped to members. Zone members are colon separated but case-insensitive .. code-block:: python { zonename1:[zonememeber1, zonemember2,...], zonename2:[zonemember1, zonemember2,...]...} e.g: { 'openstack50060b0000c26604201900051ee8e329': ['50:06:0b:00:00:c2:66:04', '20:19:00:05:1e:e8:e3:29'] } :param activate: True will activate the zone config. :param operation: zone add or zone remove :param fabric_vsan: Virtual San # :param active_zone_set: Active zone set dict retrieved from get_active_zone_set method :param zone_status: Status of the zone :raises: CiscoZoningCliException """ LOG.debug("Update Zones - Operation: %(op)s - Zones " "passed: %(zones)s", {'op': operation, 'zones': zones}) cfg_name = active_zone_set[ZoneConstant.ACTIVE_ZONE_CONFIG] zone_cmds = [['conf'], ['zoneset', 'name', cfg_name, 'vsan', fabric_vsan]] zone_mod_cmd = [] if operation == ZoneConstant.ZONE_ADD: zone_mod_cmd = ['member', 'pwwn'] elif operation == ZoneConstant.ZONE_REMOVE: zone_mod_cmd = ['no', 'member', 'pwwn'] for zone, zone_members in zones.items(): zone_cmds.append(['zone', 'name', zone]) for member in zone_members: zone_cmds.append(zone_mod_cmd + [member]) zone_cmds.append(['end']) try: LOG.debug("Update zones: Config cmd to run: %s", zone_cmds) self._ssh_execute(zone_cmds, True, 1) if activate: self.activate_zoneset(cfg_name, fabric_vsan, zone_status) self._cfg_save() except Exception as e: msg = (_("Updating and activating zone set failed: " "(Zone set=%(zoneset)s error=%(err)s).") % {'zoneset': cfg_name, 'err': six.text_type(e)}) LOG.error(msg) raise exception.CiscoZoningCliException(reason=msg)
def add_zones(self, zones, activate, fabric_vsan, active_zone_set, zone_status): """Add zone configuration. This method will add the zone configuration passed by user. input params: zones - zone names mapped to members and VSANs. zone members are colon separated but case-insensitive { zonename1:[zonememeber1,zonemember2,...], zonename2:[zonemember1, zonemember2,...]...} e.g: {'openstack50060b0000c26604201900051ee8e329': ['50:06:0b:00:00:c2:66:04', '20:19:00:05:1e:e8:e3:29'] } activate - True/False """ LOG.debug("Add Zones - Zones passed: %s", zones) LOG.debug("Active zone set: %s", active_zone_set) zone_list = active_zone_set[ZoneConstant.CFG_ZONES] LOG.debug("zone list: %s", zone_list) LOG.debug("zone status: %s", zone_status) cfg_name = active_zone_set[ZoneConstant.ACTIVE_ZONE_CONFIG] zone_cmds = [['conf'], ['zoneset', 'name', cfg_name, 'vsan', fabric_vsan]] for zone in zones.keys(): # if zone exists, its an update. Delete & insert LOG.debug("Update call") if zone in zone_list: # Response from get_active_zone_set strips colons from WWPNs current_zone = set(zone_list[zone]) new_wwpns = map(lambda x: x.lower().replace(':', ''), zones[zone]) new_zone = set(new_wwpns) if current_zone != new_zone: try: self.delete_zones(zone, activate, fabric_vsan, active_zone_set, zone_status) except exception.CiscoZoningCliException: with excutils.save_and_reraise_exception(): LOG.error(_LE("Deleting zone failed %s"), zone) LOG.debug("Deleted Zone before insert : %s", zone) zone_cmds.append(['zone', 'name', zone]) for member in zones[zone]: zone_cmds.append(['member', 'pwwn', member]) zone_cmds.append(['end']) try: LOG.debug("Add zones: Config cmd to run: %s", zone_cmds) self._ssh_execute(zone_cmds, True, 1) if activate: self.activate_zoneset(cfg_name, fabric_vsan, zone_status) self._cfg_save() except Exception as e: msg = _("Creating and activating zone set failed: " "(Zone set=%(zoneset)s error=%(err)s).") % { 'zoneset': cfg_name, 'err': six.text_type(e) } LOG.error(msg) raise exception.CiscoZoningCliException(reason=msg)
def add_zones(self, zones, activate, fabric_vsan, active_zone_set, zone_status): """Add zone configuration. This method will add the zone configuration passed by user. :param zones: Zone names mapped to members and VSANs Zone members are colon separated but case-insensitive .. code-block:: python { zonename1:[zonememeber1,zonemember2,...], zonename2:[zonemember1, zonemember2,...]...} e.g: { 'openstack50060b0000c26604201900051ee8e329': ['50:06:0b:00:00:c2:66:04', '20:19:00:05:1e:e8:e3:29'] } :param activate: True will activate the zone config. :param fabric_vsan: :param active_zone_set: Active zone set dict retrieved from get_active_zone_set method :param zone_status: Status of the zone :raises: CiscoZoningCliException """ LOG.debug("Add Zones - Zones passed: %s", zones) LOG.debug("Active zone set: %s", active_zone_set) zone_list = active_zone_set[ZoneConstant.CFG_ZONES] LOG.debug("zone list: %s", zone_list) LOG.debug("zone status: %s", zone_status) cfg_name = active_zone_set[ZoneConstant.ACTIVE_ZONE_CONFIG] zone_cmds = [['conf'], ['zoneset', 'name', cfg_name, 'vsan', fabric_vsan]] for zone in zones.keys(): zone_cmds.append(['zone', 'name', zone]) for member in zones[zone]: zone_cmds.append(['member', 'pwwn', member]) zone_cmds.append(['end']) try: LOG.debug("Add zones: Config cmd to run: %s", zone_cmds) self._ssh_execute(zone_cmds, True, 1) if activate: self.activate_zoneset(cfg_name, fabric_vsan, zone_status) self._cfg_save() except Exception as e: msg = _("Creating and activating zone set failed: " "(Zone set=%(zoneset)s error=%(err)s)." ) % {'zoneset': cfg_name, 'err': six.text_type(e)} LOG.error(msg) raise exception.CiscoZoningCliException(reason=msg)