Ejemplo n.º 1
0
class JobSerializer(JobListSerializer):
    action = serializers.SerializerMethodField()
    display_name = serializers.SerializerMethodField()
    objects = serializers.SerializerMethodField()
    selector = serializers.JSONField(required=False)
    log_dir = serializers.CharField(read_only=True)
    log_files = DataField(read_only=True)
    action_url = hlink('action-details', 'action_id', 'action_id')
    task_url = hlink('task-details', 'id', 'task_id')

    def get_action(self, obj):
        return get_job_action(obj)

    def get_display_name(self, obj):
        if obj.sub_action_id:
            try:
                sub = SubAction.objects.get(id=obj.sub_action_id)
                return sub.display_name
            except SubAction.DoesNotExist:
                return None
        else:
            try:
                action = Action.objects.get(id=obj.action_id)
                return action.display_name
            except Action.DoesNotExist:
                return None

    def get_objects(self, obj):
        return get_job_objects(obj)
Ejemplo n.º 2
0
class GroupSerializer(serializers.Serializer):
    name = serializers.CharField()
    url = hlink('group-details', 'name', 'name')
    change_role = hlink('change-group-role', 'name', 'name')

    @transaction.atomic
    def create(self, validated_data):
        try:
            return Group.objects.create(name=validated_data.get('name'))
        except IntegrityError:
            raise AdcmApiEx("GROUP_CONFLICT", 'group already exists') from None
Ejemplo n.º 3
0
class ProviderDetailSerializer(ProviderSerializer):
    issue = serializers.SerializerMethodField()
    edition = serializers.CharField(read_only=True)
    license = serializers.CharField(read_only=True)
    bundle_id = serializers.IntegerField(read_only=True)
    prototype = hlink('provider-type-details', 'prototype_id', 'prototype_id')
    config = CommonAPIURL(view_name='object-config')
    action = CommonAPIURL(view_name='object-action')
    upgrade = hlink('provider-upgrade', 'id', 'provider_id')
    host = hlink('provider-host', 'id', 'provider_id')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)
Ejemplo n.º 4
0
class ClusterHostDetailSerializer(ClusterHostSerializer):
    issue = serializers.SerializerMethodField()
    cluster_url = hlink('cluster-details', 'cluster_id', 'cluster_id')
    status = serializers.SerializerMethodField()
    monitoring = serializers.CharField(read_only=True)
    host_url = hlink('host-details', 'id', 'host_id')
    config = CommonAPIURL(view_name='object-config')
    action = CommonAPIURL(view_name='object-action')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)

    def get_status(self, obj):
        return cm.status_api.get_host_status(obj.id)
Ejemplo n.º 5
0
class TaskSerializer(TaskListSerializer):
    selector = serializers.SerializerMethodField()
    config = serializers.JSONField(required=False)
    attr = serializers.JSONField(required=False)
    hc = serializers.JSONField(required=False)
    hosts = serializers.JSONField(required=False)
    verbose = serializers.BooleanField(required=False)
    action_url = serializers.SerializerMethodField()
    action = serializers.SerializerMethodField()
    objects = serializers.SerializerMethodField()
    jobs = serializers.SerializerMethodField()
    restart = hlink('task-restart', 'id', 'task_id')
    terminatable = serializers.SerializerMethodField()
    cancel = hlink('task-cancel', 'id', 'task_id')
    object_type = serializers.SerializerMethodField()
    lock = ConcernItemSerializer(read_only=True)

    get_action_url = get_action_url

    def get_selector(self, obj):
        return get_task_selector(obj.task_object, obj.action)

    def get_terminatable(self, obj):
        if obj.action:
            allow_to_terminate = obj.action.allow_to_terminate
        else:
            allow_to_terminate = False
        # pylint: disable=simplifiable-if-statement
        if allow_to_terminate and obj.status in [config.Job.CREATED, config.Job.RUNNING]:
            # pylint: enable=simplifiable-if-statement
            return True
        else:
            return False

    def get_jobs(self, obj):
        return JobShort(obj.joblog_set, many=True, context=self.context).data

    def get_action(self, obj):
        return JobAction(obj.action, context=self.context).data

    def get_objects(self, obj):
        return get_job_objects(obj)

    def get_object_type(self, obj):
        if obj.action:
            return obj.action.prototype.type
        else:
            return None
