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
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
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)
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
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)
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
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
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))
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
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)
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
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
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
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)
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
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')
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')