Esempio n. 1
0
def ambiente_borda(user, rack, environment_list):

    ranges = dict()
    ranges['MAX'] = None
    ranges['MIN'] = None
    ranges_vlans = dict()

    try:
        ranges_vlans['BORDA_DSR_VLAN_MIN'] = int(
            get_variable('borda_dsr_vlan_min'))
        ranges_vlans['BORDA_DSR_VLAN_MAX'] = int(
            get_variable('borda_dsr_vlan_max'))
        ranges_vlans['BORDA_DMZ_VLAN_MIN'] = int(
            get_variable('borda_dmz_vlan_min'))
        ranges_vlans['BORDA_DMZ_VLAN_MAX'] = int(
            get_variable('borda_dmz_vlan_max'))
        ranges_vlans['BORDACACHOS_VLAN_MIN'] = int(
            get_variable('bordacachos_vlan_min'))
        ranges_vlans['BORDACACHOS_VLAN_MAX'] = int(
            get_variable('bordacachos_vlan_max'))
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando as variáveis BORDA<DSR,DMZ,CACHOS>_VLAN_<MAX,MIN>.')
    try:
        base_vlan = int(get_variable('num_vlan_acl_bordadsr'))
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável  NUM_VLAN_ACL_BORDADSR')

    ambientes = dict()
    vlans = dict()
    ambientes['LOG'] = 'PRODUCAO'
    ambientes['L3'] = rack.nome
    divisao_aclpaths = [['BORDA_DSR', 'BORDA-DSR', 'BordaVrf'],
                        ['BORDA_DMZ', 'BORDA-DMZ', 'BordaVrf'],
                        ['BORDACACHOS', 'BORDACACHOS', 'BordaCachosVrf']]

    for item in divisao_aclpaths:
        divisaodc = item[0]
        acl_path = item[1]
        vrf = item[2]

        vlan_min = divisaodc + '_VLAN_MIN'
        vlan_max = divisaodc + '_VLAN_MAX'
        ranges['MAX'] = ranges_vlans.get(vlan_max)
        ranges['MIN'] = ranges_vlans.get(vlan_min)

        ambientes['DC'] = divisaodc
        env = criar_ambiente(user, ambientes, ranges, acl_path, 'Servidores',
                             vrf)
        environment_list.append(env)

        vlans['VLAN_NUM'] = base_vlan
        base_vlan += 1
        vlans['VLAN_NAME'] = 'ACL_' + divisaodc + '_' + ambientes.get('L3')
        criar_vlan(user, vlans, ambientes, 1)

    return environment_list
Esempio n. 2
0
def _generate_dict(interface):
    log.info("_generate_dict")

    try:
        supported_string = get_variable('supported_equipment_brands')
        SUPPORTED_EQUIPMENT_BRANDS = ast.literal_eval(supported_string)
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável supported_equipment_brands.')
    except ValueError:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável supported_equipment_brands. '
            'Formato invalido. Deve ser uma string no formato de lista.')

    # Check if it is a supported equipment interface

    if interface.equipamento.modelo.marca.nome not in \
            SUPPORTED_EQUIPMENT_BRANDS:
        raise exceptions.UnsupportedEquipmentException()

    key_dict = {}
    # TODO Separate differet vendor support
    # Cisco Nexus 6001 dict
    key_dict['NATIVE_VLAN'] = interface.vlan_nativa
    key_dict['USE_MCLAG'] = 1
    key_dict['INTERFACE_NAME'] = interface.interface
    key_dict['INTERFACE_DESCRIPTION'] = str(
        interface.ligacao_front.equipamento.nome) + ' ' + str(
            interface.ligacao_front.interface)
    key_dict['INTERFACE_TYPE'] = interface.tipo.tipo
    if key_dict['INTERFACE_TYPE'] in 'trunk':
        vlan_range_results = get_vlan_range(interface)
        key_dict['VLAN_RANGE'] = vlan_range_results[0]
        key_dict['VLAN_RANGE_LIST'] = vlan_range_results[1]

    if interface.channel is not None:
        key_dict['BOOL_INTERFACE_IN_CHANNEL'] = 1
        key_dict['PORTCHANNEL_NAME'] = interface.channel.nome
        try:
            key_dict['MCLAG_IDENTIFIER'] = int(
                re.sub(r'[a-zA\-]', '', interface.channel.nome))
        except ValueError, e:
            log.error('Error: invalid channel name')
            raise e
        if interface.channel.lacp:
            key_dict['CHANNEL_LACP_MODE'] = 'active'
        else:
            key_dict['CHANNEL_LACP_MODE'] = 'on'

        # Normally used in junos plugin:
        key_dict['LACP_SYSTEM_ID_MAC'] = __generate_lacp_system_id_mac(
            interface.channel.nome)
Esempio n. 3
0
def dic_fe_prod(rack):

    CIDRFEipv4 = {}
    CIDRFEipv4[rack] = []
    CIDRFEipv6 = {}
    CIDRFEipv6[rack] = []

    subnetsRackFEipv4 = {}
    subnetsRackFEipv4[rack] = []
    subnetsRackFEipv6 = {}
    subnetsRackFEipv6[rack] = []

    podsFEipv4 = {}
    podsFEipv4[rack] = []
    podsFEipv6 = {}
    podsFEipv6[rack] = []

    redes = dict()
    ranges = dict()
    ipv6 = dict()

    try:
        # CIDR sala 01 => 172.20.0.0/14
        # Sumário do rack => 172.20.0.0/21
        CIDRFEipv4[0] = IPNetwork(get_variable('cidr_fe_v4'))
        # CIDRFE[1] = IPNetwork('172.20.1.0/14')
        CIDRFEipv6[0] = IPNetwork(get_variable('cidr_fe_v6'))
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável VLAN_MNGT<BE,FE,BO,CA,FILER> ou CIDR<FEv4,FEv6>.'
        )
Esempio n. 4
0
def _generate_config_file(interfaces_list):
    log.info("_generate_config_file")

    try:
        INTERFACE_CONFIG_TOAPPLY_REL_PATH = get_variable(
            'interface_config_toapply_rel_path')
        INTERFACE_CONFIG_FILES_PATH = get_variable(
            'interface_config_files_path')
        TEMPLATE_TYPE_INT = get_variable('template_type_int')
        TEMPLATE_TYPE_CHANNEL = get_variable('template_type_channel')
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável INTERFACE_CONFIG'
            '<TOAPPLY,TEMPLATE,FILES>_PATH.')

    # check if all interfaces are configuring same equipment
    # raises error if not
    equipment_interfaces = dict()
    equipment_interfaces[interfaces_list[0].equipamento.nome] = 1
    for interface in interfaces_list:
        if interface.equipamento.nome not in equipment_interfaces:
            log.error('Error trying to configure multiple interfaces in '
                      'different equipments in same call.')
            raise exceptions.InvalidIdInterfaceException

    config_to_be_saved = ''
    equipment_id = interfaces_list[0].equipamento.id

    request_id = getattr(local, 'request_id', NO_REQUEST_ID)
    extension = '.py' if interfaces_list[
        0].equipamento.modelo.marca.nome == "HP" else ''
    filename_out = 'int-d_' + str(
        interfaces_list[0].id) + '_config_' + str(request_id) + extension
    log.debug(filename_out)
    filename_to_save = INTERFACE_CONFIG_FILES_PATH + filename_out
    rel_file_to_deploy = INTERFACE_CONFIG_TOAPPLY_REL_PATH + filename_out

    int_template_file = _load_template_file(equipment_id, TEMPLATE_TYPE_INT)
    channels_configured = {}

    for interface in interfaces_list:
        key_dict = _generate_dict(interface)

        # If Interface is in channel, render the template for channel,
        # only once for each channel
        try:
            if interface.channel is not None:
                if interface.channel.id is not None and \
                        interface.channel.id not in channels_configured.keys():
                    channel_template_file = _load_template_file(
                        equipment_id, TEMPLATE_TYPE_CHANNEL)
                    config_to_be_saved += channel_template_file.render(
                        Context(key_dict))
                    channels_configured[interface.channel.id] = 1

            # Render the template for interface
            config_to_be_saved += int_template_file.render(Context(key_dict))
        except KeyError, exception:
            log.error('Erro: %s ' % exception)
            raise exceptions.InvalidKeyException(exception)
Esempio n. 5
0
def _load_template_file(equipment_id, template_type):
    log.info("_load_template_file")

    try:
        INTERFACE_CONFIG_TEMPLATE_PATH = get_variable(
            'interface_config_template_path')
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável INTERFACE_CONFIG'
            '<TOAPPLY,TEMPLATE,FILES>_PATH.')

    try:
        equipment_template = (EquipamentoRoteiro.search(
            None, equipment_id, template_type)).uniqueResult()
    except:
        log.error('Template type %s not found. Equip: %s' %
                  (template_type, equipment_id))
        raise exceptions.InterfaceTemplateException()

    filename_in = INTERFACE_CONFIG_TEMPLATE_PATH + \
        equipment_template.roteiro.roteiro

    # Read contents from file
    try:
        file_handle = open(filename_in, 'r')
        template_file = Template(file_handle.read())
        file_handle.close()
    except IOError, e:
        log.error('Error opening template file for read: %s. Equip: %s' %
                  (filename_in, equipment_id))
        raise e
Esempio n. 6
0
def aplicar(rack):

    try:
        PATH_TO_CONFIG = get_variable("path_to_config")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando a variável PATH_TO_CONFIG.")

    path_config = PATH_TO_CONFIG + '*' + rack.nome + '*'
    arquivos = glob.glob(path_config)
    for var in arquivos:
        name_equipaments = var.split('/')[-1][:-4]
        #Check if file is config relative to this rack
        for nome in name_equipaments:
            #Check if file is config relative to this rack
            if rack.nome in nome:
                #Apply config only in spines. Leaves already have all necessary config in startup
                if "DEL" in nome:
                    #Check if equipment in under maintenance. If so, does not aplly on it
                    try:
                        equip = Equipamento.get_by_name(nome)
                        if not equip.maintenance:
                            (erro, result) = commands.getstatusoutput(
                                "/usr/bin/backuper -T acl -b %s -e -i %s -w 300"
                                % (var, nome))
                            if erro:
                                raise RackAplError(
                                    None, None,
                                    "Falha ao aplicar as configuracoes: %s" %
                                    (result))
                    except RackAplError, e:
                        raise e
                    except:
                        #Error equipment not found, do nothing
                        pass
Esempio n. 7
0
def dic_hosts_cloud(rack):

    subnetsRackBEipv4 = {}
    subnetsRackBEipv4[rack] = []
    redesHostsipv4 = {}
    redesHostsipv4[rack] = []
    redeHostsBEipv4 = {}
    redeHostsBEipv4[rack] = []
    redeHostsFEipv4 = {}
    redeHostsFEipv4[rack] = []
    redeHostsBOipv4 = {}
    redeHostsBOipv4[rack] = []
    redeHostsCAipv4 = {}
    redeHostsCAipv4[rack] = []
    redeHostsFILERipv4 = {}
    redeHostsFILERipv4[rack] = []

    subnetsRackBEipv6 = {}
    subnetsRackBEipv6[rack] = []
    redesHostsipv6 = {}
    redesHostsipv6[rack] = []
    redeHostsBEipv6 = {}
    redeHostsBEipv6[rack] = []
    redeHostsFEipv6 = {}
    redeHostsFEipv6[rack] = []
    redeHostsBOipv6 = {}
    redeHostsBOipv6[rack] = []
    redeHostsCAipv6 = {}
    redeHostsCAipv6[rack] = []
    redeHostsFILERipv6 = {}
    redeHostsFILERipv6[rack] = []

    hosts = dict()
    BE = dict()
    FE = dict()
    BO = dict()
    CA = dict()
    FILER = dict()
    ipv6 = dict()
    BE_ipv6 = dict()
    FE_ipv6 = dict()
    BO_ipv6 = dict()
    CA_ipv6 = dict()
    FILER_ipv6 = dict()

    try:
        # CIDR sala 01 => 10.128.0.0/12
        CIDRBEipv4 = IPNetwork(get_variable('cidr_be_v4'))
        CIDRBEipv6 = IPNetwork(get_variable('cidr_be_v6'))
        hosts['VLAN_MNGT_BE'] = int(get_variable('vlan_mngt_be'))
        hosts['VLAN_MNGT_FE'] = int(get_variable('vlan_mngt_fe'))
        hosts['VLAN_MNGT_BO'] = int(get_variable('vlan_mngt_bo'))
        hosts['VLAN_MNGT_CA'] = int(get_variable('vlan_mngt_ca'))
        hosts['VLAN_MNGT_FILER'] = int(get_variable('vlan_mngt_filer'))
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável VLAN_MNGT<BE,FE,BO,CA,FILER> ou CIDR<BEv4,BEv6>.'
        )