Ejemplo n.º 6
0
class ProviderHostSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cluster_id = serializers.IntegerField(read_only=True)
    prototype_id = serializers.IntegerField(required=False, read_only=True)
    provider_id = serializers.IntegerField(required=False, read_only=True)
    fqdn = serializers.CharField(help_text='fully qualified domain name')
    description = serializers.CharField(required=False)
    state = serializers.CharField(read_only=True)
    # stack = serializers.JSONField(read_only=True)
    url = hlink('host-details', 'id', 'host_id')

    def validate_fqdn(self, name):
        try:
            return cm.stack.validate_name(name, 'Host name')
        except AdcmEx as e:
            raise AdcmApiEx(e.code, e.msg, e.http_code) from e

    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
Ejemplo n.º 7
0
class HostComponentSerializer(serializers.Serializer):
    class MyUrlField(UrlField):
        def get_kwargs(self, obj):
            return {
                'cluster_id': obj.cluster.id,
                'hs_id': obj.id,
            }

    id = serializers.IntegerField(read_only=True)
    host_id = serializers.IntegerField(help_text='host id')
    host = serializers.CharField(read_only=True)
    service_id = serializers.IntegerField()
    component = serializers.CharField(help_text='component name')
    component_id = serializers.IntegerField(read_only=True,
                                            help_text='component id')
    state = serializers.CharField(read_only=True, required=False)
    url = MyUrlField(read_only=True, view_name='host-comp-details')
    host_url = hlink('host-details', 'host_id', 'host_id')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        data['component'] = instance.component.prototype.name
        data[
            'component_display_name'] = instance.component.prototype.display_name
        data['host'] = instance.host.fqdn
        data['service_name'] = instance.service.prototype.name
        data['service_display_name'] = instance.service.prototype.display_name
        data['service_version'] = instance.service.prototype.version
        return data
Ejemplo n.º 8
0
class ProviderSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField()
    prototype_id = serializers.IntegerField()
    description = serializers.CharField(required=False)
    state = serializers.CharField(read_only=True)
    url = hlink('provider-details', 'id', 'provider_id')

    def validate_prototype_id(self, prototype_id):
        proto = check_obj(Prototype, {
            'id': prototype_id,
            'type': 'provider'
        }, "PROTOTYPE_NOT_FOUND")
        return proto

    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
Ejemplo n.º 9
0
class ClusterSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    prototype_id = serializers.IntegerField(help_text='id of cluster type')
    name = serializers.CharField(help_text='cluster name')
    description = serializers.CharField(help_text='cluster description',
                                        required=False)
    state = serializers.CharField(read_only=True)
    before_upgrade = serializers.JSONField(read_only=True)
    url = hlink('cluster-details', 'id', 'cluster_id')

    def validate_prototype_id(self, prototype_id):
        return check_obj(Prototype, {'id': prototype_id, 'type': 'cluster'})

    def create(self, validated_data):
        try:
            return cm.api.add_cluster(
                validated_data.get('prototype_id'),
                validated_data.get('name'),
                validated_data.get('description', ''),
            )
        except IntegrityError:
            raise AdcmEx("CLUSTER_CONFLICT") from None

    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 = f'cluster with name "{instance.name}" already exists'
            raise AdcmEx("CLUSTER_CONFLICT", msg) from None
        return instance
