def create(self, validated_data): check_obj(User, {'username': validated_data.get('login')}, 'USER_NOT_FOUND') try: return UserProfile.objects.create(**validated_data) except IntegrityError: raise AdcmApiEx("USER_CONFLICT") from None
def create(self, validated_data): try: cluster = check_obj(Cluster, self.context.get('cluster_id')) prototype = check_obj(Prototype, validated_data['prototype_id']) return add_service_to_cluster(cluster, prototype) except IntegrityError: raise AdcmEx('SERVICE_CONFLICT') from None
def get_obj(self, cluster_id, hs_id): cluster = check_obj(Cluster, cluster_id) self.check_hc_perm('view_host_components_of', 'cluster', cluster, 'view_hostcomponent') return check_obj(HostComponent, { 'id': hs_id, 'cluster': cluster }, 'HOSTSERVICE_NOT_FOUND')
def get(self, request, host_id, **kwargs): # pylint: disable=arguments-differ) host = check_obj(Host, host_id) if 'cluster_id' in kwargs: cluster = check_obj(Cluster, kwargs['cluster_id']) check_host(host, cluster) serial_class = self.select_serializer(request) serializer = serial_class(host, context={'request': request}) return Response(serializer.data)
def create(self, validated_data): cluster = check_obj(Cluster, validated_data.get('cluster_id'), "CLUSTER_NOT_FOUND") host = check_obj(Host, validated_data.get('id'), "HOST_NOT_FOUND") try: cm.api.add_host_to_cluster(cluster, host) except AdcmEx as e: raise AdcmApiEx(e.code, e.msg, e.http_code) from e return host
def delete(self, request, name): """ Remove group role """ group = check_obj(Group, {'name': name}, 'GROUP_NOT_FOUND') serializer = self.serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) role = check_obj(Role, {'id': serializer.data['role_id']}, 'ROLE_NOT_FOUND') safe_api(cm.api.remove_group_role, (group, role)) return Response(status=status.HTTP_204_NO_CONTENT)
def delete(self, request, username): """ Remove user role """ user = check_obj(User, {'username': username}, 'USER_NOT_FOUND') serializer = self.serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) role = check_obj(Role, {'id': serializer.data['role_id']}, 'ROLE_NOT_FOUND') safe_api(cm.api.remove_user_role, (user, role)) return Response(status=status.HTTP_204_NO_CONTENT)
def get_obj(self, service_id, bind_id): service = check_obj(ClusterObject, service_id, 'SERVICE_NOT_FOUND') try: cluster = service.cluster except models.ObjectDoesNotExist: AdcmApiEx('CLUSTER_NOT_FOUND') return check_obj(ClusterBind, { 'cluster': cluster, 'id': bind_id }, 'BIND_NOT_FOUND')
def get(self, request, cluster_id, service_id): # pylint: disable=arguments-differ """ List all imports avaliable for specified service in cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') service = check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') res = cm.api.get_import(cluster, service) return Response(res)
def get_obj(self, cluster_id, service_id, bind_id): cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') if service_id: check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') return check_obj(ClusterBind, { 'cluster': cluster, 'id': bind_id }, 'BIND_NOT_FOUND')
def delete(self, request, username): """ Remove user from group """ user = check_obj(User, {'username': username}, 'USER_NOT_FOUND') serializer = self.serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) group = check_obj( Group, {'name': serializer.data['name']}, 'GROUP_NOT_FOUND' ) group.user_set.remove(user) return Response(status=status.HTTP_204_NO_CONTENT)
def create(self, validated_data): try: cluster = check_obj(Cluster, {'id': validated_data['cluster_id']}, 'CLUSTER_NOT_FOUND') prototype = check_obj(Prototype, {'id': validated_data['prototype_id']}, 'PROTOTYPE_NOT_FOUND') return add_service_to_cluster(cluster, prototype) except IntegrityError: raise AdcmApiEx('SERVICE_CONFLICT') from None except AdcmEx as e: raise AdcmApiEx(e.code, e.msg, e.http_code) from e
def get_obj_conf(cluster_id, service_id): cluster = check_obj(Cluster, cluster_id) if service_id: co = check_obj(ClusterObject, {'cluster': cluster, 'id': service_id}) obj = co else: obj = cluster if not obj: raise AdcmEx('CONFIG_NOT_FOUND', "this object has no config") if not obj.config: raise AdcmEx('CONFIG_NOT_FOUND', "this object has no config") return obj
def get(self, request, *args, **kwargs): """ List all hosts """ queryset = self.get_queryset() if 'cluster_id' in kwargs: # List cluster hosts cluster = check_obj(Cluster, kwargs['cluster_id']) queryset = self.get_queryset().filter(cluster=cluster) if 'provider_id' in kwargs: # List provider hosts provider = check_obj(HostProvider, kwargs['provider_id']) queryset = self.get_queryset().filter(provider=provider) return self.get_page(self.filter_queryset(queryset), request)
def get(self, request, cluster_id, service_id): # pylint: disable=arguments-differ """ Show componets of service in a specified cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') co = check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') obj = self.filter_queryset(self.get_queryset().filter(cluster=cluster, service=co)) return self.get_page(obj, request)
def get(self, request, service_id, component_id): """ Show specified component of service """ service = check_obj(ClusterObject, {'id': service_id}, 'SERVICE_NOT_FOUND') service_component = check_obj(ServiceComponent, { 'id': component_id, 'service': service }, 'COMPONENT_NOT_FOUND') serializer = self.serializer_class(service_component, context={'request': request}) return Response(serializer.data)
def post(self, request, cluster_id, service_id): """ Bind two services """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') service = check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') serializer = self.get_serializer_class()(data=request.data, context={ 'request': request }) return create(serializer, cluster=cluster, service=service)
def delete(self, request, cluster_id, service_id): """ Remove service from cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') service = check_obj(ClusterObject, { 'id': service_id, 'cluster': cluster }, 'SERVICE_NOT_FOUND') try: cm.api.delete_service(service) except AdcmEx as e: raise AdcmApiEx(e.code, e.msg, e.http_code) from e return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) if serializer.is_valid(raise_exception=True): validated_data = serializer.validated_data if 'cluster_id' in kwargs: cluster = check_obj(Cluster, kwargs['cluster_id']) host = check_obj(Host, validated_data.get('id')) self.check_host_perm('map_host_to', 'cluster', cluster) add_host_to_cluster(cluster, host) return Response(self.get_serializer(host).data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request, cluster_id): # pylint: disable=arguments-differ """ List all imports avaliable for specified cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') res = cm.api.get_import(cluster) return Response(res)
def post(self, request, *args, **kwargs): """ Add service to cluster """ serializer_class = self.serializer_class if 'cluster_id' in kwargs: serializer_class = self.serializer_class_cluster cluster = check_obj(Cluster, kwargs['cluster_id']) else: cluster = check_obj(Cluster, request.data['cluster_id']) self.check_service_perm('add_service_to', 'cluster', cluster) serializer = serializer_class( data=request.data, context={'request': request, 'cluster_id': kwargs.get('cluster_id', None)}, ) return create(serializer)
def get(self, request, job_id): """ Show job """ job = check_obj(JobLog, job_id, 'JOB_NOT_FOUND') job.log_dir = os.path.join(config.RUN_DIR, f'{job_id}') logs = get_log(job) for lg in logs: log_id = lg['id'] lg['url'] = reverse('log-storage', kwargs={ 'job_id': job.id, 'log_id': log_id }, request=request) lg['download_url'] = reverse('download-log', kwargs={ 'job_id': job.id, 'log_id': log_id }, request=request) job.log_files = logs serializer = self.serializer_class(job, data=request.data, context={'request': request}) serializer.is_valid() return Response(serializer.data)
def get(self, request, action_id): """ Show action """ obj = check_obj(Action, action_id, 'ACTION_NOT_FOUND') serializer = self.serializer_class(obj, context={'request': request}) return Response(serializer.data)
def get(self, request, cluster_id, service_id, component_id): """ Show specified componet of service in a specified cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') co = check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') obj = check_obj(ServiceComponent, { 'cluster': cluster, 'service': co, 'id': component_id }, 'COMPONENT_NOT_FOUND') serializer = self.serializer_class(obj, context={'request': request}) return Response(serializer.data)
def get(self, request, cluster_id, service_id): # pylint: disable=arguments-differ """ Show service in a specified cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') service = check_obj(ClusterObject, { 'id': service_id, 'cluster': cluster }, 'SERVICE_NOT_FOUND') serial_class = self.select_serializer(request) serializer = serial_class(service, context={ 'request': request, 'cluster_id': cluster_id }) return Response(serializer.data)
def get(self, request, cluster_id): # pylint: disable=arguments-differ """ List all services of a specified cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') obj = self.filter_queryset(self.get_queryset().filter(cluster=cluster)) return self.get_page(obj, request, {'cluster_id': cluster_id})
def delete(self, request, provider_id): # pylint: disable=arguments-differ """ Remove host provider """ provider = check_obj(HostProvider, provider_id, 'PROVIDER_NOT_FOUND') cm.api.delete_host_provider(provider) return Response(status=status.HTTP_204_NO_CONTENT)
def get(self, request, cluster_id, service_id): # pylint: disable=arguments-differ """ List all binds of specified service in cluster """ cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND') service = check_obj(ClusterObject, { 'cluster': cluster, 'id': service_id }, 'SERVICE_NOT_FOUND') obj = self.get_queryset().filter(cluster=cluster, service=service) serializer = self.get_serializer_class()(obj, many=True, context={ 'request': request }) return Response(serializer.data)
def put(self, request, task_id): task = check_obj(TaskLog, task_id, 'TASK_NOT_FOUND') try: cancel_task(task) except AdcmEx as e: raise AdcmApiEx(e.code, e.msg, e.http_code) from e return Response(status=status.HTTP_200_OK)
def create(self, validated_data): try: upgrade = check_obj(Upgrade, validated_data.get('upgrade_id'), 'UPGRADE_NOT_FOUND') return cm.upgrade.do_upgrade(validated_data.get('obj'), upgrade) except AdcmEx as e: raise AdcmApiEx(e.code, e.msg, e.http_code) from e