Esempio n. 8
0
    def post(self, *args, **kwargs):
        try:
            log.info('RACK deploy.')

            rack_id = kwargs.get('rack_id')
            rack = facade.get_by_pk(rack_id)

            try:
                PATH_TO_ADD_CONFIG = get_variable('path_to_add_config')
                REL_PATH_TO_ADD_CONFIG = get_variable('rel_path_to_add_config')
            except ObjectDoesNotExist:
                raise var_exceptions.VariableDoesNotExistException("Erro buscando a variável PATH_TO_ADD_CONFIG ou "
                                                                   "REL_PATH_TO_ADD_CONFIG.")

            path_config = PATH_TO_ADD_CONFIG + '*' + rack.nome + '*'
            arquivos = glob.glob(path_config)

            # Get all files and search for equipments of the rack
            for var in arquivos:
                filename_equipments = var.split('/')[-1]
                rel_filename = REL_PATH_TO_ADD_CONFIG + filename_equipments
                log.debug("rel_filename: %s" % rel_filename)
                # Check if file is config relative to this rack
                if rack.nome in filename_equipments:
                    # Apply config only in spines. Leaves already have all necessary config in startup
                    if "ADD" in filename_equipments:
                        # Check if equipment in under maintenance. If so, does not aplly on it
                        equipment_name = filename_equipments.split('-ADD-')[0]
                        log.debug("equipment_name: %s" % equipment_name)
                        try:
                            equip = Equipamento.get_by_name(equipment_name)
                            if not equip.maintenance:
                                lockvar = LOCK_EQUIPMENT_DEPLOY_CONFIG_USERSCRIPT % (equip.id)
                                output = deploy_facade.deploy_config_in_equipment_synchronous(rel_filename, equip, lockvar)

                                log.debug("equipment output: %s" % (output))
                        except Exception as e:
                            log.exception(e)
                            raise exceptions.RackAplError(e)
            # SEPARAR AQUI!

            datas = dict()
            success_map = dict()

            success_map['rack_conf'] = True
            datas['sucesso'] = success_map

            return Response(datas, status=status.HTTP_201_CREATED)

        except exceptions.RackNumberNotFoundError as e:
            log.exception(e)
            raise exceptions.NetworkAPIException(e)
        except var_exceptions.VariableDoesNotExistException as e:
            log.error(e)
            raise api_exceptions.NetworkAPIException(
                'Erro buscando a variável PATH_TO_ADD_CONFIG ou REL_PATH_TO_ADD_CONFIG. Erro: %s' % e)
        except Exception as e:
            log.exception(e)
            raise api_exceptions.NetworkAPIException(e)
def get_value(name, default=None):
    try:
        var = Variable.objects.filter(name=name).uniqueResult()
    except ObjectDoesNotExist:
        if default:
            return default
        raise exceptions.VariableDoesNotExistException()
    return var.value
Esempio n. 10
0
def dic_pods(rack):

    subnetsRackBEipv4 = {}
    subnetsRackBEipv4[rack] = []

    PODSBEipv4 = {}
    redesPODSBEipv4 = {}
    PODSBEFEipv4 = {}
    redesPODSBEFEipv4 = {}
    PODSBEBOipv4 = {}
    redesPODSBEBOipv4 = {}
    PODSBECAipv4 = {}
    redesPODSBECAipv4 = {}

    PODSBEipv4[rack] = []
    redesPODSBEipv4[rack] = []
    PODSBEFEipv4[rack] = []
    redesPODSBEFEipv4[rack] = []
    PODSBEBOipv4[rack] = []
    redesPODSBEBOipv4[rack] = []
    PODSBECAipv4[rack] = []
    redesPODSBECAipv4[rack] = []

    PODSBEipv6 = {}
    redesPODSBEipv6 = {}
    PODSBEFEipv6 = {}
    redesPODSBEFEipv6 = {}
    PODSBEBOipv6 = {}
    redesPODSBEBOipv6 = {}
    PODSBECAipv6 = {}
    redesPODSBECAipv6 = {}
    subnetsRackBEipv6 = {}

    PODSBEipv6[rack] = []
    redesPODSBEipv6[rack] = []
    PODSBEFEipv6[rack] = []
    redesPODSBEFEipv6[rack] = []
    PODSBEBOipv6[rack] = []
    redesPODSBEBOipv6[rack] = []
    PODSBECAipv6[rack] = []
    redesPODSBECAipv6[rack] = []
    subnetsRackBEipv6[rack] = []

    try:
        # CIDR sala 01 => 10.128.0.0/12
        CIDRBEipv4 = IPNetwork(get_variable('cidr_be_v4'))
        CIDRBEipv6 = IPNetwork(get_variable('cidr_be_v6'))
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável CIDR<BEv4,BEv6>.')
Esempio n. 11
0
def get_local_tunnel_ip(equipment):

    try:
        networkv4_tunnel_id = get_variable("networkv4_tunnel_ip")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando o id da rede com o local_tunnel_ip")

    unique_ip = IpEquipamento.objects.filter(equipamento=equipment, ip__networkipv4=networkv4_tunnel_id)\
        .select_related('ip').uniqueResult()

    log.debug('equip %s' % equipment)
    log.debug('unique_ip: %s' % unique_ip.ip.ip_formated)

    return unique_ip.ip.ip_formated
Esempio n. 12
0
def autoprovision_coreoob(rack, FILEINCR1, FILEINCR2, FILEINOOB, name_core1,
                          name_core2, name_oob, name_lf1, name_lf2, ip_mgmtoob,
                          int_oob_core1, int_oob_core2, int_core1_oob,
                          int_core2_oob):

    # gerando dicionarios para substituir paravras chaves do roteiro
    variablestochangecore1 = {}
    variablestochangecore2 = {}
    variablestochangeoob = {}

    # nome dos cores, do console de gerencia dos lf do rack, e do rack
    HOSTNAME_CORE1 = name_core1
    HOSTNAME_CORE2 = name_core2
    HOSTNAME_OOB = name_oob
    HOSTNAME_RACK = HOSTNAME_OOB.split('-')
    HOSTNAME_LF1 = name_lf1
    HOSTNAME_LF2 = name_lf2

    # interfaces de conexão entre os cores e o console
    INT_OOBC1_UPLINK = int_oob_core1
    INT_OOBC2_UPLINK = int_oob_core2
    INTERFACE_CORE1 = int_core1_oob
    INTERFACE_CORE2 = int_core2_oob

    # ip de gerencia do oob
    IP_GERENCIA_OOB = ip_mgmtoob

    try:
        # roteiro para configuracao de core
        fileincore1 = get_variable('path_to_guide') + FILEINCR1
        fileincore2 = get_variable('path_to_guide') + FILEINCR2
        fileinoob = get_variable('path_to_guide') + FILEINOOB
        # valor base para as vlans e portchannels
        BASE_SO = int(get_variable('base_so'))
        # arquivos de saida, OOB-CM-01.cfg e OOB-CM-02.cfg
        fileoutcore1 = get_variable(
            'path_to_add_config'
        ) + HOSTNAME_CORE1 + '-ADD-' + HOSTNAME_RACK[2] + '.cfg'
        fileoutcore2 = get_variable(
            'path_to_add_config'
        ) + HOSTNAME_CORE2 + '-ADD-' + HOSTNAME_RACK[2] + '.cfg'
        fileoutoob = get_variable('path_to_config') + HOSTNAME_OOB + '.cfg'
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável PATH_TO_<GUIDE, CONFIG> ou BASE_SO.')
Esempio n. 13
0
    def post(self, *args, **kwargs):
        try:
            log.info('RACK deploy.')

            rack_id = kwargs.get('rack_id')
            rack = facade.get_by_pk(rack_id)

            try:
                PATH_TO_ADD_CONFIG = get_variable('path_to_add_config')
                REL_PATH_TO_ADD_CONFIG = get_variable('rel_path_to_add_config')
            except ObjectDoesNotExist:
                raise var_exceptions.VariableDoesNotExistException(
                    "Erro buscando a variável PATH_TO_ADD_CONFIG ou "
                    "REL_PATH_TO_ADD_CONFIG.")

            path_config = PATH_TO_ADD_CONFIG + '*' + rack.nome + '*'
            arquivos = glob.glob(path_config)

            # Get all files and search for equipments of the rack
            for var in arquivos:
                filename_equipments = var.split('/')[-1]
                rel_filename = "../../" + REL_PATH_TO_ADD_CONFIG + filename_equipments
                log.debug("rel_filename: %s" % rel_filename)
                # Check if file is config relative to this rack
                if rack.nome in filename_equipments:
                    # Apply config only in spines. Leaves already have all necessary config in startup
                    if "ADD" in filename_equipments:
                        # Check if equipment in under maintenance. If so, does not aplly on it
                        equipment_name = filename_equipments.split('-ADD-')[0]
                        log.debug("equipment_name: %s" % equipment_name)
                        try:
                            equip = Equipamento.get_by_name(equipment_name)
                            if not equip.maintenance:
                                (erro, result) = commands.getstatusoutput(
                                    "/usr/bin/backuper -T acl -b %s -e -i %s -w "
                                    "300" % (rel_filename, equipment_name))
                                log.debug("erro: %s, result: %s" %
                                          (str(erro), str(result)))
                                if erro:
                                    raise exceptions.RackAplError()
                        except exceptions.RackAplError, e:
                            raise e
                        except:
                            # Error equipment not found, do nothing
                            pass
Esempio n. 14
0
    def delete(self, *args, **kwargs):
        try:
            log.info('DELETE VARIABLE')

            variable_id = kwargs['variable_id']

            if not is_valid_int_greater_zero_param(variable_id, False):
                raise api_exceptions.ValidationException(
                    'Variable id invalid.')

            facade.delete_variable(self.request.user, variable_id)
            data = dict()
            data['variable'] = 'ok'

            return Response(data, status=status.HTTP_200_OK)

        except ObjectDoesNotExist, exception:
            log.error(exception)
            raise exceptions.VariableDoesNotExistException()