Ejemplo n.º 10
0
class JobShort(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(read_only=True)
    display_name = serializers.CharField(read_only=True)
    status = serializers.CharField(read_only=True)
    start_date = serializers.DateTimeField(read_only=True)
    finish_date = serializers.DateTimeField(read_only=True)
    url = hlink('job-details', 'id', 'job_id')
Ejemplo n.º 11
0
class TaskListSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    pid = serializers.IntegerField(read_only=True)
    object_id = serializers.IntegerField(read_only=True)
    action_id = serializers.IntegerField(read_only=True)
    status = serializers.CharField(read_only=True)
    start_date = serializers.DateTimeField(read_only=True)
    finish_date = serializers.DateTimeField(read_only=True)
    url = hlink('task-details', 'id', 'task_id')
Ejemplo n.º 12
0
class JobListSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    pid = serializers.IntegerField(read_only=True)
    task_id = serializers.IntegerField(read_only=True)
    action_id = serializers.IntegerField(read_only=True)
    sub_action_id = serializers.IntegerField(read_only=True)
    status = serializers.CharField(read_only=True)
    start_date = serializers.DateTimeField(read_only=True)
    finish_date = serializers.DateTimeField(read_only=True)
    url = hlink('job-details', 'id', 'job_id')
Ejemplo n.º 13
0
class UserSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField(write_only=True)
    url = hlink('user-details', 'username', 'username')
    change_group = hlink('add-user-group', 'username', 'username')
    change_password = hlink('user-passwd', 'username', 'username')
    change_role = hlink('change-user-role', 'username', 'username')
    is_superuser = serializers.BooleanField(required=False)

    @transaction.atomic
    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
Ejemplo n.º 14
0
class ProfileSerializer(ProfileDetailSerializer):
    username = serializers.CharField(source='login')
    url = hlink('profile-details', 'login', 'username')

    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
Ejemplo n.º 15
0
class HostDetailSerializer(HostSerializer):
    bundle_id = serializers.IntegerField(read_only=True)
    status = serializers.SerializerMethodField()
    config = CommonAPIURL(view_name='object-config')
    action = CommonAPIURL(view_name='object-action')
    prototype = hlink('host-type-details', 'prototype_id', 'prototype_id')
    multi_state = StringListSerializer(read_only=True)
    concerns = ConcernItemSerializer(many=True, read_only=True)
    locked = serializers.BooleanField(read_only=True)

    def get_status(self, obj):
        return cm.status_api.get_host_status(obj)
Ejemplo n.º 16
0
class BundleSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(read_only=True)
    version = serializers.CharField(read_only=True)
    edition = serializers.CharField(read_only=True)
    hash = serializers.CharField(read_only=True)
    license = serializers.CharField(read_only=True)
    license_path = serializers.CharField(read_only=True)
    license_hash = serializers.CharField(read_only=True)
    description = serializers.CharField(required=False)
    date = serializers.DateTimeField(read_only=True)
    url = hlink('bundle-details', 'id', 'bundle_id')
    license_url = hlink('bundle-license', 'id', 'bundle_id')
    update = hlink('bundle-update', 'id', 'bundle_id')

    def to_representation(self, instance):
        data = super().to_representation(instance)
        proto = Prototype.objects.filter(bundle=instance, name=instance.name)
        data['adcm_min_version'] = proto[0].adcm_min_version
        data['display_name'] = proto[0].display_name
        return data
Ejemplo n.º 17
0
class HostDetailSerializer(HostSerializer):
    # stack = serializers.JSONField(read_only=True)
    issue = serializers.SerializerMethodField()
    bundle_id = serializers.IntegerField(read_only=True)
    status = serializers.SerializerMethodField()
    config = CommonAPIURL(view_name='object-config')
    action = CommonAPIURL(view_name='object-action')
    prototype = hlink('host-type-details', 'prototype_id', 'prototype_id')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)

    def get_status(self, obj):
        return cm.status_api.get_host_status(obj.id)
