コード例 #1
0
    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.')
コード例 #2
0
    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.')
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)