Esempio n. 15
0
def dic_vlan_core(variablestochangecore, rack, name_core, name_rack):
    """
    variablestochangecore: list
    rack: Numero do Rack
    name_core: Nome do Core
    name_rack: Nome do rack
    """

    core = int(name_core.split("-")[2])

    try:
        #valor base para as vlans e portchannels
        BASE_SO = int(get_variable("base_so"))
        #rede para conectar cores aos racks
        SO_OOB_NETipv4= IPNetwork(get_variable("net_core"))
        #Vlan para cadastrar
        vlan_so_name = get_variable("vlan_so_name")
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException("Erro buscando a variável BASE_SO ou SO_OOB_NETipv4.")
Esempio n. 16
0
def generate_delete_file(user, equip_id, interface_list, channel):
    try:
        INTERFACE_CONFIG_TOAPPLY_REL_PATH = get_variable(
            'interface_config_toapply_rel_path')
        INTERFACE_CONFIG_FILES_PATH = get_variable(
            'interface_config_files_path')
        TEMPLATE_REMOVE_CHANNEL = get_variable('template_remove_channel')
        TEMPLATE_REMOVE_INTERFACE = get_variable('template_remove_interface')
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável INTERFACE_CONFIG_TEMPLATE_PATH,'
            'TEMPLATE_REMOVE_CHANNEL ou TEMPLATE_REMOVE_INTERFACE.')

    key_dict = dict()
    config_to_be_saved = ''
    request_id = getattr(local, 'request_id', NO_REQUEST_ID)
    extension = '.py' if interface_list[
        0].equipamento.modelo.marca.nome == "HP" else ''
    filename_out = 'equip_' + str(equip_id) + '_channel_' + str(
        channel.id) + '_remove_' + str(request_id) + extension
    log.debug(filename_out)
    filename_to_save = INTERFACE_CONFIG_FILES_PATH + filename_out
    rel_file_to_deploy = INTERFACE_CONFIG_TOAPPLY_REL_PATH + filename_out

    key_dict['PORTCHANNEL_NAME'] = channel.nome

    for i in interface_list:
        key_dict['INTERFACE_NAME'] = i.interface
        try:
            interface_template_file = _load_template_file(
                int(equip_id), TEMPLATE_REMOVE_INTERFACE)
            config_to_be_saved += interface_template_file.render(
                Context(key_dict))
        except exceptions.InterfaceTemplateException, e:
            log.error(e)
            raise exceptions.InterfaceTemplateException()
        except KeyError, exception:
            log.error('Erro: %s ' % exception)
            raise exceptions.InvalidKeyException(exception)
Esempio n. 17
0
def dic_lf_spn(user, rack):

    CIDREBGP = {}
    CIDRBE = {}
    ########
    VLANBELEAF = {}
    VLANFELEAF = {}
    VLANBORDALEAF = {}
    VLANBORDACACHOSLEAF = {}
    ########
    VLANBELEAF[rack] = []
    VLANFELEAF[rack] = []
    VLANBORDALEAF[rack] = []
    VLANBORDACACHOSLEAF[rack] = []

    ipv4_spn1 = dict()
    ipv4_spn2 = dict()
    ipv4_spn3 = dict()
    ipv4_spn4 = dict()
    redev6_spn1 = dict()
    redev6_spn2 = dict()
    redev6_spn3 = dict()
    redev6_spn4 = dict()

    try:
        BASE_RACK = int(get_variable('base_rack'))
        VLANBE = int(get_variable('vlanbe'))
        VLANFE = int(get_variable('vlanfe'))
        VLANBORDA = int(get_variable('vlanborda'))
        VLANBORDACACHOS = int(get_variable('vlanbordacachos'))
        VLANBETORxTOR = int(get_variable('vlanbetorxtor'))
        # CIDR sala 01 => 10.128.0.0/12
        CIDRBE[0] = IPNetwork(get_variable('cidr_sl01'))
        CIDREBGP[0] = IPNetwork(get_variable('cidr_bgp'))
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável BASE_RACK ou VLAN<BE,FE,BORDA,CACHOS,TORxTOR> ou CIDR<BE,EBGP>.'
        )
Esempio n. 18
0
def ambiente_prod_fe(user, rack, environment_list):

    redes, ranges, ipv6 = dic_fe_prod(rack.numero)

    ambientes = dict()
    ambientes['LOG'] = 'PRODUCAO'
    ambientes['L3'] = rack.nome
    ambientes['DC'] = 'FE'

    redes['TIPO'] = 'Rede invalida equipamentos'
    ipv6['TIPO'] = 'Rede invalida equipamentos'

    acl_path = 'FECLOUD'

    # criar ambiente
    env = criar_ambiente(user, ambientes, ranges, acl_path, 'Servidores',
                         'FEVrf')
    environment_list.append(env)

    # configuracao dos ambientes
    redes['VERSION'] = 'ipv4'
    config_ambiente(user, redes, ambientes)

    ipv6['VERSION'] = 'ipv6'
    config_ambiente(user, ipv6, ambientes)

    vlans = dict()
    try:
        vlans['VLAN_NUM'] = int(get_variable('num_vlan_acl_fe'))
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável  NUM_VLAN_ACL_FE')

    vlans['VLAN_NAME'] = 'ACL_' + \
        ambientes.get('DC') + '_' + ambientes.get('L3')
    criar_vlan(user, vlans, ambientes, 1)

    return environment_list
def ambiente_prod_fe(user, rack, environment_list):

    redes, ranges, ipv6 = dic_fe_prod(rack.numero)

    ambientes = dict()
    ambientes['LOG'] = "PRODUCAO"
    ambientes['L3'] = rack.nome
    ambientes['DC'] = "FE"

    redes['TIPO'] = "Rede invalida equipamentos"
    ipv6['TIPO'] = "Rede invalida equipamentos"

    acl_path = 'FECLOUD'

    #criar ambiente
    env = criar_ambiente(user, ambientes, ranges, acl_path, "Servidores",
                         "FEVrf")
    environment_list.append(env)

    #configuracao dos ambientes
    redes['VERSION'] = "ipv4"
    config_ambiente(user, redes, ambientes)

    ipv6['VERSION'] = "ipv6"
    config_ambiente(user, ipv6, ambientes)

    vlans = dict()
    try:
        vlans['VLAN_NUM'] = int(get_variable("num_vlan_acl_fe"))
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando a variável  NUM_VLAN_ACL_FE")

    vlans['VLAN_NAME'] = "ACL_" + ambientes.get('DC') + "_" + ambientes.get(
        'L3')
    criar_vlan(user, vlans, ambientes, 1)

    return environment_list
Esempio n. 20
0
def get_by_name(name):
    try:
        var = Variable.objects.filter(name=name).uniqueResult()
    except ObjectDoesNotExist:
        raise exceptions.VariableDoesNotExistException()
    return var
Esempio n. 21
0
def autoprovision_coreoob(rack, equips):

    log.info("AutoprovisionOOB")

    variablestochangecore1 = dict()
    variablestochangecore2 = dict()
    variablestochangeoob = dict()

    prefixlf = "LF-"
    prefixoob = "OOB"
    vlan_base = None

    dcroom = model_to_dict(rack.dcroom)
    log.debug("type: %s" % str(type(dcroom.get("config"))))
    fabricconfig = dcroom.get("config")

    try:
        fabricconfig = json.loads(fabricconfig)
        log.debug("type -ast: %s" % str(type(fabricconfig)))
    except:
        pass

    try:
        fabricconfig = ast.literal_eval(fabricconfig)
        log.debug("config -ast: %s" % str(fabricconfig))
    except:
        pass

    envconfig = fabricconfig
    BASE_CHANNEL = int(envconfig.get("Channel").get(
        "channel")) if envconfig.get("Channel") else 10

    try:
        path_to_guide = get_variable("path_to_guide")
        path_to_add_config = get_variable("path_to_add_config")
        path_to_config = get_variable("path_to_config")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando a variável PATH_TO_GUIDE")

    environment = models_env.Ambiente.objects.filter(
        dcroom=rack.dcroom.id,
        father_environment__isnull=True,
        ambiente_logico__nome="GERENCIA",
        divisao_dc__nome="OOB").uniqueResult()
    log.debug("environment: %s " % str(environment))
    log.debug("equips: %s" % str(equips))
    vlan_base = environment.min_num_vlan_1

    for net in environment.configs:
        if net.ip_config.type == "v4":
            redev4 = IPNetwork(str(net.ip_config.subnet))
            prefixv4 = int(net.ip_config.new_prefix)
            subredev4 = list(redev4.subnet(prefixv4))

    if not vlan_base:
        raise Exception(
            "Range de Vlans do ambiente de gerencia do fabric não encontrado.")
    if not subredev4:
        raise Exception("Rede ipv4 do ambiente OOB do fabric não encontrado.")

    vlan_so = str(int(vlan_base) + int(rack.numero))
    variablestochangeoob["VLAN_SO"] = vlan_so

    equips_sorted = sorted(equips, key=operator.itemgetter('sw'))
    oob = equips_sorted[-1]

    variablestochangeoob["OWN_IP_MGMT"] = oob.get("ip_mngt")
    variablestochangeoob["HOSTNAME_OOB"] = oob.get("nome")
    variablestochangeoob["HOSTNAME_RACK"] = rack.nome
    fileinoob = path_to_guide + oob.get("roteiro")
    fileoutoob = path_to_config + oob.get("nome") + ".cfg"

    for equip in oob.get("interfaces"):
        nome = equip.get("nome")
        log.debug(str(nome))
        roteiro = equip.get("roteiro")
        if nome[:3] == prefixlf:
            if nome[-1] == "1":
                variablestochangeoob["HOSTNAME_LF1"] = nome
            else:
                variablestochangeoob["HOSTNAME_LF2"] = nome
        elif nome[:3] == prefixoob:
            intoob = equip.get("eq_interface")
            intcore = equip.get("interface")
            if nome[-1] == "1":
                log.info("oob01")
                log.info(str(nome))
                hostname_core1 = nome
                core = int(hostname_core1.split('-')[-1])
                ip = 124 + core
                variablestochangeoob["INT_OOBC1_UPLINK"] = intoob
                variablestochangeoob["INTERFACE_CORE1"] = intcore
                variablestochangeoob["HOSTNAME_CORE1"] = nome
                variablestochangecore1["INT_OOB_UPLINK"] = intoob
                variablestochangecore1["INTERFACE_CORE"] = intcore
                variablestochangecore1["HOSTNAME_RACK"] = rack.nome
                variablestochangecore1["SO_HOSTNAME_OOB"] = "SO_" + str(
                    rack.nome)
                variablestochangecore1["VLAN_SO"] = vlan_so
                variablestochangecore1['IPCORE'] = str(
                    subredev4[rack.numero][ip])
                variablestochangecore1['IPHSRP'] = str(
                    subredev4[rack.numero][1])
                variablestochangecore1['NUM_CHANNEL'] = str(BASE_CHANNEL +
                                                            int(rack.numero))
                if (1 + int(rack.numero)) % 2 == 0:
                    variablestochangecore1["HSRP_PRIORITY"] = "100"
                else:
                    variablestochangecore1["HSRP_PRIORITY"] = "101"
                fileincore1 = path_to_guide + roteiro
                fileoutcore1 = path_to_add_config + nome + "-ADD-" + str(
                    rack.nome) + ".cfg"
            elif nome[-1] == "2":
                log.info("oob02")
                log.info(str(nome))
                hostname_core2 = nome
                core = int(hostname_core2.split('-')[-1])
                ip = 124 + core
                variablestochangeoob["INT_OOBC2_UPLINK"] = intoob
                variablestochangeoob["INTERFACE_CORE2"] = intcore
                variablestochangeoob["HOSTNAME_CORE2"] = nome
                variablestochangecore2["INT_OOB_UPLINK"] = intoob
                variablestochangecore2["INTERFACE_CORE"] = intcore
                variablestochangecore2["HOSTNAME_RACK"] = rack.nome
                variablestochangecore2["SO_HOSTNAME_OOB"] = "SO_" + str(
                    rack.nome)
                variablestochangecore2["VLAN_SO"] = vlan_so
                variablestochangecore2['IPCORE'] = str(
                    subredev4[rack.numero][ip])
                variablestochangecore2['IPHSRP'] = str(
                    subredev4[rack.numero][1])
                variablestochangecore2['NUM_CHANNEL'] = str(BASE_CHANNEL +
                                                            int(rack.numero))
                if (2 + int(rack.numero)) % 2 == 0:
                    variablestochangecore2["HSRP_PRIORITY"] = "100"
                else:
                    variablestochangecore2["HSRP_PRIORITY"] = "101"
                fileincore2 = path_to_guide + roteiro
                fileoutcore2 = path_to_add_config + nome + "-ADD-" + str(
                    rack.nome) + ".cfg"

    replace(fileincore1, fileoutcore1, variablestochangecore1)
    replace(fileincore2, fileoutcore2, variablestochangecore2)
    replace(fileinoob, fileoutoob, variablestochangeoob)

    return True