Ejemplo n.º 18
0
class UpgradeSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(required=False)
    bundle_id = serializers.IntegerField(read_only=True)
    description = serializers.CharField(required=False)
    min_version = serializers.CharField(required=False)
    max_version = serializers.CharField(required=False)
    min_strict = serializers.BooleanField(required=False)
    max_strict = serializers.BooleanField(required=False)
    upgradable = serializers.BooleanField(required=False)
    license = serializers.CharField(required=False)
    license_url = hlink('bundle-license', 'bundle_id', 'bundle_id')
    from_edition = serializers.JSONField(required=False)
    state_available = serializers.JSONField(required=False)
    state_on_success = serializers.CharField(required=False)
Ejemplo n.º 19
0
class PrototypeSerializer(serializers.Serializer):
    bundle_id = serializers.IntegerField(read_only=True)
    id = serializers.IntegerField(read_only=True)
    path = serializers.CharField(read_only=True)
    name = serializers.CharField(read_only=True)
    display_name = serializers.CharField(required=False)
    version = serializers.CharField(read_only=True)
    bundle_edition = serializers.SerializerMethodField()
    description = serializers.CharField(required=False)
    type = serializers.CharField(read_only=True)
    required = serializers.BooleanField(read_only=True)
    url = hlink('prototype-details', 'id', 'prototype_id')

    def get_bundle_edition(self, obj):
        return obj.bundle.edition
Ejemplo n.º 20
0
class HostSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cluster_id = serializers.IntegerField(read_only=True)
    prototype_id = serializers.IntegerField(help_text='id of host type')
    provider_id = serializers.IntegerField()
    fqdn = serializers.CharField(help_text='fully qualified domain name')
    description = serializers.CharField(required=False)
    state = serializers.CharField(read_only=True)
    url = hlink('host-details', 'id', 'host_id')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)

    def validate_prototype_id(self, prototype_id):
        proto = check_obj(Prototype, {
            'id': prototype_id,
            'type': 'host'
        }, "PROTOTYPE_NOT_FOUND")
        return proto

    def validate_provider_id(self, provider_id):
        provider = check_obj(HostProvider, provider_id, "PROVIDER_NOT_FOUND")
        return provider

    def validate_fqdn(self, name):
        try:
            return cm.stack.validate_name(name, 'Host name')
        except AdcmEx as e:
            raise AdcmApiEx(e.code, e.msg, e.http_code) from e

    def create(self, validated_data):
        try:
            return cm.api.add_host(validated_data.get('prototype_id'),
                                   validated_data.get('provider_id'),
                                   validated_data.get('fqdn'),
                                   validated_data.get('description', ''))
        except Prototype.DoesNotExist:
            raise AdcmApiEx('PROTOTYPE_NOT_FOUND') from None
        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

    def update(self, instance, validated_data):
        instance.cluster_id = validated_data.get('cluster_id')
        instance.save()
        return instance
Ejemplo n.º 21
0
class ComponentDetailSerializer(ComponentSerializer):
    constraint = serializers.JSONField(read_only=True)
    requires = serializers.JSONField(read_only=True)
    bound_to = serializers.JSONField(read_only=True)
    bundle_id = serializers.IntegerField(read_only=True)
    monitoring = serializers.CharField(read_only=True)
    status = serializers.SerializerMethodField()
    action = CommonAPIURL(read_only=True, view_name='object-action')
    config = CommonAPIURL(read_only=True, view_name='object-config')
    prototype = hlink('component-type-details', 'prototype_id', 'prototype_id')
    multi_state = StringListSerializer(read_only=True)
    concerns = ConcernItemSerializer(many=True, read_only=True)
    locked = serializers.BooleanField(read_only=True)
    group_config = GroupConfigsHyperlinkedIdentityField(
        view_name='group-config-list')

    def get_status(self, obj):
        return status_api.get_component_status(obj)
