def delete_rack(rack_id): rack_obj = Rack() rack = rack_obj.get_rack(idt=rack_id) error_vlans = list() error_envs = list() envs_ids = models_env.Ambiente.objects.filter( dcroom=rack.dcroom.id, grupo_l3__nome=str(rack.nome)).values_list('id', flat=True) log.debug("rack envs. Qtd: %s - Envs: %s" % (str(len(envs_ids)), str(envs_ids))) vlans_ids = models_vlan.Vlan.objects.filter( nome__icontains=rack.nome).values_list('id', flat=True) log.debug("rack vlan. Qtd: %s - VLans: %s" % (str(len(vlans_ids)), str(vlans_ids))) for idt in vlans_ids: try: facade_vlan_v3.delete_vlan(idt) except (models_vlan.VlanError, models_vlan.VlanErrorV3, ValidationAPIException, ObjectDoesNotExistException, Exception, NetworkAPIException), e: error_vlans.append({'vlan_id': idt, 'error': e})
def rack_environments_vlans(rack_id, user): log.info("Rack Environments") rack = Rack().get_rack(idt=rack_id) if rack.create_vlan_amb: raise Exception("Os ambientes e Vlans já foram alocados.") # spine x leaf _create_spnlfenv(user, rack) _create_spnlfvlans(rack, user) # leaf x leaf _create_lflf_vlans(rack, user) # producao/cloud _create_prod_envs(rack, user) _create_prod_vlans(rack, user) # redes de gerencia OOB _create_oobvlans(rack, user) rack.__dict__.update(id=rack.id, create_vlan_amb=True) rack.save() return rack
def handle_get(self, request, user, *args, **kwargs): """Handles GET requests to find all Racks URLs: /rack/find/ """ self.log.info('Find all Racks') try: # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() nome = kwargs.get('rack_name') rack = Rack() rack = rack.get_by_name(nome) rack = model_to_dict(rack) return self.response(dumps_networkapi({'rack': rack})) except UserNotAuthorizedError: return self.not_authorized() except RackError: return self.response_error(379)
def update_rack(rack_id, rack): try: rack_obj = Rack() rack_obj = rack_obj.get_rack(idt=rack_id) rack_obj.nome = rack.get("name") rack_obj.numero = rack.get("number") rack_obj.mac_sw1 = rack.get("mac_sw1") rack_obj.mac_sw2 = rack.get("mac_sw2") rack_obj.mac_ilo = rack.get("mac_ilo") rack_obj.id_sw1 = Equipamento().get_by_pk(int(rack.get("id_sw1"))) rack_obj.id_sw2 = Equipamento().get_by_pk(int(rack.get("id_sw2"))) rack_obj.id_ilo = Equipamento().get_by_pk(int(rack.get("id_ilo"))) rack_obj.dcroom = DatacenterRooms().get_dcrooms(idt=rack.get('fabric_id')) if rack.get('fabric_id') \ else None rack_obj.save() return rack_obj except (exceptions.RackNumberDuplicatedValueError, exceptions.RackNameDuplicatedError, exceptions.InvalidInputException) as e: log.exception(e) raise Exception(e) except Exception, e: log.exception(e) raise Exception(e)
def save_rack(user, rack_dict): rack = Rack() rack.numero = rack_dict.get('number') rack.mac_sw1 = rack_dict.get('sw1_mac') rack.mac_sw2 = rack_dict.get('sw2_mac') rack.mac_ilo = rack_dict.get('sw3_mac') id_sw1 = rack_dict.get('sw1_id') id_sw2 = rack_dict.get('sw2_id') id_sw3 = rack_dict.get('sw3_id') if not rack_dict.get('name'): raise exceptions.InvalidInputException( "O nome do Rack não foi informado.") elif rack_dict.get('name') is not 0: rack.nome = rack_dict.get('name') try: Rack.objects.get(numero__iexact=rack.numero) raise exceptions.RackNumberDuplicatedValueError() except ObjectDoesNotExist: pass try: Rack.objects.get(nome__iexact=rack.nome) raise exceptions.RackNameDuplicatedError() except ObjectDoesNotExist: pass if id_sw1 is not None: try: rack.id_sw1 = Equipamento.get_by_pk(int(id_sw1)) except: raise exceptions.InvalidInputException( "O Leaf de id %s não existe." % id_sw1) if id_sw2 is not None: try: rack.id_sw2 = Equipamento.get_by_pk(int(id_sw2)) except: raise exceptions.InvalidInputException( "O Leaf de id %s não existe." % id_sw2) if id_sw3 is not None: try: rack.id_ilo = Equipamento.get_by_pk(int(id_sw3)) except: raise exceptions.InvalidInputException( "O OOB de id %s não existe." % id_sw3) rack.save(user) return rack
def save_rack_dc(rack_dict): rack = Rack() rack.nome = rack_dict.get('name') rack.numero = rack_dict.get('number') rack.mac_sw1 = rack_dict.get('mac_sw1') rack.mac_sw2 = rack_dict.get('mac_sw2') rack.mac_ilo = rack_dict.get('mac_ilo') rack.id_sw1 = Equipamento().get_by_pk(rack_dict.get('id_sw1')) rack.id_sw2 = Equipamento().get_by_pk(rack_dict.get('id_sw2')) rack.id_sw3 = Equipamento().get_by_pk(rack_dict.get('id_ilo')) rack.dcroom = DatacenterRooms().get_dcrooms( idt=rack_dict.get('fabric_id')) if rack_dict.get('fabric_id') else None if not rack.nome: raise exceptions.InvalidInputException( "O nome do Rack não foi informado.") rack.save_rack() return rack
def get_rack(fabric_id=None, rack_id=None): rack_obj = Rack() try: if fabric_id: rack = rack_obj.get_rack(dcroom_id=fabric_id) rack_list = rack_serializers.RackSerializer( rack, many=True).data if rack else list() elif rack_id: rack = rack_obj.get_rack(idt=rack_id) rack_list = [rack_serializers.RackSerializer(rack).data ] if rack else list() else: rack = rack_obj.get_rack() rack_list = rack_serializers.RackSerializer( rack, many=True).data if rack else list() return rack_list except (ObjectDoesNotExist, Exception), e: raise Exception(e)
def save_rack(rack_dict): rack = Rack() rack.nome = rack_dict.get('name') rack.numero = rack_dict.get('number') rack.mac_sw1 = rack_dict.get('sw1_mac') rack.mac_sw2 = rack_dict.get('sw2_mac') rack.mac_ilo = rack_dict.get('sw3_mac') id_sw1 = rack_dict.get('sw1_id') id_sw2 = rack_dict.get('sw2_id') id_sw3 = rack_dict.get('sw3_id') if not rack.nome: raise exceptions.InvalidInputException( "O nome do Rack não foi informado.") if Rack.objects.filter(nome__iexact=rack.nome): raise exceptions.RackNameDuplicatedError() if Rack.objects.filter(numero__iexact=rack.numero): raise exceptions.RackNumberDuplicatedValueError() if not id_sw1: raise exceptions.InvalidInputException("O Leaf de id %s não existe." % id_sw1) if not id_sw2: raise exceptions.InvalidInputException("O Leaf de id %s não existe." % id_sw2) if not id_sw3: raise exceptions.InvalidInputException("O OOB de id %s não existe." % id_sw3) rack.id_sw1 = Equipamento.get_by_pk(int(id_sw1)) rack.id_sw2 = Equipamento.get_by_pk(int(id_sw2)) rack.id_ilo = Equipamento.get_by_pk(int(id_sw3)) rack.save() return rack
def gerar_arquivo_config(ids): log.debug("gerar_arquivo_config") for id in ids: rack = Rack().get_rack(idt=id) equips = list() lf1 = dict() lf2 = dict() oob = dict() # Equipamentos try: nome_rack = rack.nome.upper() lf1["sw"] = 1 lf1["id"] = rack.id_sw1.id lf1["nome"] = rack.id_sw1.nome lf1["mac"] = rack.mac_sw1 lf1["marca"] = rack.id_sw1.modelo.marca.nome lf1["modelo"] = rack.id_sw1.modelo.nome equips.append(lf1) lf2["sw"] = 2 lf2["id"] = rack.id_sw2.id lf2["nome"] = rack.id_sw2.nome lf2["mac"] = rack.mac_sw2 lf2["marca"] = rack.id_sw2.modelo.marca.nome lf2["modelo"] = rack.id_sw2.modelo.nome equips.append(lf2) oob["sw"] = 3 oob["id"] = rack.id_ilo.id oob["nome"] = rack.id_ilo.nome oob["mac"] = rack.mac_ilo oob["marca"] = rack.id_ilo.modelo.marca.nome oob["modelo"] = rack.id_ilo.modelo.nome equips.append(oob) dcname = rack.dcroom.dc.dcname except: raise Exception( "Erro: Informações incompletas. Verifique o cadastro do Datacenter, do Fabric e do Rack" ) dcsigla = "".join([c[0] for c in dcname.split(" ") ]) if len(dcname.split(" ")) >= 2 else dcname[:3] prefixspn = "SPN" prefixlf = "LF-" prefixoob = "OOB" # Interface e Roteiro for equip in equips: try: interfaces = Interface.search(equip.get("id")) equip["interfaces"] = list() for interface in interfaces: dic = dict() try: sw = interface.get_switch_and_router_interface_from_host_interface( None) if sw.equipamento.nome[:3] in [ prefixlf, prefixoob, prefixspn ]: dic["nome"] = sw.equipamento.nome dic["id"] = sw.equipamento.id dic["ip_mngt"] = _buscar_ip(sw.equipamento.id) dic["interface"] = sw.interface dic["eq_interface"] = interface.interface dic["roteiro"] = _buscar_roteiro( sw.equipamento.id, "CONFIGURACAO") equip["interfaces"].append(dic) except: pass except: raise Exception( "Erro ao buscar o roteiro de configuracao ou as interfaces associadas ao equipamento: " "%s." % equip.get("nome")) try: equip["roteiro"] = _buscar_roteiro(equip.get("id"), "CONFIGURACAO") equip["ip_mngt"] = _buscar_ip(equip.get("id")) except: raise Exception( "Erro ao buscar os roteiros do equipamento: %s" % equip.get("nome")) autoprovision.autoprovision_splf(rack, equips) autoprovision.autoprovision_coreoob(rack, equips) return True
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.')
def __init__(self, user, rack_id): self.rack = Rack().get_by_pk(rack_id) self.user = user
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to edit Rack. URL: rack/edit/ """ try: self.log.info("Edit Rack") # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) # Load XML data xml_map, attrs_map = loads(request.raw_post_data) # XML data format networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'There is no value to the networkapi tag of XML request.' ) rack_map = networkapi_map.get('rack') if rack_map is None: return self.response_error( 3, u'There is no value to the rack tag of XML request.') # Get XML data id_rack = rack_map.get('id_rack') number = rack_map.get('number') name = rack_map.get('name') mac_address_sw1 = rack_map.get('mac_address_sw1') mac_address_sw2 = rack_map.get('mac_address_sw2') mac_address_ilo = rack_map.get('mac_address_ilo') id_sw1 = rack_map.get('id_sw1') id_sw2 = rack_map.get('id_sw2') id_ilo = rack_map.get('id_ilo') racks = Rack() with distributedlock(LOCK_RACK % id_rack): racks.__dict__.update(id=id_rack, nome=name, numero=number, mac_sw1=mac_address_sw1, mac_sw2=mac_address_sw2, mac_ilo=mac_address_ilo) if not id_sw1 == None: id_sw1 = int(id_sw1) racks.id_sw1 = Equipamento.get_by_pk(id_sw1) if not id_sw2 == None: id_sw2 = int(id_sw2) racks.id_sw2 = Equipamento.get_by_pk(id_sw2) if not id_ilo == None: id_ilo = int(id_ilo) racks.id_ilo = Equipamento.get_by_pk(id_ilo) # save racks.save() rack_map = dict() rack_map['rack'] = model_to_dict(racks) return self.response(dumps_networkapi(rack_map)) except InvalidValueError, e: return self.response_error(369, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to create the configuration file. URL: rack/alocar-config/id_rack """ try: # 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) # Validar configuracao if not rack.config: raise RackAplError( None, rack.nome, 'Os arquivos de configuracao devem ser gerados antes.') if rack.create_vlan_amb: raise RackAplError( None, rack.nome, 'As vlans, redes e ambientes ja foram criados.') # variaveis name_core1, name_core2 = get_core_name(rack) environment_list = [] variablestochangecore1 = {} variablestochangecore2 = {} variablestochangecore1 = dic_vlan_core(variablestochangecore1, rack.numero, name_core1, rack.nome) variablestochangecore2 = dic_vlan_core(variablestochangecore2, rack.numero, name_core2, rack.nome) # VLAN Gerencia SO ambientes = dict() try: DIVISAODC_MGMT = get_variable('divisaodc_mngt') AMBLOG_MGMT = get_variable('amblog_mngt') GRPL3_MGMT = get_variable('grpl3_mngt') except ObjectDoesNotExist: raise var_exceptions.VariableDoesNotExistException( 'Erro buscando as variáveis <DIVISAODC,AMBLOG,GRPL3>_MGMT.' ) ambientes['DC'] = DIVISAODC_MGMT ambientes['LOG'] = AMBLOG_MGMT ambientes['L3'] = GRPL3_MGMT try: # criar vlan vlan = criar_vlan(user, variablestochangecore1, ambientes) except: raise RackAplError(None, rack.nome, 'Erro ao criar a VLAN_SO.') try: # criar rede network = criar_rede(user, 'Rede invalida equipamentos', variablestochangecore1, vlan) except: raise RackAplError(None, rack.nome, 'Erro ao criar a rede da VLAN_SO') try: # inserir os Core inserir_equip(user, variablestochangecore1, network.id) inserir_equip(user, variablestochangecore2, network.id) except: raise RackAplError(None, rack.nome, 'Erro ao inserir o core 1 e 2') # Ambientes # BE - SPINE - LEAF try: environment_list = ambiente_spn_lf(user, rack, environment_list) except: raise RackAplError( None, rack.nome, 'Erro ao criar os ambientes e alocar as vlans do Spine-leaf.' ) # BE - PRODUCAO try: environment_list = ambiente_prod(user, rack, environment_list) except ObjectDoesNotExist, e: raise var_exceptions.VariableDoesNotExistException(e) except: raise RackAplError(None, rack.nome, 'Erro ao criar os ambientes de produção.') # BE - Hosts - CLOUD try: environment_list = ambiente_cloud(user, rack, environment_list) except: raise RackAplError( None, rack.nome, 'Erro ao criar os ambientes e alocar as vlans da Cloud.') # FE try: environment_list = ambiente_prod_fe(user, rack, environment_list) except ObjectDoesNotExist, e: raise var_exceptions.VariableDoesNotExistException(e)
def __init__(self, user, rack_id): self.rack = Rack().get_by_pk(rack_id) self.user = user self.dcroom_config = self._get_config_file() self.rack_asn = self._get_rack_asn()
def __init__(self, rack_id): self.rack = Rack().get_by_pk(rack_id) self.spine_prefix = "SPN" self.leaf_prefix = "LF-" self.oob_prefix = "OOB"