Esempio n. 22
0
def autoprovision_splf(rack, equips):

    log.info("AutoprovisionSPN-LF")

    numero_rack = rack.numero
    prefixspn = "SPN"
    prefixlf = "LF-"
    prefixoob = "OOB"
    # STRUCTURE: IPSPINE[rack][spine]: ip a configurar no spine 'spine' relativo à leaf do rack 'rack'
    # STRUCTURE: IPLEAF[rack][spine]: ip a configurar no leaf do rack 'rack' relativo ao spine 'spine'
    CIDREBGP = dict()
    IPSPINEipv4 = dict()
    IPSPINEipv6 = dict()
    IPLEAFipv4 = dict()
    IPLEAFipv6 = dict()
    IPSIBGPipv4 = dict()
    IPSIBGPipv6 = dict()
    ASLEAF = dict()
    #
    VLANBELEAF = dict()
    VLANFELEAF = dict()
    VLANBORDALEAF = dict()
    VLANBORDACACHOSLEAF = dict()
    VLANBORDACACHOSBLEAF = dict()
    #
    PODSBEipv4 = dict()
    redesPODSBEipv4 = dict()
    #
    subnetsRackBEipv4 = dict()
    #
    PODSBEipv6 = dict()
    redesPODSBEipv6 = dict()
    PODSBEFEipv6 = dict()
    redesPODSBEFEipv6 = dict()
    PODSBEBOipv6 = dict()
    redesPODSBEBOipv6 = dict()
    PODSBECAipv6 = dict()
    redesPODSBECAipv6 = dict()
    redesHostsipv6 = dict()
    redeHostsBEipv6 = dict()
    redeHostsFEipv6 = dict()
    redeHostsBOipv6 = dict()
    redeHostsCAipv6 = dict()
    redeHostsFILERipv6 = dict()
    subnetsRackBEipv6 = dict()
    subnetsRackFEipv4 = dict()
    subnetsRackBO_DSRipv4 = dict()
    subnetsRackBOCAAipv4 = dict()
    subnetsRackBOCABipv4 = dict()
    redesPODSFEipv4 = dict()
    subnetsRackFEipv6 = dict()
    subnetsRackBO_DSRipv6 = dict()
    subnetsRackBOCAAipv6 = dict()
    subnetsRackBOCABipv6 = dict()
    redesPODSFEipv6 = dict()
    #
    IPSPINEipv4[numero_rack] = list()
    IPSPINEipv6[numero_rack] = list()
    IPLEAFipv4[numero_rack] = list()
    IPLEAFipv6[numero_rack] = list()
    IPSIBGPipv4[numero_rack] = list()
    IPSIBGPipv6[numero_rack] = list()
    VLANBELEAF[numero_rack] = list()
    VLANFELEAF[numero_rack] = list()
    VLANBORDALEAF[numero_rack] = list()
    VLANBORDACACHOSLEAF[numero_rack] = list()
    VLANBORDACACHOSBLEAF[numero_rack] = list()
    ASLEAF[numero_rack] = list()
    #
    PODSBEipv4[numero_rack] = list()
    redesPODSBEipv4[numero_rack] = list()
    #
    subnetsRackBEipv4[numero_rack] = list()
    #
    PODSBEipv6[numero_rack] = list()
    redesPODSBEipv6[numero_rack] = list()
    PODSBEFEipv6[numero_rack] = list()
    redesPODSBEFEipv6[numero_rack] = list()
    PODSBEBOipv6[numero_rack] = list()
    redesPODSBEBOipv6[numero_rack] = list()
    PODSBECAipv6[numero_rack] = list()
    redesPODSBECAipv6[numero_rack] = list()
    redesHostsipv6[numero_rack] = list()
    redeHostsBEipv6[numero_rack] = list()
    redeHostsFEipv6[numero_rack] = list()
    redeHostsBOipv6[numero_rack] = list()
    redeHostsCAipv6[numero_rack] = list()
    redeHostsFILERipv6[numero_rack] = list()
    subnetsRackBEipv6[numero_rack] = list()
    subnetsRackFEipv4[numero_rack] = list()
    subnetsRackBO_DSRipv4[numero_rack] = list()
    subnetsRackBOCAAipv4[numero_rack] = list()
    subnetsRackBOCABipv4[numero_rack] = list()
    redesPODSFEipv4[numero_rack] = list()
    subnetsRackFEipv6[numero_rack] = list()
    subnetsRackBO_DSRipv6[numero_rack] = list()
    subnetsRackBOCAAipv6[numero_rack] = list()
    subnetsRackBOCABipv6[numero_rack] = list()
    redesPODSFEipv6[numero_rack] = list()

    CIDRFEipv4 = dict()
    CIDRFEipv6 = dict()

    variablestochangespine1 = dict()
    variablestochangeleaf1 = dict()

    VLANBE = None
    VLANFE = None
    VLANBORDA = None
    VLANBORDACACHOS = None
    CIDRBEipv4 = None
    CIDRBEipv6 = None

    CIDRBO_DSRipv4interno = ""
    prefixInternoBO_DSRV4 = ""
    CIDRBO_DSRipv6interno = ""
    prefixInternoBO_DSRV6 = ""
    CIDRBOCAAipv4interno = ""
    prefixInternoBOCAAV4 = ""
    CIDRBOCAAipv6interno = ""
    prefixInternoBOCAAV6 = ""
    CIDRBOCABipv4interno = ""
    prefixInternoBOCABV4 = ""
    CIDRBOCABipv6interno = ""
    prefixInternoBOCABV6 = ""

    try:
        path_to_guide = get_variable("path_to_guide")
        path_to_add_config = get_variable("path_to_add_config")
        path_to_config = get_variable("path_to_config")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando a variável PATH_TO_GUIDE")

    try:
        variablestochangeleaf1["KICKSTART_SO_LF"] = get_variable(
            "kickstart_so_lf")
        variablestochangeleaf1["IMAGE_SO_LF"] = get_variable("image_so_lf")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando a variável KICKSTART_SO_LF ou IMAGE_SO_LF.")

    equips_sorted = sorted(equips, key=operator.itemgetter('sw'))

    dcroom = model_to_dict(rack.dcroom)
    log.debug("type: %s" % str(type(dcroom.get("config"))))
    fabricconfig = dcroom.get("config")

    try:
        fabricconfig = json.loads(fabricconfig)
        log.debug("type -ast: %s" % str(type(fabricconfig)))
    except:
        pass

    try:
        fabricconfig = ast.literal_eval(fabricconfig)
        log.debug("config -ast: %s" % str(fabricconfig))
    except:
        pass

    envconfig = fabricconfig
    BASE_RACK = dcroom.get("racks")
    BGP = envconfig.get("BGP")
    BASE_AS_SPN = int(BGP.get("spines"))
    BASE_AS_LFS = int(BGP.get("leafs"))

    # get fathers environments
    spn_envs = models_env.Ambiente.objects.filter(
        dcroom=dcroom.get("id"),
        father_environment__isnull=True,
        ambiente_logico__nome="SPINES")

    prod_envs = models_env.Ambiente.objects.filter(
        dcroom=dcroom.get("id"),
        father_environment__isnull=True,
        ambiente_logico__nome="PRODUCAO",
        divisao_dc__nome__in=[
            "BE", "FE", "BO_DSR", "BOCACHOS-A", "BOCACHOS-B"
        ])

    lf_env = models_env.Ambiente.objects.filter(
        dcroom=dcroom.get("id"),
        divisao_dc__nome="BE",
        grupo_l3__nome=str(rack.dcroom.name),
        ambiente_logico__nome="LEAF-LEAF").uniqueResult()
    for spn in spn_envs:
        if spn.divisao_dc.nome[:2] == "BE":
            VLANBE = spn.min_num_vlan_1
            for net in spn.configs:
                if net.ip_config.type == "v4":
                    CIDRBEipv4 = IPNetwork(str(net.ip_config.subnet))
                    prefixBEV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRBEipv6 = IPNetwork(str(net.ip_config.subnet))
                    prefixBEV6 = int(net.ip_config.new_prefix)
        elif spn.divisao_dc.nome[:2] == "FE":
            VLANFE = spn.min_num_vlan_1
            for net in spn.configs:
                if net.ip_config.type == "v4":
                    CIDRFEipv4 = IPNetwork(str(net.ip_config.subnet))
                    prefixFEV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRFEipv6 = IPNetwork(str(net.ip_config.subnet))
                    prefixFEV6 = int(net.ip_config.new_prefix)
        elif spn.divisao_dc.nome == "BO":
            VLANBORDA = spn.min_num_vlan_1
        elif spn.divisao_dc.nome == "BOCACHOS-A":
            VLANBORDACACHOS = spn.min_num_vlan_1
        elif spn.divisao_dc.nome == "BOCACHOS-B":
            VLANBORDACACHOSB = spn.min_num_vlan_1

    for prod in prod_envs:
        if prod.divisao_dc.nome[:2] == "BE":
            for net in prod.configs:
                if net.ip_config.type == "v4":
                    CIDRBEipv4interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRBEipv6interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoV6 = int(net.ip_config.new_prefix)
        elif prod.divisao_dc.nome[:2] == "FE":
            for net in prod.configs:
                if net.ip_config.type == "v4":
                    CIDRFEipv4interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoFEV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRFEipv6interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoFEV6 = int(net.ip_config.new_prefix)
        elif prod.divisao_dc.nome == "BO_DSR":
            for net in prod.configs:
                if net.ip_config.type == "v4":
                    CIDRBO_DSRipv4interno = IPNetwork(str(
                        net.ip_config.subnet))
                    prefixInternoBO_DSRV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRBO_DSRipv6interno = IPNetwork(str(
                        net.ip_config.subnet))
                    prefixInternoBO_DSRV6 = int(net.ip_config.new_prefix)
        elif prod.divisao_dc.nome == "BOCACHOS-A":
            for net in prod.configs:
                if net.ip_config.type == "v4":
                    CIDRBOCAAipv4interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoBOCAAV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRBOCAAipv6interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoBOCAAV6 = int(net.ip_config.new_prefix)
        elif prod.divisao_dc.nome == "BOCACHOS-B":
            for net in prod.configs:
                if net.ip_config.type == "v4":
                    CIDRBOCABipv4interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoBOCABV4 = int(net.ip_config.new_prefix)
                else:
                    log.debug(str(net.ip_config.subnet))
                    CIDRBOCABipv6interno = IPNetwork(str(net.ip_config.subnet))
                    prefixInternoBOCABV6 = int(net.ip_config.new_prefix)

    log.debug(str(lf_env))
    for netlf in lf_env.configs:
        if netlf.ip_config.type == "v4":
            IBGPToRLxLipv4 = IPNetwork(str(netlf.ip_config.subnet))
        elif netlf.ip_config.type == "v6":
            IBGPToRLxLipv6 = IPNetwork(str(netlf.ip_config.subnet))

    SPINE1ipv4 = splitnetworkbyrack(CIDRBEipv4, prefixBEV4, 0)
    SPINE2ipv4 = splitnetworkbyrack(CIDRBEipv4, prefixBEV4, 1)
    SPINE3ipv4 = splitnetworkbyrack(CIDRBEipv4, prefixBEV4, 2)
    SPINE4ipv4 = splitnetworkbyrack(CIDRBEipv4, prefixBEV4, 3)
    SPINE1ipv6 = splitnetworkbyrack(CIDRBEipv6, prefixBEV6, 0)
    SPINE2ipv6 = splitnetworkbyrack(CIDRBEipv6, prefixBEV6, 1)
    SPINE3ipv6 = splitnetworkbyrack(CIDRBEipv6, prefixBEV6, 2)
    SPINE4ipv6 = splitnetworkbyrack(CIDRBEipv6, prefixBEV6, 3)

    id_vlt = [
        envconfig.get("VLT").get("id_vlt_lf1"),
        envconfig.get("VLT").get("id_vlt_lf2")
    ]
    priority_vlt = [
        envconfig.get("VLT").get("priority_vlt_lf1"),
        envconfig.get("VLT").get("priority_vlt_lf2")
    ]

    subSPINE1ipv4 = list(SPINE1ipv4.subnet(31))
    subSPINE2ipv4 = list(SPINE2ipv4.subnet(31))
    subSPINE3ipv4 = list(SPINE3ipv4.subnet(31))
    subSPINE4ipv4 = list(SPINE4ipv4.subnet(31))
    subSPINE1ipv6 = list(SPINE1ipv6.subnet(127))
    subSPINE2ipv6 = list(SPINE2ipv6.subnet(127))
    subSPINE3ipv6 = list(SPINE3ipv6.subnet(127))
    subSPINE4ipv6 = list(SPINE4ipv6.subnet(127))

    subIBGPToRLxLipv4 = list(IBGPToRLxLipv4.subnet(31))
    subIBGPToRLxLipv6 = list(IBGPToRLxLipv6.subnet(127))

    IPSPINEipv4[numero_rack].append(subSPINE1ipv4[numero_rack][0])
    IPSPINEipv4[numero_rack].append(subSPINE2ipv4[numero_rack][0])
    IPSPINEipv4[numero_rack].append(subSPINE3ipv4[numero_rack][0])
    IPSPINEipv4[numero_rack].append(subSPINE4ipv4[numero_rack][0])
    #
    IPLEAFipv4[numero_rack].append(subSPINE1ipv4[numero_rack][1])
    IPLEAFipv4[numero_rack].append(subSPINE2ipv4[numero_rack][1])
    IPLEAFipv4[numero_rack].append(subSPINE3ipv4[numero_rack][1])
    IPLEAFipv4[numero_rack].append(subSPINE4ipv4[numero_rack][1])
    #
    IPSIBGPipv4[numero_rack].append(subIBGPToRLxLipv4[numero_rack][0])
    IPSIBGPipv4[numero_rack].append(subIBGPToRLxLipv4[numero_rack][1])
    #
    IPSPINEipv6[numero_rack].append(subSPINE1ipv6[numero_rack][0])
    IPSPINEipv6[numero_rack].append(subSPINE2ipv6[numero_rack][0])
    IPSPINEipv6[numero_rack].append(subSPINE3ipv6[numero_rack][0])
    IPSPINEipv6[numero_rack].append(subSPINE4ipv6[numero_rack][0])
    #
    IPLEAFipv6[numero_rack].append(subSPINE1ipv6[numero_rack][1])
    IPLEAFipv6[numero_rack].append(subSPINE2ipv6[numero_rack][1])
    IPLEAFipv6[numero_rack].append(subSPINE3ipv6[numero_rack][1])
    IPLEAFipv6[numero_rack].append(subSPINE4ipv6[numero_rack][1])
    #
    IPSIBGPipv6[numero_rack].append(subIBGPToRLxLipv6[numero_rack][0])
    IPSIBGPipv6[numero_rack].append(subIBGPToRLxLipv6[numero_rack][1])
    #
    VLANBELEAF[numero_rack].append(VLANBE + numero_rack)
    VLANBELEAF[numero_rack].append(VLANBE + numero_rack + BASE_RACK)
    VLANBELEAF[numero_rack].append(VLANBE + numero_rack + 2 * BASE_RACK)
    VLANBELEAF[numero_rack].append(VLANBE + numero_rack + 3 * BASE_RACK)
    #
    VLANFELEAF[numero_rack].append(VLANFE + numero_rack)
    VLANFELEAF[numero_rack].append(VLANFE + numero_rack + BASE_RACK)
    VLANFELEAF[numero_rack].append(VLANFE + numero_rack + 2 * BASE_RACK)
    VLANFELEAF[numero_rack].append(VLANFE + numero_rack + 3 * BASE_RACK)
    #
    VLANBORDALEAF[numero_rack].append(VLANBORDA + numero_rack)
    VLANBORDALEAF[numero_rack].append(VLANBORDA + numero_rack + BASE_RACK)
    VLANBORDALEAF[numero_rack].append(VLANBORDA + numero_rack + 2 * BASE_RACK)
    VLANBORDALEAF[numero_rack].append(VLANBORDA + numero_rack + 3 * BASE_RACK)
    #
    VLANBORDACACHOSLEAF[numero_rack].append(VLANBORDACACHOS + numero_rack)
    VLANBORDACACHOSLEAF[numero_rack].append(VLANBORDACACHOS + numero_rack +
                                            BASE_RACK)
    VLANBORDACACHOSLEAF[numero_rack].append(VLANBORDACACHOS + numero_rack +
                                            2 * BASE_RACK)
    VLANBORDACACHOSLEAF[numero_rack].append(VLANBORDACACHOS + numero_rack +
                                            3 * BASE_RACK)
    #
    VLANBORDACACHOSBLEAF[numero_rack].append(VLANBORDACACHOSB + numero_rack)
    VLANBORDACACHOSBLEAF[numero_rack].append(VLANBORDACACHOSB + numero_rack +
                                             BASE_RACK)
    VLANBORDACACHOSBLEAF[numero_rack].append(VLANBORDACACHOSB + numero_rack +
                                             2 * BASE_RACK)
    VLANBORDACACHOSBLEAF[numero_rack].append(VLANBORDACACHOSB + numero_rack +
                                             3 * BASE_RACK)
    #
    ASLEAF[numero_rack].append(BASE_AS_LFS + numero_rack)
    #          ::::::: SUBNETING FOR RACK NETWORKS - /19 :::::::
    # Redes p/ rack => 10.128.0.0/19, 10.128.32.0/19 , ... ,10.143.224.0/19
    subnetsRackBEipv4[numero_rack] = splitnetworkbyrack(
        CIDRBEipv4interno, prefixInternoV4, numero_rack)
    subnetsRackBEipv6[numero_rack] = splitnetworkbyrack(
        CIDRBEipv6interno, prefixInternoV6, numero_rack)
    # PODS BE => /20
    #    ::::::::::::::::::::::::::::::::::: FRONTEND
    #          ::::::: SUBNETING FOR RACK NETWORKS - /19 :::::::
    # Sumário do rack => 172.20.0.0/21
    subnetsRackFEipv4[numero_rack] = splitnetworkbyrack(
        CIDRFEipv4interno, prefixInternoFEV4, numero_rack)
    subnetsRackFEipv6[numero_rack] = splitnetworkbyrack(
        CIDRFEipv6interno, prefixInternoFEV6, numero_rack)
    #
    if CIDRBO_DSRipv4interno:
        subnetsRackBO_DSRipv4[numero_rack] = splitnetworkbyrack(
            CIDRBO_DSRipv4interno, prefixInternoBO_DSRV4, numero_rack)
        subnetsRackBO_DSRipv6[numero_rack] = splitnetworkbyrack(
            CIDRBO_DSRipv6interno, prefixInternoBO_DSRV6, numero_rack)
    #
    if CIDRBOCAAipv4interno:
        subnetsRackBOCAAipv4[numero_rack] = splitnetworkbyrack(
            CIDRBOCAAipv4interno, prefixInternoBOCAAV4, numero_rack)
        subnetsRackBOCAAipv6[numero_rack] = splitnetworkbyrack(
            CIDRBOCAAipv6interno, prefixInternoBOCAAV6, numero_rack)
    #
    if CIDRBOCABipv4interno:
        subnetsRackBOCABipv4[numero_rack] = splitnetworkbyrack(
            CIDRBOCABipv4interno, prefixInternoBOCABV4, numero_rack)
        subnetsRackBOCABipv6[numero_rack] = splitnetworkbyrack(
            CIDRBOCABipv6interno, prefixInternoBOCABV6, numero_rack)
    #          ::::::: SUBNETING EACH RACK NETWORK:::::::
    # PODS FE => 128 redes /28 ; 128 redes /64
    # redesPODSBEipv4[numero_rack] = list(subnetsRackFEipv4[numero_rack].subnet(28))
    # redesPODSBEipv6[numero_rack] = list(subnetsRackFEipv6[numero_rack].subnet(64))

    for equip, spn, j in zip(equips_sorted[:2], [0, 2], [0, 1]):
        # lf 1/2
        log.info("for equip spn j")
        variablestochangeleaf1["IPLEAFSP1IPV4"] = str(
            IPLEAFipv4[numero_rack][spn])
        variablestochangeleaf1["IPLEAFSP2IPV4"] = str(
            IPLEAFipv4[numero_rack][spn + 1])
        variablestochangeleaf1["IPIBGPIPV4"] = str(IPSIBGPipv4[numero_rack][j])
        variablestochangeleaf1["IPLEAFSP1IPV6"] = str(
            IPLEAFipv6[numero_rack][spn])
        variablestochangeleaf1["IPLEAFSP2IPV6"] = str(
            IPLEAFipv6[numero_rack][spn + 1])
        variablestochangeleaf1["IPIBGPIPV6"] = str(IPSIBGPipv6[numero_rack][j])

        variablestochangeleaf1["VLANBELEAFSP1"] = str(
            VLANBELEAF[numero_rack][spn])
        variablestochangeleaf1["VLANBELEAFSP2"] = str(
            VLANBELEAF[numero_rack][spn + 1])
        variablestochangeleaf1["VLANFELEAFSP1"] = str(
            VLANFELEAF[numero_rack][spn])
        variablestochangeleaf1["VLANFELEAFSP2"] = str(
            VLANFELEAF[numero_rack][spn + 1])
        variablestochangeleaf1["VLANBORDALEAFSP1"] = str(
            VLANBORDALEAF[numero_rack][spn])
        variablestochangeleaf1["VLANBORDALEAFSP2"] = str(
            VLANBORDALEAF[numero_rack][spn + 1])
        variablestochangeleaf1["VLANBORDACACHOSLEAFSP1"] = str(
            VLANBORDACACHOSLEAF[numero_rack][spn])
        variablestochangeleaf1["VLANBORDACACHOSLEAFSP2"] = str(
            VLANBORDACACHOSLEAF[numero_rack][spn + 1])
        variablestochangeleaf1["VLANBORDACACHOSBLEAFSP1"] = str(
            VLANBORDACACHOSBLEAF[numero_rack][spn])
        variablestochangeleaf1["VLANBORDACACHOSBLEAFSP2"] = str(
            VLANBORDACACHOSBLEAF[numero_rack][spn + 1])

        variablestochangeleaf1["ASLEAF"] = str(ASLEAF[numero_rack][0])

        variablestochangeleaf1["IPNEIGHSPINE1IPV4"] = str(
            IPSPINEipv4[numero_rack][spn])
        variablestochangeleaf1["IPNEIGHSPINE2IPV4"] = str(
            IPSPINEipv4[numero_rack][spn + 1])
        variablestochangeleaf1["IPNEIGHSPINE1IPV6"] = str(
            IPSPINEipv6[numero_rack][spn])
        variablestochangeleaf1["IPNEIGHSPINE2IPV6"] = str(
            IPSPINEipv6[numero_rack][spn + 1])

        if equip.get("nome")[-1] == "1":
            log.debug("lf-name: %s. Ip: %s" %
                      (equip.get("nome"), IPSIBGPipv4[numero_rack][1]))
            variablestochangeleaf1["IPNEIGHIBGPIPV4"] = str(
                IPSIBGPipv4[numero_rack][1])
            variablestochangeleaf1["IPNEIGHIBGPIPV6"] = str(
                IPSIBGPipv6[numero_rack][1])
        else:
            log.debug("lf-name: %s. Ip: %s" %
                      (equip.get("nome"), IPSIBGPipv4[numero_rack][0]))
            variablestochangeleaf1["IPNEIGHIBGPIPV4"] = str(
                IPSIBGPipv4[numero_rack][0])
            variablestochangeleaf1["IPNEIGHIBGPIPV6"] = str(
                IPSIBGPipv6[numero_rack][0])

        variablestochangeleaf1["NET_HOST_BE_IPV4"] = str(
            subnetsRackBEipv4[numero_rack])
        variablestochangeleaf1["NET_HOST_FE_IPV4"] = str(
            subnetsRackFEipv4[numero_rack])
        if CIDRBO_DSRipv4interno:
            variablestochangeleaf1["NET_HOST_BO_DSR_IPV4"] = str(
                subnetsRackBO_DSRipv4[numero_rack])
        if CIDRBOCAAipv4interno:
            variablestochangeleaf1["NET_HOST_BOCAA_IPV4"] = str(
                subnetsRackBOCAAipv4[numero_rack])
        if CIDRBOCABipv4interno:
            variablestochangeleaf1["NET_HOST_BOCAB_IPV4"] = str(
                subnetsRackBOCABipv4[numero_rack])
        variablestochangeleaf1["NET_SPINE1_LF_IPV4"] = str(
            subSPINE1ipv4[numero_rack])
        variablestochangeleaf1["NET_SPINE2_LF_IPV4"] = str(
            subSPINE2ipv4[numero_rack])
        variablestochangeleaf1["NET_LF_LF_IPV4"] = str(
            subIBGPToRLxLipv4[numero_rack])
        variablestochangeleaf1["NET_HOST_BE_IPV6"] = str(
            subnetsRackBEipv6[numero_rack])
        variablestochangeleaf1["NET_HOST_FE_IPV6"] = str(
            subnetsRackFEipv6[numero_rack])
        if CIDRBO_DSRipv6interno:
            variablestochangeleaf1["NET_HOST_BO_DSR_IPV6"] = str(
                subnetsRackBO_DSRipv6[numero_rack])
        if CIDRBOCAAipv6interno:
            variablestochangeleaf1["NET_HOST_BOCAA_IPV6"] = str(
                subnetsRackBOCAAipv6[numero_rack])
        if CIDRBOCABipv6interno:
            variablestochangeleaf1["NET_HOST_BOCAB_IPV6"] = str(
                subnetsRackBOCABipv6[numero_rack])
        variablestochangeleaf1["NET_SPINE1_LF_IPV6"] = str(
            subSPINE1ipv6[numero_rack])
        variablestochangeleaf1["NET_SPINE2_LF_IPV6"] = str(
            subSPINE2ipv6[numero_rack])
        variablestochangeleaf1["NET_LF_LF_IPV6"] = str(
            subIBGPToRLxLipv6[numero_rack])

        variablestochangeleaf1["ID_LEAF"] = str(equip.get("sw"))  # lf1 ou lf2
        variablestochangeleaf1["OWN_IP_MGMT"] = equip.get("ip_mngt")
        variablestochangeleaf1["LF_HOSTNAME"] = equip.get("nome")

        for i in equip.get("interfaces"):
            log.info("for i in equip")
            log.info(str(type(i.get("nome")[:3])))

            if i.get("nome")[:3] == prefixlf:
                variablestochangeleaf1["LFNEIGH_HOSTNAME"] = i.get("nome")
                variablestochangeleaf1["LFNEIGH_IP_MGMT"] = i.get("ip_mngt")
            elif i.get("nome")[:3] == prefixspn:
                spine_num = int(i.get("nome")[-1])
                variablestochangespine1["ASSPINE"] = str(BASE_AS_SPN +
                                                         spine_num - 1)
                variablestochangespine1["INTERFACE"] = i.get("interface")
                variablestochangespine1["LEAFNAME"] = equip.get("nome")
                variablestochangespine1["INT_LF_UPLINK"] = i.get(
                    "eq_interface")
                variablestochangespine1["IPSPINEIPV4"] = str(
                    IPSPINEipv4[numero_rack][spine_num - 1])
                variablestochangespine1["IPSPINEIPV6"] = str(
                    IPSPINEipv6[numero_rack][spine_num - 1])
                variablestochangespine1["VLANBELEAF"] = str(
                    VLANBELEAF[numero_rack][spine_num - 1])
                variablestochangespine1["VLANFELEAF"] = str(
                    VLANFELEAF[numero_rack][spine_num - 1])
                variablestochangespine1["VLANBORDALEAF"] = str(
                    VLANBORDALEAF[numero_rack][spine_num - 1])
                variablestochangespine1["VLANBORDACACHOSLEAF"] = str(
                    VLANBORDACACHOSLEAF[numero_rack][spine_num - 1])
                variablestochangespine1["VLANBORDACACHOSBLEAF"] = str(
                    VLANBORDACACHOSBLEAF[numero_rack][spine_num - 1])
                variablestochangespine1["ASLEAF"] = str(ASLEAF[numero_rack][0])
                variablestochangespine1["IPNEIGHLEAFIPV4"] = str(
                    IPLEAFipv4[numero_rack][spine_num - 1])
                variablestochangespine1["IPNEIGHLEAFIPV6"] = str(
                    IPLEAFipv6[numero_rack][spine_num - 1])
                if spine_num in [1, 3]:
                    variablestochangeleaf1["SP1_HOSTNAME"] = i.get("nome")
                    variablestochangeleaf1["INTERFACE_SP1"] = i.get(
                        "interface")
                    variablestochangeleaf1["ASSPINE1"] = str(BASE_AS_SPN +
                                                             spine_num - 1)
                else:
                    variablestochangeleaf1["SP2_HOSTNAME"] = i.get("nome")
                    variablestochangeleaf1["INTERFACE_SP2"] = i.get(
                        "interface")
                    variablestochangeleaf1["ASSPINE2"] = str(BASE_AS_SPN +
                                                             spine_num - 1)
                fileinspine1 = path_to_guide + i.get("roteiro")
                fileoutspine1 = path_to_add_config + i.get(
                    "nome") + "-ADD-" + rack.nome + ".cfg"
                replace(fileinspine1, fileoutspine1, variablestochangespine1)
                variablestochangespine1 = dict()
            elif i.get("nome")[:3] == prefixoob:
                variablestochangeleaf1["HOSTNAME_OOB"] = i.get("nome")
                variablestochangeleaf1["INTERFACE_OOB"] = i.get("interface")

        variablestochangeleaf1["ID_VLT"] = str(id_vlt[j])
        variablestochangeleaf1["PRIORITY_VLT"] = str(priority_vlt[j])

        fileinleaf1 = path_to_guide + equip.get("roteiro")
        fileoutleaf1 = path_to_config + equip.get("nome") + ".cfg"

        replace(fileinleaf1, fileoutleaf1, variablestochangeleaf1)
        variablestochangeleaf1 = dict()

    return True