Ejemplo n.º 22
0
class ClusterDetailSerializer(ClusterSerializer):
    # stack = serializers.JSONField(read_only=True)
    issue = serializers.SerializerMethodField()
    bundle_id = serializers.IntegerField(read_only=True)
    edition = serializers.CharField(read_only=True)
    license = serializers.CharField(read_only=True)
    action = CommonAPIURL(view_name='object-action')
    service = hlink('cluster-service', 'id', 'cluster_id')
    host = hlink('cluster-host', 'id', 'cluster_id')
    hostcomponent = hlink('host-component', 'id', 'cluster_id')
    status = serializers.SerializerMethodField()
    status_url = hlink('cluster-status', 'id', 'cluster_id')
    config = CommonAPIURL(view_name='object-config')
    serviceprototype = hlink('cluster-service-prototype', 'id', 'cluster_id')
    upgrade = hlink('cluster-upgrade', 'id', 'cluster_id')
    imports = hlink('cluster-import', 'id', 'cluster_id')
    bind = hlink('cluster-bind', 'id', 'cluster_id')
    prototype = hlink('cluster-type-details', 'prototype_id', 'prototype_id')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)

    def get_status(self, obj):
        return cm.status_api.get_cluster_status(obj.id)
Ejemplo n.º 23
0
class JobSerializer(JobListSerializer):
    action = serializers.SerializerMethodField()
    display_name = serializers.SerializerMethodField()
    objects = serializers.SerializerMethodField()
    selector = serializers.SerializerMethodField()
    log_dir = serializers.CharField(read_only=True)
    log_files = DataField(read_only=True)
    action_url = serializers.SerializerMethodField()
    task_url = hlink('task-details', 'task_id', 'task_id')

    get_display_name = get_job_display_name
    get_action_url = get_action_url

    def get_selector(self, obj):
        return get_task_selector(obj.task.task_object, obj.action)

    def get_action(self, obj):
        return JobAction(obj.action, context=self.context).data

    def get_objects(self, obj):
        return get_job_objects(obj.task)
