Exemplo n.º 1
0
 def create(self, validated_data):
     try:
         return cm.api.add_service_to_cluster(
             self.context.get('cluster'),
             validated_data.get('prototype_id'),
         )
     except IntegrityError:
         raise AdcmApiEx('SERVICE_CONFLICT') from None
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 2
0
 def create(self, validated_data):
     try:
         return cm.api.add_host_provider(
             validated_data.get('prototype_id'), validated_data.get('name'),
             validated_data.get('description', ''))
     except Prototype.DoesNotExist:
         raise AdcmApiEx('PROTOTYPE_NOT_FOUND') from None
     except IntegrityError:
         raise AdcmApiEx("PROVIDER_CONFLICT") from None
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 3
0
 def validate_hc(self, hc):
     if not hc:
         raise AdcmApiEx('INVALID_INPUT', 'hc field is required')
     if not isinstance(hc, list):
         raise AdcmApiEx('INVALID_INPUT', 'hc field should be a list')
     for item in hc:
         for key in ('component_id', 'host_id', 'service_id'):
             if key not in item:
                 msg = '"{}" sub-field is required'
                 raise AdcmApiEx('INVALID_INPUT', msg.format(key))
     return hc
Exemplo n.º 4
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
Exemplo n.º 5
0
 def get(self, request, job_id, log_id):
     try:
         job = JobLog.objects.get(id=job_id)
         try:
             log_storage = LogStorage.objects.get(id=log_id, job=job)
         except LogStorage.DoesNotExist:
             raise AdcmApiEx(
                 'LOG_NOT_FOUND',
                 f'log {log_id} not found for job {job_id}') from None
         serializer = self.serializer_class(log_storage,
                                            context={'request': request})
         return Response(serializer.data)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 6
0
def get_obj_conf(cluster_id, service_id):
    cluster = check_obj(Cluster, cluster_id, 'CLUSTER_NOT_FOUND')
    if service_id:
        co = check_obj(ClusterObject, {
            'cluster': cluster,
            'id': service_id
        }, 'SERVICE_NOT_FOUND')
        obj = co
    else:
        obj = cluster
    if not obj:
        raise AdcmApiEx('CONFIG_NOT_FOUND', "this object has no config")
    if not obj.config:
        raise AdcmApiEx('CONFIG_NOT_FOUND', "this object has no config")
    return obj
Exemplo n.º 7
0
 def create(self, validated_data):
     provider = validated_data.get('provider')
     try:
         proto = Prototype.objects.get(bundle=provider.prototype.bundle,
                                       type='host')
     except Prototype.DoesNotExist:
         raise AdcmApiEx('PROTOTYPE_NOT_FOUND') from None
     try:
         return cm.api.add_host(proto, self.context.get('provider'),
                                validated_data.get('fqdn'),
                                validated_data.get('description', ''))
     except IntegrityError:
         raise AdcmApiEx("HOST_CONFLICT", "duplicate host") from None
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 8
0
 def update(self, instance, validated_data):
     instance.profile = validated_data.get('profile', instance.profile)
     try:
         instance.save()
     except IntegrityError:
         raise AdcmApiEx("USER_CONFLICT") from None
     return instance
Exemplo n.º 9
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)
Exemplo n.º 10
0
def download_log_file(request, job_id, log_id):
    try:
        job = JobLog.objects.get(id=job_id)
        log_storage = LogStorage.objects.get(id=log_id, job=job)

        if log_storage.type in ['stdout', 'stderr']:
            filename = f'{job.id}-{log_storage.name}-{log_storage.type}.{log_storage.format}'
        else:
            filename = f'{job.id}-{log_storage.name}.{log_storage.format}'
        filename = re.sub(r'\s+', '_', filename)
        if log_storage.format == 'txt':
            mime_type = 'text/plain'
        else:
            mime_type = 'application/json'

        if log_storage.body is None:
            body = ''
            length = 0
        else:
            body = log_storage.body
            length = len(body)

        response = HttpResponse(body)
        response['Content-Type'] = mime_type
        response['Content-Length'] = length
        response['Content-Encoding'] = 'UTF-8'
        response['Content-Disposition'] = f'attachment; filename={filename}'
        return response
    except AdcmEx as e:
        raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 11
0
 def put(self, request, bundle_id):
     bundle = check_obj(Bundle, bundle_id, 'BUNDLE_NOT_FOUND')
     try:
         cm.api.accept_license(bundle)
         return Response(status=status.HTTP_200_OK)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code, e.adds) from e
Exemplo n.º 12
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
Exemplo n.º 13
0
 def delete(self, request, bundle_id):
     bundle = check_obj(Bundle, bundle_id, 'BUNDLE_NOT_FOUND')
     try:
         cm.bundle.delete_bundle(bundle)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
     return Response(status=status.HTTP_204_NO_CONTENT)
Exemplo n.º 14
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
Exemplo n.º 15
0
 def validate(self, attrs):
     user = django.contrib.auth.authenticate(username=attrs.get('username'),
                                             password=attrs.get('password'))
     if not user:
         raise AdcmApiEx('AUTH_ERROR', 'Wrong user or password')
     attrs['user'] = user
     return attrs
