Example #1
0
 def c_trunk_map(self):
     """Returns the trunk groups for this switch in a map as a list of the following dictionary:
     {dswwn: {group_number: [[src_port_obj, dest_port_obj], [src_port_obj, dest_port_obj], ...]}}
     :return: List of dict as defined above
     :rtype: list
     """
     proj_obj = self.r_project_obj()
     ret = dict()
     for td in util.convert_to_list(
             self.r_get('brocade-fibrechannel-trunk/trunk')):
         ds_wwn = td.get('neighbor-wwn')
         if ds_wwn not in ret:
             ret.update({ds_wwn: dict()})
         g = ret.get(ds_wwn)
         group = td.get('group')
         if group not in g:
             g.update({group: list()})
         l = g.get(group)
         li = [
             self.r_port_object_for_index(td.get('source-port')),
             proj_obj.r_switch_obj(ds_wwn).r_port_object_for_index(
                 td.get('destination-port'))
         ]
         if len(l) == 0 or not td.get('master'):
             l.append(li)
         else:
             l.insert(0, li)
     return ret
Example #2
0
    def r_login_keys(self):
        """Returns all the login WWN associated with this port.

        :return: List of WWNs logged into this port
        :rtype: list
        """
        return util.convert_to_list(
            util.class_getvalue(self, 'fibrechannel/neighbor/wwn'))
Example #3
0
    def c_media_speed_capability(self):
        """Converts the media (SFP) speed capabilities to a CSV string

        :return: Media speeds
        :rtype: str
        """
        return ', '.join(
            util.convert_to_list(
                self.r_get('media-rdp/media-speed-capability/speed')))
Example #4
0
    def c_media_distance(self):
        """Converts the media (SFP) distance capabilities to a CSV string

        :return: Media distance
        :rtype: str
        """
        return ', '.join(
            util.convert_to_list(
                self.r_get('media-rdp/media-distance/distance')))
Example #5
0
    def s_base_logins(self, wwn_list):
        """Add a wwn or list of wwns to base login list

        :param wwn_list: A WWN or list of WWNs to add to the base login list. If wwn is None, the list is cleared.
        :type wwn_list: tuple, list, str, None
        """
        if wwn_list is None:
            self._base_logins.clear()
        else:
            self._base_logins.extend(util.convert_to_list(wwn_list))
Example #6
0
 def r_active_maps_policy(self):
     """Returns the active MAPS policy associated with this switch
     :return: Active MAPS. None if no active MAPS policy
     :rtype: dict, None
     """
     for obj in util.convert_to_list(
             self.r_get('brocade-maps/maps-policy')):
         if obj.get('is-active-policy'):
             return obj
     return None
Example #7
0
    def s_add_member(self, members):
        """Adds members to the alias

        :param members: Member
        :type members: str, list
        """
        self._members.extend([
            mem for mem in util.convert_to_list(members)
            if mem not in self._members
        ])
Example #8
0
    def s_add_pmember(self, members):
        """Adds principal members to the zone

        :param members: Member
        :type members: str, list
        """
        self._pmembers.extend([
            mem for mem in util.convert_to_list(members)
            if mem not in self._pmembers
        ])
Example #9
0
 def s_del_member(self, members):
     """Deletes members from the zone
     :param members: Member
     :type members: str, list
     """
     for mem in util.convert_to_list(members):
         for i, e in reversed(list(enumerate(self._members))):
             if e == mem:
                 self._members.pop(i)
                 break
Example #10
0
    def s_add_member(self, members):
        """Adds zone members to the zone configuration if the zone is not already a member of the zone configuration

        :param members: Member or members to add
        :type members: list, str
        """
        self._members.extend([
            mem for mem in util.convert_to_list(members)
            if mem not in self._members
        ])
Example #11
0
    def r_slot(self, s):
        """Returns the FRU information for a specific blade 'brocade-fru/blade')

        :return: The blade dictionary for a specific blade as returned from the API
        :rtype: dict
        """
        for b in util.convert_to_list(self.util.r_get('brocade-fru/blade')):
            if isinstance(b.get('slot_number'),
                          int) and b.get('slot_number') == s:
                return b
        return None