Esempio n. 23
0
def api_foreman(rack):

    try:
        NETWORKAPI_FOREMAN_URL = get_variable("foreman_url")
        NETWORKAPI_FOREMAN_USERNAME = get_variable("foreman_username")
        NETWORKAPI_FOREMAN_PASSWORD = get_variable("foreman_password")
        FOREMAN_HOSTS_ENVIRONMENT_ID = get_variable(
            "foreman_hosts_environment_id")
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            "Erro buscando as variáveis relativas ao Foreman.")

    foreman = Foreman(
        NETWORKAPI_FOREMAN_URL,
        (NETWORKAPI_FOREMAN_USERNAME, NETWORKAPI_FOREMAN_PASSWORD),
        api_version=2)

    # for each switch, check the switch ip against foreman know networks, finds foreman hostgroup
    # based on model and brand and inserts the host in foreman
    # if host already exists, delete and recreate with new information
    for [switch, mac] in [[rack.id_sw1, rack.mac_sw1],
                          [rack.id_sw2, rack.mac_sw2],
                          [rack.id_ilo, rack.mac_ilo]]:
        # Get all foremand subnets and compare with the IP address of the switches until find it
        if mac == None:
            raise RackConfigError(
                None, rack.nome,
                ("Could not create entry for %s. There is no mac address." %
                 switch.nome))

        ip = _buscar_ip(switch.id)
        if ip == None:
            raise RackConfigError(
                None, rack.nome,
                ("Could not create entry for %s. There is no management IP." %
                 switch.nome))

        switch_cadastrado = 0
        for subnet in foreman.subnets.index()['results']:
            network = IPNetwork(ip + '/' + subnet['mask']).network
            # check if switches ip network is the same as subnet['subnet']['network'] e subnet['subnet']['mask']
            if network.__str__() == subnet['network']:
                subnet_id = subnet['id']
                hosts = foreman.hosts.index(search=switch.nome)['results']
                if len(hosts) == 1:
                    foreman.hosts.destroy(id=hosts[0]['id'])
                elif len(hosts) > 1:
                    raise RackConfigError(None, rack.nome, (
                        "Could not create entry for %s. There are multiple entries "
                        "with the sam name." % switch.nome))

                # Lookup foreman hostgroup
                # By definition, hostgroup should be Marca+"_"+Modelo
                hostgroup_name = switch.modelo.marca.nome + "_" + switch.modelo.nome
                hostgroups = foreman.hostgroups.index(search=hostgroup_name)
                if len(hostgroups['results']) == 0:
                    raise RackConfigError(
                        None, rack.nome,
                        "Could not create entry for %s. Could not find hostgroup %s "
                        "in foreman." % (switch.nome, hostgroup_name))
                elif len(hostgroups['results']) > 1:
                    raise RackConfigError(
                        None, rack.nome,
                        "Could not create entry for %s. Multiple hostgroups %s found"
                        " in Foreman." % (switch.nome, hostgroup_name))
                else:
                    hostgroup_id = hostgroups['results'][0]['id']

                host = foreman.hosts.create(
                    host={
                        'name': switch.nome,
                        'ip': ip,
                        'mac': mac,
                        'environment_id': FOREMAN_HOSTS_ENVIRONMENT_ID,
                        'hostgroup_id': hostgroup_id,
                        'subnet_id': subnet_id,
                        'build': 'true',
                        'overwrite': 'true'
                    })
                switch_cadastrado = 1

        if not switch_cadastrado:
            raise RackConfigError(
                None, rack.nome,
                "Unknown error. Could not create entry for %s in foreman." %
                switch.nome)
    def handle_delete(self, request, user, *args, **kwargs):
        """Treat requests POST to delete Rack.

        URL: rack/id_rack/
        """
        try:
            self.log.info('Delete Rack')

            # User permission
            if not has_perm(user, AdminPermission.SCRIPT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            rack_id = kwargs.get('id_rack')
            rack = Rack()
            rack = rack.get_by_pk(rack_id)

            # Mover os arquivos de configuracao que foram gerados
            try:
                LEAF = get_variable('leaf')
                OOB = get_variable('oob')
                SPN = get_variable('spn')
                FORMATO = get_variable('formato')
                PATH_TO_CONFIG = get_variable('path_to_config')
                PATH_TO_MV = get_variable('path_to_mv')
            except ObjectDoesNotExist:
                raise var_exceptions.VariableDoesNotExistException(
                    'Erro buscando as variáveis <LEAF,OOB,SPN> ou FORMATO ou PATH_TO_<MV,CONFIG>.'
                )

            try:
                for i in range(1, 3):
                    nome_lf = LEAF + '-' + rack.nome + '-0' + str(i) + FORMATO
                    nome_lf_b = PATH_TO_CONFIG + nome_lf
                    nome_lf_a = PATH_TO_MV + nome_lf
                    shutil.move(nome_lf_b, nome_lf_a)
                    nome_oob = OOB + '-0' + \
                        str(i) + '-ADD-' + rack.nome + FORMATO
                    nome_oob_b = PATH_TO_CONFIG + nome_oob
                    nome_oob_a = PATH_TO_MV + nome_oob
                    shutil.move(nome_oob_b, nome_oob_a)
                for i in range(1, 5):
                    nome_spn = SPN + '-0' + \
                        str(i) + '-ADD-' + rack.nome + FORMATO
                    nome_spn_b = PATH_TO_CONFIG + nome_spn
                    nome_spn_a = PATH_TO_MV + nome_spn
                    shutil.move(nome_spn_b, nome_spn_a)

                nome_oob = OOB + '-' + rack.nome + '-01' + FORMATO
                nome_oob_b = PATH_TO_CONFIG + nome_oob
                nome_oob_a = PATH_TO_MV + nome_oob
                shutil.move(nome_oob_b, nome_oob_a)
            except:
                pass

            # Remover as Vlans, redes e ambientes
            try:
                desativar_vlan_rede(user, rack)
                lista_amb = remover_ambiente_rack(user, rack)
                remover_ambiente(user, lista_amb, rack)
                remover_vlan_so(user, rack)
            except:
                raise RackError(
                    None, u'Failed to remove the Vlans and Environments.')

            # Remove rack config from spines and core oob
            # aplicar(rack)

            # Remove Rack

            with distributedlock(LOCK_RACK % rack_id):
                try:
                    rack.delete()
                except RackNumberNotFoundError, e:
                    raise e
                except Exception, e:
                    self.log.error(u'Failed to remove the Rack.')
                    raise RackError(e, u'Failed to remove the Rack.')
Esempio n. 25
0
    try:
        # CIDR sala 01 => 10.128.0.0/12
        CIDRBE[0] = IPNetwork(get_variable('cidr_be_v4'))
        CIDREBGP[0] = IPNetwork(get_variable('cidr_be_v6'))
        SPINE1ipv4 = IPNetwork(get_variable('net_spn01'))
        SPINE2ipv4 = IPNetwork(get_variable('net_spn02'))
        SPINE3ipv4 = IPNetwork(get_variable('net_spn03'))
        SPINE4ipv4 = IPNetwork(get_variable('net_spn04'))
        SPINE1ipv6 = IPNetwork(get_variable('net_spn01_v6'))
        SPINE2ipv6 = IPNetwork(get_variable('net_spn02_v6'))
        SPINE3ipv6 = IPNetwork(get_variable('net_spn03_v6'))
        SPINE4ipv6 = IPNetwork(get_variable('net_spn04_v6'))
    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável CIDR<BE,EBGP> ou <BE,FE,BORDA,CACHOS> ou SPINE<1,2,3,4>ipv6.'
        )

    subSPINE1ipv4 = list(SPINE1ipv4.subnet(31))
    subSPINE2ipv4 = list(SPINE2ipv4.subnet(31))
    subSPINE3ipv4 = list(SPINE3ipv4.subnet(31))
    subSPINE4ipv4 = list(SPINE4ipv4.subnet(31))
    subSPINE1ipv6 = list(SPINE1ipv6.subnet(127))
    subSPINE2ipv6 = list(SPINE2ipv6.subnet(127))
    subSPINE3ipv6 = list(SPINE3ipv6.subnet(127))
    subSPINE4ipv6 = list(SPINE4ipv6.subnet(127))

    try:
        IBGPToRLxLipv4 = IPNetwork(get_variable('ibgptorlxlip_v4'))
        IBGPToRLxLipv6 = IPNetwork(get_variable('ibgptorlxlip_v6'))
    except ObjectDoesNotExist, exception:
