diff --git a/server/src/uds/core/services/generics/fixed/service.py b/server/src/uds/core/services/generics/fixed/service.py index ca3b96986..d059edddc 100644 --- a/server/src/uds/core/services/generics/fixed/service.py +++ b/server/src/uds/core/services/generics/fixed/service.py @@ -151,9 +151,16 @@ def initialize(self, values: 'types.core.ValuesType') -> None: if not self.machines.value: raise exceptions.ui.ValidationError(gettext('We need at least a machine')) - # Remove machines not in values from "assigned" set + # Do not allow removing machines that still have assigned user services. + # (their UserService rows would linger, counting against userservices_limit) with self._assigned_access() as assigned_vms: - assigned_vms &= set(self.machines.as_list()) + removed_assigned = assigned_vms - set(self.machines.as_list()) + if removed_assigned: + raise exceptions.ui.ValidationError( + gettext('Cannot remove machines with assigned services: {}').format( + ', '.join(sorted(removed_assigned)) + ) + ) self.token.value = self.token.value.strip() @contextlib.contextmanager