Source code for networkapi.plugins.Brocade.util

# -*- coding: utf-8 -*-
import logging
from functools import wraps

from networkapi.plugins import exceptions as base_exceptions
from networkapi.plugins.Brocade import lb
from networkapi.plugins.Brocade.adx_device_driver_impl import BrocadeAdxDeviceDriverImpl
from networkapi.util import is_healthcheck_valid

log = logging.getLogger(__name__)


########################################
# Decorators
########################################
[docs]def logger(func): @wraps(func) def inner(self, *args, **kwargs): log.info('%s.%s: %s,%s' % (self.__class__.__name__, func.__name__, args, kwargs)) return func(self, *args, **kwargs) return inner
[docs]def connection(func): @wraps(func) def inner(self, *args, **kwargs): log.debug('decorator') try: access = args[0].get('access').filter( tipo_acesso__protocolo='ssh').uniqueResult() self._lb = lb.Lb(access.fqdn, access.user, access.password) self.baddi = BrocadeAdxDeviceDriverImpl( service_clients=self._lb.service_clients) return func(self, *args, **kwargs) except Exception, e: log.error(e) raise base_exceptions.CommandErrorException(e) else: log.info('writing in mem') self.baddi.write_mem() return inner
[docs]def get_status_name(status): try: return STATUS_POOL_MEMBER[status] except Exception: msg = 'Member status invalid: %s' % (status) log.error(msg) raise base_exceptions.NamePropertyInvalid(msg)
[docs]def get_method_name(lb_method): try: return LB_METHOD[lb_method] except Exception: msg = 'Member lb_method invalid: %s' % (lb_method) log.error(msg) raise base_exceptions.NamePropertyInvalid(msg)
[docs]def get_service_down_action_name(action): try: return SERVICE_DOWN_ACTION[action] except Exception: msg = '"%s" is not a valid value for Service Down Action' % (action) log.error(msg) raise base_exceptions.NamePropertyInvalid(msg)
[docs]def trata_nome(name): name_spt = name.split('_') del name_spt[-1] return '_'.join(name_spt)
[docs]def trata_param_pool(pools): pls = { 'pools_names': [], 'pools_lbmethod': [], 'pools_healthcheck': [], 'pools_actions': [], 'pools_members': { 'members_new': [], 'members_remove': [], 'members': [], 'monitor': [], 'session': [], 'priority': [], 'weight': [], 'limit': [] } } for p in pools['pools']: pls['pools_names'].append(p['nome']) if p.get('lb_method'): pls['pools_lbmethod'].append( get_method_name(p['lb_method'])) if p.get('healthcheck'): is_healthcheck_valid(p['healthcheck']) pls['pools_healthcheck'].append(p['healthcheck']) if p.get('action'): pls['pools_actions'].append( get_service_down_action_name(p['action'])) member_status_monitor = [] member_status_session = [] member_limit = [] member_priority = [] member_weight = [] member = [] member_new = [] member_remove = [] for pool_member in p['pools_members']: if pool_member.get('member_status'): status = get_status_name( str(pool_member['member_status'])) member_status_monitor.append(status['monitor']) if pool_member.get('limit'): member_limit.append(pool_member['limit']) if pool_member.get('priority'): member_priority.append(pool_member['priority']) if pool_member.get('weight'): member_weight.append(pool_member['weight']) if not pool_member.get('remove'): member.append({ 'address': pool_member['ip'], 'protocol_port': pool_member['port']}) if pool_member.get('new'): member_new.append({ 'address': pool_member['ip'], 'protocol_port': pool_member['port']}) if pool_member.get('remove'): member_remove.append({ 'address': pool_member['ip'], 'protocol_port': pool_member['port']}) pls['pools_members']['monitor'].append(member_status_monitor) pls['pools_members']['session'].append(member_status_session) pls['pools_members']['limit'].append(member_limit) pls['pools_members']['priority'].append(member_priority) pls['pools_members']['weight'].append(member_weight) pls['pools_members']['members'].append(member) pls['pools_members']['members_new'].append(member_new) pls['pools_members']['members_remove'].append(member_remove) return pls
[docs]def trata_param_vip(vips): vips_filter = list() pool_filter = list() pool_filter_created = list() for vip in vips['vips']: vip_request = vip.get('vip_request') vip_filter = dict() ports = vip_request.get('ports') for port in ports: address = vip_request['ipv4']['ip_formated'] if vip_request[ 'ipv4'] else vip_request['ipv6']['ip_formated'] vip_filter['pool'] = list() vip_filter['name'] = '%s_%s' % (vip_request['name'], port['port']) vip_filter['address'] = address vip_filter['port'] = port['port'] vip_filter['optionsvip'] = vip_request['options'] vip_filter['optionsvip']['l7_protocol'] = port[ 'options']['l7_protocol'] vip_filter['optionsvip']['l4_protocol'] = port[ 'options']['l4_protocol'] conf = vip_request['conf']['conf'] vip_filter['optionsvip_extended'] = conf['optionsvip_extended'] pools = port.get('pools') for pool in pools: if not pool.get('l7_rule') in ['', 'default']: raise NotImplementedError('l7_rule missing') server_pool = pool.get('server_pool') if not server_pool.get('pool_created'): pool_filter.append(server_pool) else: pool_filter_created.append(server_pool) vip_filter['pool'].append(server_pool['nome']) vips_filter.append(vip_filter) res_fil = { 'vips_filter': vips_filter, 'pool_filter': pool_filter, 'pool_filter_created': pool_filter_created } return res_fil
[docs]def search_dict(mylist, lookup): for val in mylist: if lookup == val: return True return False
####################### # PROPERTIES DICT ####################### ######## # POOL ######## SERVICE_DOWN_ACTION = { 'reset': 'SERVICE_DOWN_ACTION_RESET', 'drop': 'SERVICE_DOWN_ACTION_DROP', 'reselect': 'SERVICE_DOWN_ACTION_RESELECT', 'none': 'SERVICE_DOWN_ACTION_NONE' } ############### # POOL MEMBER ############### STATUS_POOL_MEMBER = { '0': { 'monitor': 'DISABLED', 'session': '', 'healthcheck': '' }, '1': { 'monitor': 'ENABLED', 'session': '', 'healthcheck': '' }, '2': { 'monitor': 'DISABLED', 'session': '', 'healthcheck': '' }, '3': { 'monitor': 'ENABLED', 'session': '', 'healthcheck': '' }, '4': { 'monitor': 'DISABLED', 'session': '', 'healthcheck': '' }, '5': { 'monitor': 'ENABLED', 'session': '', 'healthcheck': '' }, '6': { 'monitor': 'DISABLED', 'session': '', 'healthcheck': '' }, '7': { 'monitor': 'ENABLED', 'session': '', 'healthcheck': '' } } LB_METHOD = { 'least-conn': 'LEAST_CONN', 'round-robin': 'ROUND_ROBIN', 'weighted': 'WEIGHTED', # '': 'LB_METHOD_LEAST_CONNECTION_MEMBER', # '': 'LB_METHOD_OBSERVED_MEMBER', # '': 'LB_METHOD_PREDICTIVE_MEMBER', # '': 'LB_METHOD_RATIO_NODE_ADDRESS', # '': 'LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS', # '': 'LB_METHOD_FASTEST_NODE_ADDRESS', # '': 'LB_METHOD_OBSERVED_NODE_ADDRESS', # '': 'LB_METHOD_PREDICTIVE_NODE_ADDRESS', # '': 'LB_METHOD_DYNAMIC_RATIO', # '': 'LB_METHOD_FASTEST_APP_RESPONSE', # '': 'LB_METHOD_LEAST_SESSIONS', # '': 'LB_METHOD_DYNAMIC_RATIO_MEMBER', # '': 'LB_METHOD_L3_ADDR', # '': 'LB_METHOD_UNKNOWN', # '': 'LB_METHOD_WEIGHTED_LEAST_CONNECTION_MEMBER', # '': 'LB_METHOD_WEIGHTED_LEAST_CONNECTION_NODE_ADDRESS', # '': 'LB_METHOD_RATIO_SESSION', # '': 'LB_METHOD_RATIO_LEAST_CONNECTION_MEMBER', # '': 'LB_METHOD_RATIO_LEAST_CONNECTION_NODE_ADDRESS' }