Esempio n. 26
0
def autoprovision_splf(rack, FILEINLF1, FILEINLF2, FILEINSP1, FILEINSP2,
                       FILEINSP3, FILEINSP4, name_lf1, name_lf2, name_oob,
                       name_sp1, name_sp2, name_sp3, name_sp4, ip_mgmtlf1,
                       ip_mgmtlf2, int_oob_mgmtlf1, int_oob_mgmtlf2, int_sp1,
                       int_sp2, int_sp3, int_sp4, int_lf1_sp1, int_lf1_sp2,
                       int_lf2_sp3, int_lf2_sp4):

    # STRUCTURE: IPSPINE[rack][spine]: ip a configurar no spine 'spine' relativo à leaf do rack 'rack'
    # STRUCTURE: IPLEAF[rack][spine]: ip a configurar no leaf do rack 'rack' relativo ao spine 'spine'

    CIDREBGP = {}
    CIDRBE = {}
    IPSPINEipv4 = {}
    IPSPINEipv6 = {}
    IPLEAFipv4 = {}
    IPLEAFipv6 = {}
    IPSIBGPipv4 = {}
    IPSIBGPipv6 = {}
    ASLEAF = {}
    #
    VLANBELEAF = {}
    VLANFELEAF = {}
    VLANBORDALEAF = {}
    VLANBORDACACHOSLEAF = {}
    #
    PODSBEipv4 = {}
    redesPODSBEipv4 = {}
    #
    subnetsRackBEipv4 = {}
    #
    PODSBEipv6 = {}
    redesPODSBEipv6 = {}
    PODSBEFEipv6 = {}
    redesPODSBEFEipv6 = {}
    PODSBEBOipv6 = {}
    redesPODSBEBOipv6 = {}
    PODSBECAipv6 = {}
    redesPODSBECAipv6 = {}
    redesHostsipv6 = {}
    redeHostsBEipv6 = {}
    redeHostsFEipv6 = {}
    redeHostsBOipv6 = {}
    redeHostsCAipv6 = {}
    redeHostsFILERipv6 = {}
    subnetsRackBEipv6 = {}
    subnetsRackFEipv4 = {}
    redesPODSFEipv4 = {}
    subnetsRackFEipv6 = {}
    redesPODSFEipv6 = {}
    #
    IPSPINEipv4[rack] = []
    IPSPINEipv6[rack] = []
    IPLEAFipv4[rack] = []
    IPLEAFipv6[rack] = []
    IPSIBGPipv4[rack] = []
    IPSIBGPipv6[rack] = []
    VLANBELEAF[rack] = []
    VLANFELEAF[rack] = []
    VLANBORDALEAF[rack] = []
    VLANBORDACACHOSLEAF[rack] = []
    ASLEAF[rack] = []
    #
    PODSBEipv4[rack] = []
    redesPODSBEipv4[rack] = []
    #
    subnetsRackBEipv4[rack] = []
    #
    PODSBEipv6[rack] = []
    redesPODSBEipv6[rack] = []
    PODSBEFEipv6[rack] = []
    redesPODSBEFEipv6[rack] = []
    PODSBEBOipv6[rack] = []
    redesPODSBEBOipv6[rack] = []
    PODSBECAipv6[rack] = []
    redesPODSBECAipv6[rack] = []
    redesHostsipv6[rack] = []
    redeHostsBEipv6[rack] = []
    redeHostsFEipv6[rack] = []
    redeHostsBOipv6[rack] = []
    redeHostsCAipv6[rack] = []
    redeHostsFILERipv6[rack] = []
    subnetsRackBEipv6[rack] = []
    subnetsRackFEipv4[rack] = []
    redesPODSFEipv4[rack] = []
    subnetsRackFEipv6[rack] = []
    redesPODSFEipv6[rack] = []

    CIDRFEipv4 = {}
    CIDRFEipv6 = {}

    variablestochangespine1 = {}
    variablestochangespine2 = {}
    variablestochangespine3 = {}
    variablestochangespine4 = {}
    variablestochangeleaf1 = {}
    variablestochangeleaf2 = {}

    try:
        fileinleaf1 = get_variable("path_to_guide") + FILEINLF1
        fileinleaf2 = get_variable("path_to_guide") + FILEINLF2
        fileinspine1 = get_variable("path_to_guide") + FILEINSP1
        fileinspine2 = get_variable("path_to_guide") + FILEINSP2
        fileinspine3 = get_variable("path_to_guide") + FILEINSP3
        fileinspine4 = get_variable("path_to_guide") + FILEINSP4
        ###
        BASE_RACK = int(get_variable("base_rack"))
        BASE_AS = int(get_variable("base_as"))
        VLANBE = int(get_variable("vlanbe"))
        VLANFE = int(get_variable("vlanfe"))
        VLANBORDA = int(get_variable("vlanborda"))
        VLANBORDACACHOS = int(get_variable("vlanbordacachos"))
        ###

    except ObjectDoesNotExist, exception:
        log.error(exception)
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando a variável PATH_TO_GUIDE ou BASE_<RACK,AS> ou VLAN<BE,FE,BORDA,CACHOS>.'
        )