Ejemplo n.º 24
0
class ClusterSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    prototype_id = serializers.IntegerField(help_text='id of cluster type')
    name = serializers.CharField(help_text='cluster name')
    description = serializers.CharField(help_text='cluster description',
                                        required=False)
    state = serializers.CharField(read_only=True)
    url = hlink('cluster-details', 'id', 'cluster_id')

    def validate_prototype_id(self, prototype_id):
        cluster = check_obj(Prototype, {
            'id': prototype_id,
            'type': 'cluster'
        }, "PROTOTYPE_NOT_FOUND")
        return cluster

    def create(self, validated_data):
        try:
            return cm.api.add_cluster(
                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("CLUSTER_CONFLICT") from None
        except AdcmEx as e:
            raise AdcmApiEx(e.code, e.msg, e.http_code) from e

    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
Ejemplo n.º 25
0
class ClusterServiceDetailSerializer(ClusterServiceSerializer):
    prototype_id = serializers.IntegerField(read_only=True)
    # stack = serializers.JSONField(read_only=True)
    description = serializers.CharField(read_only=True)
    bundle_id = serializers.IntegerField(read_only=True)
    issue = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()
    monitoring = serializers.CharField(read_only=True)
    config = CommonAPIURL(view_name='object-config')
    action = CommonAPIURL(view_name='object-action')
    component = ClusterServiceUrlField(read_only=True,
                                       view_name='cluster-service-component')
    imports = ClusterServiceUrlField(read_only=True,
                                     view_name='cluster-service-import')
    bind = ClusterServiceUrlField(read_only=True,
                                  view_name='cluster-service-bind')
    prototype = hlink('service-type-details', 'prototype_id', 'prototype_id')

    def get_issue(self, obj):
        return cm.issue.get_issue(obj)

    def get_status(self, obj):
        return cm.status_api.get_service_status(obj.cluster.id, obj.id)
Ejemplo n.º 26
0
class ClusterDetailSerializer(ClusterSerializer):
    bundle_id = serializers.IntegerField(read_only=True)
    edition = serializers.CharField(read_only=True)
    license = serializers.CharField(read_only=True)
    action = CommonAPIURL(view_name='object-action')
    service = ObjectURL(view_name='service')
    host = ObjectURL(view_name='host')
    hostcomponent = hlink('host-component', 'id', 'cluster_id')
    status = serializers.SerializerMethodField()
    status_url = hlink('cluster-status', 'id', 'cluster_id')
    config = CommonAPIURL(view_name='object-config')
    serviceprototype = hlink('cluster-service-prototype', 'id', 'cluster_id')
    upgrade = hlink('cluster-upgrade', 'id', 'cluster_id')
    imports = hlink('cluster-import', 'id', 'cluster_id')
    bind = hlink('cluster-bind', 'id', 'cluster_id')
    prototype = hlink('cluster-type-details', 'prototype_id', 'prototype_id')
    multi_state = StringListSerializer(read_only=True)
    concerns = ConcernItemSerializer(many=True, read_only=True)
    locked = serializers.BooleanField(read_only=True)
    group_config = GroupConfigsHyperlinkedIdentityField(
        view_name='group-config-list')

    def get_status(self, obj):
        return cm.status_api.get_cluster_status(obj)
Ejemplo n.º 27
0
class ConcernItemSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    url = hlink('concern-details', 'id', 'concern_id')
Ejemplo n.º 28
0
class AdcmSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField()
    prototype_id = serializers.IntegerField()
    state = serializers.CharField(read_only=True)
    url = hlink('adcm-details', 'id', 'adcm_id')
Ejemplo n.º 29
0
class StatsSerializer(serializers.Serializer):
    task = hlink('task-stats', 'id', 'task_id')
    job = hlink('job-stats', 'id', 'job_id')
Ejemplo n.º 30
0
class TaskSerializer(TaskListSerializer):
    selector = serializers.JSONField(read_only=True)
    config = serializers.JSONField(required=False)
    attr = serializers.JSONField(required=False)
    hc = serializers.JSONField(required=False)
    hosts = serializers.JSONField(required=False)
    verbose = serializers.BooleanField(required=False)
    action_url = serializers.HyperlinkedIdentityField(
        read_only=True,
        view_name='action-details',
        lookup_field='action_id',
        lookup_url_kwarg='action_id')
    action = serializers.SerializerMethodField()
    objects = serializers.SerializerMethodField()
    jobs = serializers.SerializerMethodField()
    restart = hlink('task-restart', 'id', 'task_id')
    terminatable = serializers.SerializerMethodField()
    cancel = hlink('task-cancel', 'id', 'task_id')
    object_type = serializers.SerializerMethodField()

    def get_terminatable(self, obj):
        try:
            action = Action.objects.get(id=obj.action_id)
            allow_to_terminate = action.allow_to_terminate
        except Action.DoesNotExist:
            allow_to_terminate = False
        # pylint: disable=simplifiable-if-statement
        if allow_to_terminate and obj.status in [
                config.Job.CREATED, config.Job.RUNNING
        ]:
            # pylint: enable=simplifiable-if-statement
            return True
        else:
            return False

    def get_jobs(self, obj):
        task_jobs = JobLog.objects.filter(task_id=obj.id)
        for job in task_jobs:
            if job.sub_action_id:
                try:
                    sub = SubAction.objects.get(id=job.sub_action_id)
                    job.display_name = sub.display_name
                    job.name = sub.name
                except SubAction.DoesNotExist:
                    job.display_name = None
                    job.name = None
            else:
                try:
                    action = Action.objects.get(id=job.action_id)
                    job.display_name = action.display_name
                    job.name = action.name
                except Action.DoesNotExist:
                    job.display_name = None
                    job.name = None
        jobs = JobShort(task_jobs, many=True, context=self.context)
        return jobs.data

    def get_action(self, obj):
        return get_job_action(obj)

    def get_objects(self, obj):
        return get_job_objects(obj)

    def get_object_type(self, obj):
        return get_job_object_type(obj)