Example #12
0
    def s_del_alias(self, members):
        """Delete an alias or list of aliases

        :param members: Name or list of the aliases to be deleted
        :type members: None, str, list, tuple
        """
        for mem in [
                m for m in util.convert_to_list(members)
                if m in self._alias_objs
        ]:
            del self._alias_objs[mem]
Example #13
0
    def s_del_zone(self, members):
        """Deletes zones by name

        :param members: Zone name or list of zone names to be deleted
        :type members: None, str, list, tuple
        """
        for mem in [
                m for m in util.convert_to_list(members)
                if m in self._zone_objs
        ]:
            del self._zone_objs[mem]
Example #14
0
    def s_del_zonecfg(self, members):
        """Delete zone configurations

        :param members: Name or list of zone configurations to be deleted
        :type members: None, str, list, tuple
        """
        for mem in [
                m for m in util.convert_to_list(members)
                if m in self._zonecfg_objs
        ]:
            del self._zonecfg_objs[mem]
Example #15
0
    def s_add_eff_zone(self, name, zone_type, in_mem=None, in_pmem=None):
        """Adds a zone to the effective configuration if it doesn't already exist.
        Similarly, zone members will be added if they don't already exist
        **To Do** I think there is a bug in here. The effective zone should only change when the zone configuration is
        enabled in the fabric. This is moot for any application not using this database for real time updates.

        :param name: Zone name
        :type name: str
        :param zone_type: Zone type
        :type zone_type: int
        :param in_mem Zone members (this should be WWN)
        :type in_mem: str, list, tuple, None
        :param in_pmem: Principal zone members (this should be WWN). Only relavant to peer zones
        :type in_pmem: str, list, tuple, None
        :return: Zone configuration object for the effective zone configuration
        :rtype: brcddb.classes.zone.ZoneCfgObj
        """
        mem = list() if in_mem is None else util.convert_to_list(in_mem)
        pmem = list() if in_pmem is None else util.convert_to_list(in_pmem)
        zone_obj = self.r_eff_zone_obj(name)
        if zone_obj is None:
            zone_obj = zone_class.ZoneObj(name,
                                          zone_type, self.r_project_obj(),
                                          self.r_obj_key())
            self._eff_zone_objs.update({name: zone_obj})
        zone_obj.s_or_flags(brcddb_common.zone_flag_effective)
        for member in mem:
            zone_obj.s_add_member(member)
            if ',' in member:
                zone_obj.s_or_flags(brcddb_common.zone_flag_di)
            else:
                zone_obj.s_or_flags(brcddb_common.zone_flag_wwn)
        for member in pmem:
            zone_obj.s_add_pmember(member)
            if ',' in member:
                zone_obj.s_or_flags(brcddb_common.zone_flag_di)
            else:
                zone_obj.s_or_flags(brcddb_common.zone_flag_wwn)
        return zone_obj
Example #16
0
    def s_add_alias(self, name, in_mem=None):
        """Adds an alias to the fabric if it doesn't already exist.
        Similarly, alias members will be added if they don't already exist
        Typically, and best practice, there is one WWN member per alias. Multiples are allowed. I've seen it done on
        occasion but don't recommend it. I've never seen it done, but d,i members are allowed

        :param name: Alias name
        :type name: str
        :param in_mem: Alias members
        :type in_mem: str, list, tuple, None
        :return: Zone configuration object for the effective zone configuration
        :rtype: brcddb.classes.zone.ZoneCfgObj
        """
        mem = list() if in_mem is None else util.convert_to_list(in_mem)
        if name in self._alias_objs:
            alias_obj = self._alias_objs[name]
        else:
            alias_obj = zone_class.AliasObj(name, self.r_project_obj(),
                                            self.r_obj_key())
            self._alias_objs.update({name: alias_obj})
        # No one should try to add the same member twice, but just in case
        alias_obj.s_add_member(
            [wwn for wwn in mem if wwn not in alias_obj.r_members()])
        return alias_obj