Exemplo n.º 16
0
 def create(self, validated_data):
     try:
         bind = validated_data.get('bind')
         cluster = self.context.get('cluster')
         service = self.context.get('service')
         return cm.api.multi_bind(cluster, service, bind)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code, e.adds) from e
Exemplo n.º 17
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
Exemplo n.º 18
0
def check_obj(model, req, error):
    if isinstance(req, dict):
        kw = req
    else:
        kw = {'id': req}
    try:
        return model.objects.get(**kw)
    except ObjectDoesNotExist:
        raise AdcmApiEx(error) from None
Exemplo n.º 19
0
 def create(self, validated_data):
     try:
         binds = validated_data.get('bind')
         service = self.context.get('service')
         cluster = self.context.get('cluster')
         return multi_bind(cluster, service, binds)
     except AdcmEx as error:
         raise AdcmApiEx(error.code, error.msg, error.http_code,
                         error.adds) from error
Exemplo n.º 20
0
 def delete(self, request, cluster_id, host_id):
     """
     Remove host from cluster
     """
     host = self.get_obj(cluster_id, host_id)
     try:
         cm.api.remove_host_from_cluster(host)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
     return Response(status=status.HTTP_204_NO_CONTENT)
Exemplo n.º 21
0
 def update(self, instance, validated_data):
     instance.name = validated_data.get('name', instance.name)
     instance.description = validated_data.get('description',
                                               instance.description)
     try:
         instance.save()
     except IntegrityError:
         msg = 'cluster with name "{}" already exists'.format(instance.name)
         raise AdcmApiEx("CLUSTER_CONFLICT", msg) from None
     return instance
Exemplo n.º 22
0
 def create(self, validated_data):
     export_cluster = check_obj(Cluster,
                                validated_data.get('export_cluster_id'),
                                "CLUSTER_NOT_FOUND")
     try:
         return cm.api.bind(validated_data.get('cluster'),
                            validated_data.get('service'), export_cluster,
                            validated_data.get('export_service_id'))
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
Exemplo n.º 23
0
 def delete(self, request, host_id):   # pylint: disable=arguments-differ
     """
     Remove host (and all corresponding host services:components)
     """
     host = check_obj(Host, host_id, 'HOST_NOT_FOUND')
     try:
         cm.api.delete_host(host)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
     return Response(status=status.HTTP_204_NO_CONTENT)
Exemplo n.º 24
0
 def _get_ansible_content(self, obj):
     path_file = os.path.join(config.RUN_DIR, f'{obj.job.id}',
                              f'{obj.name}-{obj.type}.{obj.format}')
     try:
         with open(path_file, 'r') as f:
             content = f.read()
     except FileNotFoundError:
         msg = f'File "{obj.name}-{obj.type}.{obj.format}" not found'
         raise AdcmApiEx('LOG_NOT_FOUND', msg) from None
     return content
Exemplo n.º 25
0
 def create(self, validated_data):
     try:
         user = User.objects.create_user(
             validated_data.get('username'),
             password=validated_data.get('password'),
             is_superuser=validated_data.get('is_superuser', True))
         UserProfile.objects.create(login=validated_data.get('username'))
         return user
     except IntegrityError:
         raise AdcmApiEx("USER_CONFLICT", 'user already exists') from None
Exemplo n.º 26
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')
Exemplo n.º 27
0
 def delete(self, request, provider_id):   # pylint: disable=arguments-differ
     """
     Remove host provider
     """
     provider = check_obj(HostProvider, provider_id, 'PROVIDER_NOT_FOUND')
     try:
         cm.api.delete_host_provider(provider)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code) from e
     return Response(status=status.HTTP_204_NO_CONTENT)
Exemplo n.º 28
0
 def delete(self, request, *args, **kwargs):
     """
     Remove service from cluster
     """
     service = check_obj(ClusterObject, {'id': kwargs['service_id']},
                         'SERVICE_NOT_FOUND')
     try:
         delete_service(service)
     except AdcmEx as error:
         raise AdcmApiEx(error.code, error.msg, error.http_code) from error
     return Response(status=status.HTTP_204_NO_CONTENT)
Exemplo n.º 29
0
 def get_object(self):
     login = self.kwargs['username']
     try:
         up = UserProfile.objects.get(login=login)
     except UserProfile.DoesNotExist:
         try:
             user = User.objects.get(username=login)
             up = UserProfile.objects.create(login=user.username)
             up.save()
         except User.DoesNotExist:
             raise AdcmApiEx('USER_NOT_FOUND') from None
     return up
Exemplo n.º 30
0
 def put(self, request, bundle_id):
     """
     update bundle
     """
     bundle = check_obj(Bundle, bundle_id, 'BUNDLE_NOT_FOUND')
     try:
         cm.bundle.update_bundle(bundle)
         serializer = self.serializer_class(bundle,
                                            context={'request': request})
         return Response(serializer.data)
     except AdcmEx as e:
         raise AdcmApiEx(e.code, e.msg, e.http_code, e.adds) from e