Beispiel #1
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
Beispiel #2
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
Beispiel #3
0
class SubActionSerializer(serializers.Serializer):
    name = serializers.CharField()
    display_name = serializers.CharField(required=False)
    script = serializers.CharField()
    script_type = serializers.CharField()
    state_on_fail = serializers.CharField(required=False)
    params = serializers.JSONField(required=False)
Beispiel #4
0
class PermSerializer(serializers.Serializer):
    name = serializers.CharField()
    codename = serializers.CharField()
    app_label = serializers.SerializerMethodField()
    model = serializers.SerializerMethodField()

    def get_app_label(self, obj):
        return obj.content_type.app_label

    def get_model(self, obj):
        return obj.content_type.model
Beispiel #5
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)
Beispiel #6
0
class UserPasswdSerializer(serializers.Serializer):
    token = serializers.CharField(read_only=True, source='key')
    password = serializers.CharField(write_only=True)

    @transaction.atomic
    def update(self, user, validated_data):  # pylint: disable=arguments-differ
        user.set_password(validated_data.get('password'))
        user.save()
        token = Token.objects.get(user=user)
        token.delete()
        token.key = token.generate_key()
        token.user = user
        token.save()
        return token
Beispiel #7
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
Beispiel #8
0
class AddGroupRoleSerializer(serializers.Serializer):
    role_id = serializers.IntegerField()
    name = serializers.CharField(read_only=True)

    def update(self, group, validated_data):  # pylint: disable=arguments-differ
        role = check_obj(Role, {'id': validated_data.get('role_id')},
                         'ROLE_NOT_FOUND')
        return safe_api(cm.api.add_group_role, (group, role))
Beispiel #9
0
class AddUser2GroupSerializer(serializers.Serializer):
    name = serializers.CharField()

    def update(self, user, validated_data):  # pylint: disable=arguments-differ
        group = check_obj(Group, {'name': validated_data.get('name')},
                          'GROUP_NOT_FOUND')
        group.user_set.add(user)
        return group
Beispiel #10
0
class ActionSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    prototype_id = serializers.IntegerField()
    name = serializers.CharField()
    type = serializers.CharField()
    display_name = serializers.CharField(required=False)
    description = serializers.CharField(required=False)
    ui_options = serializers.JSONField(required=False)
    button = serializers.CharField(required=False)
    script = serializers.CharField()
    script_type = serializers.CharField()
    state_on_success = serializers.CharField()
    state_on_fail = serializers.CharField()
    hostcomponentmap = serializers.JSONField(required=False)
    allow_to_terminate = serializers.BooleanField(read_only=True)
    partial_execution = serializers.BooleanField(read_only=True)
Beispiel #11
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
Beispiel #12
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
Beispiel #13
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
Beispiel #14
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)
Beispiel #15
0
class ProfileDetailSerializer(serializers.Serializer):
    class MyUrlField(UrlField):
        def get_kwargs(self, obj):
            return {'username': obj.login}

    username = serializers.CharField(read_only=True, source='login')
    change_password = MyUrlField(read_only=True, view_name='profile-passwd')
    profile = serializers.JSONField()

    def validate_profile(self, raw):
        if isinstance(raw, str):
            raise AdcmApiEx('JSON_ERROR',
                            'profile should not be just one string')
        return raw

    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
Beispiel #16
0
class RoleSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(read_only=True)
    description = serializers.CharField(read_only=True)
    url = hlink('role-details', 'id', 'role_id')
Beispiel #17
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')