def handle_delete(self, request, user, *args, **kwargs): """Treat requests DELETE to remove Group l3. URL: groupl3/<id_groupl3>/ """ try: self.log.info('Remove Group l3') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_groupl3 = kwargs.get('id_groupl3') # Valid ID Group L3 if not is_valid_int_greater_zero_param(id_groupl3): self.log.error( u'The id_groupl3 parameter is not a valid value: %s.', id_groupl3) raise InvalidValueError(None, 'id_groupl3', id_groupl3) # Find GroupL3 by ID to check if it exist groupl3 = GrupoL3.get_by_pk(id_groupl3) with distributedlock(LOCK_GROUP_L3 % id_groupl3): try: if groupl3.ambiente_set.count() > 0: raise GrupoL3UsedByEnvironmentError( None, u'O GrupoL3 %s tem ambiente associado.' % groupl3.id) # remove Group l3 groupl3.delete() except GrupoL3UsedByEnvironmentError, e: raise e except Exception, e: self.log.error(u'Failed to remove the Group l3.') raise GrupoError(e, u'Failed to remove the Group l3.')
def handle_put(self, request, user, *args, **kwargs): """Trata requisições PUT para alterar um Ambiente. URL: ambiente/<id_ambiente>/ """ try: environment_id = kwargs.get('id_ambiente') if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The environment_id parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) environment_map = networkapi_map.get('ambiente') if environment_map is None: return self.response_error( 3, u'Não existe valor para a tag ambiente do XML de requisição.' ) l3_group_id = environment_map.get('id_grupo_l3') if not is_valid_int_greater_zero_param(l3_group_id): self.log.error( u'The l3_group_id parameter is not a valid value: %s.', l3_group_id) raise InvalidValueError(None, 'l3_group_id', l3_group_id) else: l3_group_id = int(l3_group_id) GrupoL3.get_by_pk(l3_group_id) logic_environment_id = environment_map.get('id_ambiente_logico') if not is_valid_int_greater_zero_param(logic_environment_id): self.log.error( u'The logic_environment_id parameter is not a valid value: %s.', logic_environment_id) raise InvalidValueError(None, 'logic_environment_id', logic_environment_id) else: logic_environment_id = int(logic_environment_id) AmbienteLogico.get_by_pk(logic_environment_id) dc_division_id = environment_map.get('id_divisao') if not is_valid_int_greater_zero_param(dc_division_id): self.log.error( u'The dc_division_id parameter is not a valid value: %s.', dc_division_id) raise InvalidValueError(None, 'dc_division_id', dc_division_id) else: dc_division_id = int(dc_division_id) DivisaoDc.get_by_pk(dc_division_id) link = environment_map.get('link') if not is_valid_string_maxsize(link, 200, False): self.log.error(u'Parameter link is invalid. Value: %s', link) raise InvalidValueError(None, 'link', link) vrf = environment_map.get('vrf') if not is_valid_string_maxsize(link, 100, False): self.log.error(u'Parameter vrf is invalid. Value: %s', vrf) raise InvalidValueError(None, 'vrf', vrf) filter_id = environment_map.get('id_filter') if filter_id is not None: if not is_valid_int_greater_zero_param(filter_id): self.log.error( u'Parameter filter_id is invalid. Value: %s.', filter_id) raise InvalidValueError(None, 'filter_id', filter_id) filter_id = int(filter_id) # Filter must exist Filter.get_by_pk(filter_id) acl_path = environment_map.get('acl_path') if not is_valid_string_maxsize(acl_path, 250, False): self.log.error(u'Parameter acl_path is invalid. Value: %s', acl_path) raise InvalidValueError(None, 'acl_path', acl_path) ipv4_template = environment_map.get('ipv4_template') if not is_valid_string_maxsize(ipv4_template, 250, False): self.log.error( u'Parameter ipv4_template is invalid. Value: %s', ipv4_template) raise InvalidValueError(None, 'ipv4_template', ipv4_template) ipv6_template = environment_map.get('ipv6_template') if not is_valid_string_maxsize(ipv6_template, 250, False): self.log.error( u'Parameter ipv6_template is invalid. Value: %s', ipv6_template) raise InvalidValueError(None, 'ipv6_template', ipv6_template) max_num_vlan_1 = environment_map.get('max_num_vlan_1') min_num_vlan_1 = environment_map.get('min_num_vlan_1') max_num_vlan_2 = environment_map.get('max_num_vlan_2') min_num_vlan_2 = environment_map.get('min_num_vlan_2') # validate max_num_vlan_1 and min_num_vlan_1 if (max_num_vlan_1 is not None and min_num_vlan_1 is None) or ( min_num_vlan_1 is not None and max_num_vlan_1 is None): self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError(None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 is not None and min_num_vlan_1 is not None: max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_1 < 1 or min_num_vlan_1 < 1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 <= min_num_vlan_1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) else: max_num_vlan_1 = max_num_vlan_2 min_num_vlan_1 = min_num_vlan_2 # validate max_num_vlan_1 and min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 if (max_num_vlan_2 is not None and min_num_vlan_2 is None) or ( min_num_vlan_2 is not None and max_num_vlan_2 is None): self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError(None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 is not None and min_num_vlan_2 is not None: max_num_vlan_2 = int(max_num_vlan_2) min_num_vlan_2 = int(min_num_vlan_2) max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_2 < 1 or min_num_vlan_2 < 1: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 <= min_num_vlan_2: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) else: max_num_vlan_2 = max_num_vlan_1 min_num_vlan_2 = min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 with distributedlock(LOCK_ENVIRONMENT % environment_id): # Delete vlan's cache key_list_db = Vlan.objects.filter(ambiente__pk=environment_id) key_list = [] for key in key_list_db: key_list.append(key.id) destroy_cache_function(key_list) # Destroy equipment's cache equip_id_list = [] envr = Ambiente.get_by_pk(environment_id) for equipment in envr.equipamentoambiente_set.all(): equip_id_list.append(equipment.equipamento_id) destroy_cache_function(equip_id_list, True) Ambiente.update(user, environment_id, grupo_l3_id=l3_group_id, ambiente_logico_id=logic_environment_id, divisao_dc_id=dc_division_id, filter_id=filter_id, link=link, vrf=vrf, acl_path=fix_acl_path(acl_path), ipv4_template=ipv4_template, ipv6_template=ipv6_template, max_num_vlan_1=max_num_vlan_1, min_num_vlan_1=min_num_vlan_1, max_num_vlan_2=max_num_vlan_2, min_num_vlan_2=min_num_vlan_2) return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Trata requisições PUT para alterar um Ambiente. URL: ambiente/<id_ambiente>/ """ try: environment_id = kwargs.get('id_ambiente') if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The environment_id parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'Não existe valor para a tag networkapi do XML de requisição.') environment_map = networkapi_map.get('ambiente') if environment_map is None: return self.response_error(3, u'Não existe valor para a tag ambiente do XML de requisição.') l3_group_id = environment_map.get('id_grupo_l3') if not is_valid_int_greater_zero_param(l3_group_id): self.log.error( u'The l3_group_id parameter is not a valid value: %s.', l3_group_id) raise InvalidValueError(None, 'l3_group_id', l3_group_id) else: l3_group_id = int(l3_group_id) GrupoL3.get_by_pk(l3_group_id) logic_environment_id = environment_map.get('id_ambiente_logico') if not is_valid_int_greater_zero_param(logic_environment_id): self.log.error( u'The logic_environment_id parameter is not a valid value: %s.', logic_environment_id) raise InvalidValueError( None, 'logic_environment_id', logic_environment_id) else: logic_environment_id = int(logic_environment_id) AmbienteLogico.get_by_pk(logic_environment_id) dc_division_id = environment_map.get('id_divisao') if not is_valid_int_greater_zero_param(dc_division_id): self.log.error( u'The dc_division_id parameter is not a valid value: %s.', dc_division_id) raise InvalidValueError(None, 'dc_division_id', dc_division_id) else: dc_division_id = int(dc_division_id) DivisaoDc.get_by_pk(dc_division_id) link = environment_map.get('link') if not is_valid_string_maxsize(link, 200, False): self.log.error(u'Parameter link is invalid. Value: %s', link) raise InvalidValueError(None, 'link', link) vrf = environment_map.get('vrf') if not is_valid_string_maxsize(link, 100, False): self.log.error(u'Parameter vrf is invalid. Value: %s', vrf) raise InvalidValueError(None, 'vrf', vrf) filter_id = environment_map.get('id_filter') if filter_id is not None: if not is_valid_int_greater_zero_param(filter_id): self.log.error( u'Parameter filter_id is invalid. Value: %s.', filter_id) raise InvalidValueError(None, 'filter_id', filter_id) filter_id = int(filter_id) # Filter must exist Filter.get_by_pk(filter_id) acl_path = environment_map.get('acl_path') if not is_valid_string_maxsize(acl_path, 250, False): self.log.error( u'Parameter acl_path is invalid. Value: %s', acl_path) raise InvalidValueError(None, 'acl_path', acl_path) ipv4_template = environment_map.get('ipv4_template') if not is_valid_string_maxsize(ipv4_template, 250, False): self.log.error( u'Parameter ipv4_template is invalid. Value: %s', ipv4_template) raise InvalidValueError(None, 'ipv4_template', ipv4_template) ipv6_template = environment_map.get('ipv6_template') if not is_valid_string_maxsize(ipv6_template, 250, False): self.log.error( u'Parameter ipv6_template is invalid. Value: %s', ipv6_template) raise InvalidValueError(None, 'ipv6_template', ipv6_template) max_num_vlan_1 = environment_map.get('max_num_vlan_1') min_num_vlan_1 = environment_map.get('min_num_vlan_1') max_num_vlan_2 = environment_map.get('max_num_vlan_2') min_num_vlan_2 = environment_map.get('min_num_vlan_2') # validate max_num_vlan_1 and min_num_vlan_1 if (max_num_vlan_1 is not None and min_num_vlan_1 is None) or (min_num_vlan_1 is not None and max_num_vlan_1 is None): self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 is not None and min_num_vlan_1 is not None: max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_1 < 1 or min_num_vlan_1 < 1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 <= min_num_vlan_1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) else: max_num_vlan_1 = max_num_vlan_2 min_num_vlan_1 = min_num_vlan_2 # validate max_num_vlan_1 and min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 if (max_num_vlan_2 is not None and min_num_vlan_2 is None) or (min_num_vlan_2 is not None and max_num_vlan_2 is None): self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 is not None and min_num_vlan_2 is not None: max_num_vlan_2 = int(max_num_vlan_2) min_num_vlan_2 = int(min_num_vlan_2) max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_2 < 1 or min_num_vlan_2 < 1: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 <= min_num_vlan_2: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) else: max_num_vlan_2 = max_num_vlan_1 min_num_vlan_2 = min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 with distributedlock(LOCK_ENVIRONMENT % environment_id): # Delete vlan's cache key_list_db = Vlan.objects.filter(ambiente__pk=environment_id) key_list = [] for key in key_list_db: key_list.append(key.id) destroy_cache_function(key_list) # Destroy equipment's cache equip_id_list = [] envr = Ambiente.get_by_pk(environment_id) for equipment in envr.equipamentoambiente_set.all(): equip_id_list.append(equipment.equipamento_id) destroy_cache_function(equip_id_list, True) Ambiente.update(user, environment_id, grupo_l3_id=l3_group_id, ambiente_logico_id=logic_environment_id, divisao_dc_id=dc_division_id, filter_id=filter_id, link=link, vrf=vrf, acl_path=fix_acl_path(acl_path), ipv4_template=ipv4_template, ipv6_template=ipv6_template, max_num_vlan_1=max_num_vlan_1, min_num_vlan_1=min_num_vlan_1, max_num_vlan_2=max_num_vlan_2, min_num_vlan_2=min_num_vlan_2) return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Group l3. URL: groupl3/<id_groupl3>/ """ try: self.log.info('Edit Group l3') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_groupl3 = kwargs.get('id_groupl3') # 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.') group_l3_map = networkapi_map.get('group_l3') if group_l3_map is None: return self.response_error(3, u'There is no value to the group_l3 tag of XML request.') # Get XML data name = group_l3_map.get('name') # Valid ID Group L3 if not is_valid_int_greater_zero_param(id_groupl3): self.log.error( u'The id_groupl3 parameter is not a valid value: %s.', id_groupl3) raise InvalidValueError(None, 'id_groupl3', id_groupl3) # Valid name if not is_valid_string_minsize(name, 2) or not is_valid_string_maxsize(name, 80): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Find GroupL3 by ID to check if it exist groupl3 = GrupoL3.get_by_pk(id_groupl3) with distributedlock(LOCK_GROUP_L3 % id_groupl3): try: if groupl3.nome.lower() != name.lower(): GrupoL3.get_by_name(name) raise GrupoL3NameDuplicatedError( None, u'Já existe um grupo l3 com o valor name %s.' % name) except GroupL3NotFoundError: pass # set variables groupl3.nome = name try: # update Group l3 groupl3.save() except Exception, e: self.log.error(u'Failed to update the Group l3.') raise AmbienteError(e, u'Failed to update the Group l3.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Group l3. URL: groupl3/<id_groupl3>/ """ try: self.log.info('Edit Group l3') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_groupl3 = kwargs.get('id_groupl3') # 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.' ) group_l3_map = networkapi_map.get('group_l3') if group_l3_map is None: return self.response_error( 3, u'There is no value to the group_l3 tag of XML request.') # Get XML data name = group_l3_map.get('name') # Valid ID Group L3 if not is_valid_int_greater_zero_param(id_groupl3): self.log.error( u'The id_groupl3 parameter is not a valid value: %s.', id_groupl3) raise InvalidValueError(None, 'id_groupl3', id_groupl3) # Valid name if not is_valid_string_minsize( name, 2) or not is_valid_string_maxsize(name, 80): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Find GroupL3 by ID to check if it exist groupl3 = GrupoL3.get_by_pk(id_groupl3) with distributedlock(LOCK_GROUP_L3 % id_groupl3): try: if groupl3.nome.lower() != name.lower(): GrupoL3.get_by_name(name) raise GrupoL3NameDuplicatedError( None, u'Já existe um grupo l3 com o valor name %s.' % name) except GroupL3NotFoundError: pass # set variables groupl3.nome = name try: # update Group l3 groupl3.save() except Exception, e: self.log.error(u'Failed to update the Group l3.') raise AmbienteError(e, u'Failed to update the Group l3.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)