Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
 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')
Beispiel #4
0
 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)
Beispiel #5
0
 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
Beispiel #6
0
 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)
Beispiel #7
0
 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)
Beispiel #8
0
 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')
Beispiel #9
0
 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)
Beispiel #10
0
 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')
Beispiel #11
0
 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)
Beispiel #12
0
 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
Beispiel #13
0
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
Beispiel #14
0
 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)
Beispiel #15
0
 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)
Beispiel #16
0
 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)
Beispiel #17
0
 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)
Beispiel #18
0
 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)
Beispiel #19
0
 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)
Beispiel #20
0
 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)
Beispiel #21
0
 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)
Beispiel #22
0
    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)
Beispiel #23
0
 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)
Beispiel #24
0
 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)
Beispiel #25
0
 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)
Beispiel #26
0
 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})
Beispiel #27
0
 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)
Beispiel #28
0
 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)
Beispiel #29
0
 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)
Beispiel #30
0
 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