Esempio n. 27
0
def gera_config(rack):

    id_core1 = None
    id_core2 = None
    name_sp1 = None
    name_sp2 = None
    name_sp3 = None
    name_sp4 = None
    name_core1 = None
    name_core2 = None
    int_sp1 = None
    int_sp2 = None
    int_sp3 = None
    int_sp4 = None
    int_lf1_sp1 = None
    int_lf1_sp2 = None
    int_lf2_sp3 = None
    int_lf2_sp4 = None
    int_oob_mgmtlf1 = None
    int_oob_mgmtlf2 = None
    int_oob_core1 = None
    int_oob_core2 = None
    int_core1_oob = None
    int_core2_oob = None
    prefix_spine = 'SPN'
    prefix_oob = 'OOB'

    # Equipamentos
    num_rack = rack.numero
    try:
        id_lf1 = rack.id_sw1.id
        name_lf1 = rack.id_sw1.nome
        id_lf2 = rack.id_sw2.id
        name_lf2 = rack.id_sw2.nome
        id_oob = rack.id_ilo.id
        name_oob = rack.id_ilo.nome
    except:
        raise RackConfigError(None, rack.nome, 'Erro: Rack incompleto.')

    # Interface leaf01
    try:
        interfaces = Interface.search(id_lf1)
        for interface in interfaces:
            try:
                sw = interface.get_switch_and_router_interface_from_host_interface(
                    None)
                if sw.equipamento.nome.split('-')[0] == prefix_spine:
                    if sw.equipamento.nome.split('-')[2] == '01' or sw.equipamento.nome.split('-')[2] == '1':
                        int_lf1_sp1 = interface.interface
                        name_sp1 = sw.equipamento.nome
                        id_sp1 = sw.equipamento.id
                        int_sp1 = sw.interface
                    elif sw.equipamento.nome.split('-')[2] == '02' or sw.equipamento.nome.split('-')[2] == '2':
                        int_lf1_sp2 = interface.interface
                        name_sp2 = sw.equipamento.nome
                        id_sp2 = sw.equipamento.id
                        int_sp2 = sw.interface
                elif sw.equipamento.nome.split('-')[0] == prefix_oob:
                    int_oob_mgmtlf1 = sw.interface
            except:
                pass
    except InterfaceNotFoundError:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar as interfaces associadas ao Leaf 01.')

    if int_sp1 is None or int_sp2 is None or int_oob_mgmtlf1 is None:
        raise RackConfigError(
            None, rack.nome, 'Erro: As interfaces do Leaf01 nao foram cadastradas.')

    # Interface leaf02
    try:
        interfaces1 = Interface.search(id_lf2)
        for interface1 in interfaces1:
            try:
                sw = interface1.get_switch_and_router_interface_from_host_interface(
                    None)
                if sw.equipamento.nome.split('-')[0] == prefix_spine:
                    if sw.equipamento.nome.split('-')[2] == '03' or sw.equipamento.nome.split('-')[2] == '3':
                        int_lf2_sp3 = interface1.interface
                        name_sp3 = sw.equipamento.nome
                        id_sp3 = sw.equipamento.id
                        int_sp3 = sw.interface
                    elif sw.equipamento.nome.split('-')[2] == '04' or sw.equipamento.nome.split('-')[2] == '4':
                        int_lf2_sp4 = interface1.interface
                        name_sp4 = sw.equipamento.nome
                        id_sp4 = sw.equipamento.id
                        int_sp4 = sw.interface
                elif sw.equipamento.nome.split('-')[0] == prefix_oob:
                    int_oob_mgmtlf2 = sw.interface
            except:
                pass
    except InterfaceNotFoundError:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar as interfaces associadas ao Leaf 02.')

    if int_sp3 is None or int_sp4 is None or int_oob_mgmtlf2 is None:
        raise RackConfigError(
            None, rack.nome, 'Erro: As interfaces do Leaf02 nao foram cadastradas.')

    # Interface OOB
    try:
        interfaces2 = Interface.search(id_oob)
        for interface2 in interfaces2:
            try:
                sw = interface2.get_switch_and_router_interface_from_host_interface(
                    None)
                if sw.equipamento.nome.split('-')[0] == prefix_oob:
                    if sw.equipamento.nome.split('-')[2] == '01' or sw.equipamento.nome.split('-')[2] == '1':
                        int_oob_core1 = interface2.interface
                        name_core1 = sw.equipamento.nome
                        int_core1_oob = sw.interface
                        id_core1 = sw.equipamento.id
                    elif sw.equipamento.nome.split('-')[2] == '02' or sw.equipamento.nome.split('-')[2] == '2':
                        int_oob_core2 = interface2.interface
                        name_core2 = sw.equipamento.nome
                        int_core2_oob = sw.interface
                        id_core2 = sw.equipamento.id
            except:
                pass
    except InterfaceNotFoundError:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar as interfaces associadas ao Switch de gerencia.')

    if int_oob_core1 is None or int_core1_oob is None or int_oob_core2 is None or int_core2_oob is None:
        raise RackConfigError(
            None, rack.nome, 'Erro: As interfaces do Switch de gerencia nao foram cadastradas.')

    # Roteiro LF01
    try:
        FILEINLF1 = buscar_roteiro(id_lf1, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Leaf 01.')

    # Roteiro LF02
    try:
        FILEINLF2 = buscar_roteiro(id_lf2, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Leaf 02.')

    # Roteiro SPN01
    try:
        FILEINSP1 = buscar_roteiro(id_sp1, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Spine 01.')

    # Roteiro SPN02
    try:
        FILEINSP2 = buscar_roteiro(id_sp2, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Spine 02.')

    # Roteiro SPN03
    try:
        FILEINSP3 = buscar_roteiro(id_sp3, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Spine 03.')

    # Roteiro SPN04
    try:
        FILEINSP4 = buscar_roteiro(id_sp4, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Spine 04.')

    # Roteiro Core 01
    try:
        FILEINCR1 = buscar_roteiro(id_core1, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Core 01.')

    # Roteiro Core 02
    try:
        FILEINCR2 = buscar_roteiro(id_core2, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do Core 02.')

    # Roteiro OOB
    try:
        FILEINOOB = buscar_roteiro(id_oob, 'CONFIGURACAO')
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o roteiro do switch de gerencia.')

    # Ip LF01
    try:
        ip_mgmtlf1 = buscar_ip(id_lf1)
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o ip de gerencia do leaf 01.')

    # Ip LF02
    try:
        ip_mgmtlf2 = buscar_ip(id_lf2)
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o ip de gerencia do leaf 02.')

    # Ip OOB
    try:
        ip_mgmtoob = buscar_ip(id_oob)
    except:
        raise RackConfigError(
            None, rack.nome, 'Erro ao buscar o ip de gerencia do oob.')

    try:
        NETWORKAPI_USE_FOREMAN = int(get_variable('use_foreman'))
        NETWORKAPI_FOREMAN_URL = get_variable('foreman_url')
        NETWORKAPI_FOREMAN_USERNAME = get_variable('foreman_username')
        NETWORKAPI_FOREMAN_PASSWORD = get_variable('foreman_password')
        FOREMAN_HOSTS_ENVIRONMENT_ID = get_variable(
            'foreman_hosts_environment_id')
    except ObjectDoesNotExist:
        raise var_exceptions.VariableDoesNotExistException(
            'Erro buscando as variáveis relativas ao Foreman.')

    # begin - Create Foreman entries for rack switches
    if NETWORKAPI_USE_FOREMAN:
        foreman = Foreman(NETWORKAPI_FOREMAN_URL, (NETWORKAPI_FOREMAN_USERNAME,
                                                   NETWORKAPI_FOREMAN_PASSWORD), api_version=2)

        # for each switch, check the switch ip against foreman know networks, finds foreman hostgroup
        # based on model and brand and inserts the host in foreman
        # if host already exists, delete and recreate with new information
        for [switch, mac] in [[rack.id_sw1, rack.mac_sw1], [rack.id_sw2, rack.mac_sw2], [rack.id_ilo, rack.mac_ilo]]:
            # Get all foremand subnets and compare with the IP address of the
            # switches until find it
            if mac is None:
                raise RackConfigError(
                    None, rack.nome, ('Could not create entry for %s. There is no mac address.' % (switch.nome)))

            ip = buscar_ip(switch.id)
            if ip is None:
                raise RackConfigError(
                    None, rack.nome, ('Could not create entry for %s. There is no management IP.' % (switch.nome)))

            switch_cadastrado = 0
            for subnet in foreman.subnets.index()['results']:
                network = IPNetwork(ip + '/' + subnet['mask']).network
                # check if switches ip network is the same as
                # subnet['subnet']['network'] e subnet['subnet']['mask']
                if network.__str__() == subnet['network']:
                    subnet_id = subnet['id']
                    hosts = foreman.hosts.index(search=switch.nome)['results']
                    if len(hosts) == 1:
                        foreman.hosts.destroy(id=hosts[0]['id'])
                    elif len(hosts) > 1:
                        raise RackConfigError(
                            None, rack.nome, ('Could not create entry for %s. There are multiple entries with the sam name.' % (switch.nome)))

                    # Lookup foreman hostgroup
                    # By definition, hostgroup should be Marca+"_"+Modelo
                    hostgroup_name = switch.modelo.marca.nome + '_' + switch.modelo.nome
                    hostgroups = foreman.hostgroups.index(
                        search=hostgroup_name)
                    if len(hostgroups['results']) == 0:
                        raise RackConfigError(None, rack.nome, 'Could not create entry for %s. Could not find hostgroup %s in foreman.' % (
                            switch.nome, hostgroup_name))
                    elif len(hostgroups['results']) > 1:
                        raise RackConfigError(None, rack.nome, 'Could not create entry for %s. Multiple hostgroups %s found in Foreman.' % (
                            switch.nome, hostgroup_name))
                    else:
                        hostgroup_id = hostgroups['results'][0]['id']

                    host = foreman.hosts.create(host={'name': switch.nome, 'ip': ip, 'mac': mac, 'environment_id': FOREMAN_HOSTS_ENVIRONMENT_ID,
                                                      'hostgroup_id': hostgroup_id, 'subnet_id': subnet_id, 'build': 'true', 'overwrite': 'true'})
                    switch_cadastrado = 1

            if not switch_cadastrado:
                raise RackConfigError(None, rack.nome, "Unknown error. Could not create entry for %s in foreman." % (switch.nome))
    #end - Create Foreman entries for rack switches
    var1 = autoprovision_splf(num_rack, FILEINLF1, FILEINLF2, FILEINSP1, FILEINSP2, FILEINSP3, FILEINSP4,
                              name_lf1, name_lf2, name_oob, name_sp1, name_sp2, name_sp3, name_sp4,
                              ip_mgmtlf1, ip_mgmtlf2,
                              int_oob_mgmtlf1, int_oob_mgmtlf2, int_sp1, int_sp2, int_sp3, int_sp4, int_lf1_sp1,
                              int_lf1_sp2, int_lf2_sp3, int_lf2_sp4)

    var2 = autoprovision_coreoob(num_rack, FILEINCR1, FILEINCR2, FILEINOOB,
                                 name_core1, name_core2, name_oob, name_lf1, name_lf2,
                                 ip_mgmtoob, int_oob_core1, int_oob_core2, int_core1_oob, int_core2_oob )


    if var1 and var2:
        return True

    return False
Esempio n. 28
0
            map = dict()
            map['sucesso'] = success_map

            return self.response(dumps_networkapi(map))

        except RackConfigError, e:
            return self.response_error(382, e.param, e.value)

        except UserNotAuthorizedError:
            return self.not_authorized()

        except RackNumberNotFoundError:
            return self.response_error(379, rack_id)

        except RackError:
            return self.response_error(382)

        except InterfaceNotFoundError:
            return self.response_error(141)

        except ObjectDoesNotExist, exception:
            self.log.error(exception)
            raise var_exceptions.VariableDoesNotExistException()

        except ForemanException, e:
            self.log.error('Error acessing Foreman Server %s' % str(e))
            return self.response_error(391, str(e))

        except RequestException, e:
            return self.response_error(391, e)
Esempio n. 29
0
                            if not equip.maintenance:
                                (erro, result) = commands.getstatusoutput("/usr/bin/backuper -T acl -b %s -e -i %s -w 300" % (rel_filename, equipment_name))
                                if erro:
                                    raise exceptions.RackAplError()
                        except exceptions.RackAplError, e:
                            raise e
                        except:
                            #Error equipment not found, do nothing
                            pass

            datas = dict()
            success_map = dict()

            success_map['rack_conf'] = True
            datas['sucesso'] = success_map

            return Response(datas, status=status.HTTP_201_CREATED)

        except exceptions.RackAplError, exception:
            log.exception(exception)
            raise exceptions.RackAplError("Falha ao aplicar as configuracoes: %s" %(result))
        except exceptions.RackNumberNotFoundError, exception:
            log.exception(exception)
            raise exceptions.RackNumberNotFoundError()
        except var_exceptions.VariableDoesNotExistException, exception:
            log.error(exception)
            raise var_exceptions.VariableDoesNotExistException("Erro buscando a variável PATH_TO_ADD_CONFIG ou REL_PATH_TO_ADD_CONFIG.")
        except Exception, exception:
            log.exception(exception)
            raise api_exceptions.NetworkAPIException(exception)
Esempio n. 30
0
def get_by_id(variable_id):
    try:
        var = Variable.objects.filter(id=variable_id).uniqueResult()
    except ObjectDoesNotExist:
        raise exceptions.VariableDoesNotExistException()
    return var