fix(services): finish service cleanup when a volume cannot be removed

- Try to remove every volume and always delete the configuration
  directory (it holds the .env with secrets), then report the volumes that
  failed.
- Delete volume backup schedules also when a service is removed from
  Coolify only.
- The delete API no longer claims the server is unreachable when the
  caller asked to delete from Coolify only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andras Bacsai
2026-10-02 16:00:52 +02:00
co-authored by Claude Opus 5.5
parent b98e810e3f
commit 2e2e43fddc
5 changed files with 256 additions and 31 deletions
@@ -1054,7 +1054,8 @@ class ServicesController extends Controller
$service->delete();
$deleteFromCoolifyOnly = $request->boolean('delete_from_coolify_only') || ! $service->server?->isFunctional();
$deleteFromCoolifyOnlyRequested = $request->boolean('delete_from_coolify_only');
$deleteFromCoolifyOnly = $deleteFromCoolifyOnlyRequested || ! $service->server?->isFunctional();
DeleteResourceJob::dispatch(
resource: $service,
@@ -1072,11 +1073,13 @@ class ServicesController extends Controller
'delete_from_coolify_only' => $deleteFromCoolifyOnly,
]);
return response()->json([
'message' => $deleteFromCoolifyOnly
? 'Server is not reachable. The service will be removed from Coolify only; Docker resources may remain.'
: 'Service deletion request queued.',
]);
$message = match (true) {
$deleteFromCoolifyOnlyRequested => 'The service will be removed from Coolify only; Docker resources will remain.',
$deleteFromCoolifyOnly => 'Server is not reachable. The service will be removed from Coolify only; Docker resources may remain.',
default => 'Service deletion request queued.',
};
return response()->json(['message' => $message]);
}
#[OA\Patch(