def leaf_leaf_envs_save(self): log.debug("_create_lflf_envs") env_lf = models_env.Ambiente.objects.filter( dcroom=int(self.rack.dcroom.id), grupo_l3__nome=str(self.rack.dcroom.name), ambiente_logico__nome="LEAF-LEAF") log.debug("Leaf-leaf environments: " + str(env_lf)) try: id_l3 = models_env.GrupoL3().get_by_name(self.rack.nome).id except: l3_dict = models_env.GrupoL3() l3_dict.nome = self.rack.nome l3_dict.save() id_l3 = l3_dict.id pass for env in env_lf: config_subnet = [] for net in env.configs: cidr = list( IPNetwork(net.network).subnet(int( net.subnet_mask)))[self.rack.numero] network = { 'network': str(cidr), 'ip_version': str(net.ip_version), 'network_type': int(net.id_network_type.id), 'subnet_mask': int(net.subnet_mask) } config_subnet.append(network) obj = { 'grupo_l3': id_l3, 'ambiente_logico': env.ambiente_logico.id, 'divisao_dc': env.divisao_dc.id, 'acl_path': env.acl_path, 'ipv4_template': env.ipv4_template, 'ipv6_template': env.ipv6_template, 'link': env.link, 'min_num_vlan_2': env.min_num_vlan_1, 'max_num_vlan_2': env.max_num_vlan_1, 'min_num_vlan_1': env.min_num_vlan_1, 'max_num_vlan_1': env.max_num_vlan_1, 'vrf': env.vrf, 'father_environment': env.id, 'default_vrf': env.default_vrf.id, 'configs': config_subnet, 'fabric_id': self.rack.dcroom.id } environment = facade_env.create_environment(obj) log.debug("Environment object: %s" % str(environment))
def _create_prod_envs(rack, user): log.debug("_create_prod_envs") prod_envs = models_env.Ambiente.objects.filter( dcroom=int(rack.dcroom.id), father_environment__isnull=True, grupo_l3__nome=str(rack.dcroom.name), ambiente_logico__nome="PRODUCAO").exclude(divisao_dc__nome="BO_DMZ") log.debug(str(prod_envs)) try: id_grupo_l3 = models_env.GrupoL3().get_by_name(rack.nome).id except: grupo_l3_dict = models_env.GrupoL3() grupo_l3_dict.nome = rack.nome grupo_l3_dict.save() id_grupo_l3 = grupo_l3_dict.id pass if rack.dcroom.config: fabricconfig = rack.dcroom.config log.debug(str(type(fabricconfig))) else: log.debug("sem configuracoes do fabric %s" % str(rack.dcroom.id)) fabricconfig = list() 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 environment = list() for env in prod_envs: father_id = env.id for fab in fabricconfig.get("Ambiente"): if int(fab.get("id")) == int(father_id): details = fab.get("details") config_subnet = list() for net in env.configs: log.debug(str(net.ip_config.subnet)) log.debug(str(type(net.ip_config.subnet))) cidr = IPNetwork(str(net.ip_config.subnet)) prefix = int(net.ip_config.new_prefix) bloco = list(cidr.subnet(int(prefix)))[int(rack.numero)] log.debug(str(details)) if details[0].get(str(net.ip_config.type)): log.debug("if") new_prefix = details[0].get(str( net.ip_config.type)).get("new_prefix") else: new_prefix = 31 if net.ip_config.type == "v4" else 127 network = { 'subnet': str(bloco), 'type': net.ip_config.type, 'network_type': net.ip_config.network_type.id, 'new_prefix': new_prefix } config_subnet.append(network) obj = { 'grupo_l3': id_grupo_l3, 'ambiente_logico': env.ambiente_logico.id, 'divisao_dc': env.divisao_dc.id, 'acl_path': env.acl_path, 'ipv4_template': env.ipv4_template, 'ipv6_template': env.ipv6_template, 'link': env.link, 'min_num_vlan_2': env.min_num_vlan_1, 'max_num_vlan_2': env.max_num_vlan_1, 'min_num_vlan_1': env.min_num_vlan_1, 'max_num_vlan_1': env.max_num_vlan_1, 'vrf': env.vrf, 'father_environment': father_id, 'default_vrf': env.default_vrf.id, 'configs': config_subnet, 'fabric_id': rack.dcroom.id } environment.append(facade_env.create_environment(obj)) log.debug("Environment object: %s" % str(environment)) return environment
def _create_spnlfenv(rack): log.debug("_create_spnlfenv") envfathers = models_env.Ambiente.objects.filter( dcroom=int(rack.dcroom.id), father_environment__isnull=True, grupo_l3__nome=str(rack.dcroom.name), ambiente_logico__nome="SPINES") log.debug(str(envfathers)) environment_spn_lf_list = list() spines = int(rack.dcroom.spines) fabric = rack.dcroom.name try: id_grupo_l3 = models_env.GrupoL3().get_by_name(fabric).id except: grupo_l3_dict = models_env.GrupoL3() grupo_l3_dict.nome = fabric grupo_l3_dict.save() id_grupo_l3 = grupo_l3_dict.id pass for env in envfathers: config_subnet = list() for net in env.configs: # verificar se o ambiente possui range associado. cidr = IPNetwork(net.ip_config.subnet) prefix = int(net.ip_config.new_prefix) network = { 'cidr': list(cidr.subnet(prefix)), 'type': net.ip_config.type, 'network_type': net.ip_config.network_type.id } config_subnet.append(network) for spn in range(spines): amb_log_name = "SPINE0" + str(spn + 1) + "LEAF" try: id_amb_log = models_env.AmbienteLogico().get_by_name( amb_log_name).id except: amb_log_dict = models_env.AmbienteLogico() amb_log_dict.nome = amb_log_name amb_log_dict.save() id_amb_log = amb_log_dict.id pass config = list() for sub in config_subnet: config_spn = { 'subnet': str(sub.get("cidr")[spn]), 'new_prefix': str(31) if str(sub.get("type"))[-1] is "4" else str(127), 'type': str(sub.get("type")), 'network_type': sub.get("network_type") } config.append(config_spn) obj = { 'grupo_l3': id_grupo_l3, 'ambiente_logico': id_amb_log, 'divisao_dc': env.divisao_dc.id, 'acl_path': env.acl_path, 'ipv4_template': env.ipv4_template, 'ipv6_template': env.ipv6_template, 'link': env.link, 'min_num_vlan_2': env.min_num_vlan_2, 'max_num_vlan_2': env.max_num_vlan_2, 'min_num_vlan_1': env.min_num_vlan_1, 'max_num_vlan_1': env.max_num_vlan_1, 'vrf': env.vrf, 'father_environment': env.id, 'default_vrf': env.default_vrf.id, 'configs': config, 'fabric_id': rack.dcroom.id } try: environment_spn_lf = facade_env.create_environment(obj) environment_spn_lf_list.append(environment_spn_lf) except: log.debug("Environment object: %s" % str(obj)) return environment_spn_lf_list
def _create_prod_envs(rack, user): log.debug("_create_prod_envs") prod_envs = models_env.Ambiente.objects.filter( dcroom=int(rack.dcroom.id), grupo_l3__nome=str(rack.dcroom.name), ambiente_logico__nome="PRODUCAO").exclude(divisao_dc__nome="BO_DMZ") log.debug("PROD environments: " + str(prod_envs)) try: id_grupo_l3 = models_env.GrupoL3().get_by_name(rack.nome).id except: grupo_l3_dict = models_env.GrupoL3() grupo_l3_dict.nome = rack.nome grupo_l3_dict.save() id_grupo_l3 = grupo_l3_dict.id pass if rack.dcroom.config: fabricconfig = rack.dcroom.config else: log.debug("sem configuracoes do fabric %s" % str(rack.dcroom.id)) fabricconfig = list() try: fabricconfig = json.loads(fabricconfig) except: pass try: fabricconfig = ast.literal_eval(fabricconfig) log.debug("config -ast: %s" % str(fabricconfig)) except: pass environment = [] for env in prod_envs: father_id = env.id details = None for fab in fabricconfig.get("Ambiente"): if int(fab.get("id")) == int(father_id): details = fab.get("details") config_subnet = [] for net in env.configs: cidr = IPNetwork(str(net.network)) prefix = int(net.subnet_mask) subnet_list = list(cidr.subnet(int(prefix))) try: bloco = subnet_list[int(rack.numero)] except IndexError: msg = "Rack number %d is greater than the maximum number of " \ "subnets available with prefix %d from %s subnet" % \ (rack.numero, prefix, cidr) raise Exception(msg) if isinstance(details, list) and len(details) > 0: if details[0].get(str(net.ip_version)): new_prefix = details[0].get(str( net.ip_version)).get("new_prefix") else: new_prefix = 31 if net.ip_version == "v4" else 127 network = { 'network': str(bloco), 'ip_version': net.ip_version, 'network_type': net.id_network_type.id, 'subnet_mask': new_prefix } config_subnet.append(network) obj = { 'grupo_l3': id_grupo_l3, 'ambiente_logico': env.ambiente_logico.id, 'divisao_dc': env.divisao_dc.id, 'acl_path': env.acl_path, 'ipv4_template': env.ipv4_template, 'ipv6_template': env.ipv6_template, 'link': env.link, 'min_num_vlan_2': env.min_num_vlan_1, 'max_num_vlan_2': env.max_num_vlan_1, 'min_num_vlan_1': env.min_num_vlan_1, 'max_num_vlan_1': env.max_num_vlan_1, 'vrf': env.vrf, 'father_environment': father_id, 'default_vrf': env.default_vrf.id, 'configs': config_subnet, 'fabric_id': rack.dcroom.id } obj_env = facade_env.create_environment(obj) environment.append(obj_env) log.debug("Environment object: %s" % str(obj_env)) for switch in [rack.id_sw1, rack.id_sw2]: try: equipamento_ambiente = EquipamentoAmbiente() equipamento_ambiente.ambiente = obj_env equipamento_ambiente.equipamento = switch equipamento_ambiente.is_router = True equipamento_ambiente.create(user) except EquipamentoAmbienteDuplicatedError: pass return environment
def prod_environment_save(self): log.debug("_create_prod_envs") prod_envs = models_env.Ambiente.objects.filter( dcroom=int(self.rack.dcroom.id), grupo_l3__nome=str(self.rack.dcroom.name), ambiente_logico__nome="PRODUCAO").exclude( divisao_dc__nome="BO_DMZ") log.debug("PROD environments: " + str(prod_envs)) try: id_grupo_l3 = models_env.GrupoL3().get_by_name(self.rack.nome).id except: grupo_l3_dict = models_env.GrupoL3() grupo_l3_dict.nome = self.rack.nome grupo_l3_dict.save() id_grupo_l3 = grupo_l3_dict.id pass if self.rack.dcroom.config: fabricconfig = self.rack.dcroom.config else: log.debug("sem configuracoes do fabric %s" % str(self.rack.dcroom.id)) fabricconfig = list() try: fabricconfig = json.loads(fabricconfig) except: pass try: fabricconfig = ast.literal_eval(fabricconfig) log.debug("config -ast: %s" % str(fabricconfig)) except: pass environment = list() for env in prod_envs: details = None for fab in fabricconfig.get("Ambiente"): if int(fab.get("id")) == env.id: details = fab.get("details") config_subnet = list() for net in env.configs: if isinstance(details, list) and len(details) > 0: if details[0].get(str(net.ip_version)): new_prefix = details[0].get(str( net.ip_version)).get("new_prefix") else: new_prefix = 27 if net.ip_version == "v4" else 64 network = { 'ip_version': net.ip_version, 'network_type': net.id_network_type.id, 'subnet_mask': new_prefix } config_subnet.append(network) obj = { 'grupo_l3': id_grupo_l3, 'ambiente_logico': env.ambiente_logico.id, 'divisao_dc': env.divisao_dc.id, 'acl_path': env.acl_path, 'ipv4_template': env.ipv4_template, 'ipv6_template': env.ipv6_template, 'link': env.link, 'min_num_vlan_2': env.min_num_vlan_1, 'max_num_vlan_2': env.max_num_vlan_1, 'min_num_vlan_1': env.min_num_vlan_1, 'max_num_vlan_1': env.max_num_vlan_1, 'vrf': env.vrf, 'father_environment': env.id, 'default_vrf': env.default_vrf.id, 'configs': config_subnet, 'fabric_id': self.rack.dcroom.id } obj_env = facade_env.create_environment(obj) environment.append(obj_env) log.debug("Environment Prod. object: %s" % str(obj_env)) for switch in [self.rack.id_sw1, self.rack.id_sw2]: try: equipamento_ambiente = EquipamentoAmbiente() equipamento_ambiente.ambiente = obj_env equipamento_ambiente.equipamento = switch equipamento_ambiente.is_router = True equipamento_ambiente.create(self.user) except EquipamentoAmbienteDuplicatedError: pass return environment