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 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 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 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 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 AdcmDetailSerializer(AdcmSerializer): prototype_version = serializers.SerializerMethodField() bundle_id = serializers.IntegerField(read_only=True) config = CommonAPIURL(view_name='object-config') action = CommonAPIURL(view_name='object-action') def get_prototype_version(self, obj): return obj.prototype.version
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 DoUpgradeSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True) upgradable = serializers.BooleanField(read_only=True) 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
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 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)
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')
class EmptySerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True)