From 5580a4e704dc04309d769f1912affaa9b4aeb3a2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 3 Oct 2023 11:56:56 +0200 Subject: [PATCH] feat: delete resource command --- app/Console/Commands/DeleteResource.php | 86 +++++++++++++++++++++++++ app/Models/Application.php | 10 ++- app/Models/Service.php | 3 +- app/Models/StandalonePostgresql.php | 11 ++++ 4 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 app/Console/Commands/DeleteResource.php diff --git a/app/Console/Commands/DeleteResource.php b/app/Console/Commands/DeleteResource.php new file mode 100644 index 000000000..0712448ec --- /dev/null +++ b/app/Console/Commands/DeleteResource.php @@ -0,0 +1,86 @@ +deleteApplication(); + } elseif ($resource === 'Database') { + $this->deleteDatabase(); + } elseif ($resource === 'Service') { + $this->deleteService(); + } + } + private function deleteApplication() { + $applications = Application::all(); + $application = select( + 'What application do you want to delete?', + $applications->pluck('name')->toArray(), + ); + $application = $applications->where('name', $application)->first(); + $confirmed = confirm("Are you sure you want to delete {$application->name}?"); + if (!$confirmed) { + return; + } + $application->delete(); + } + private function deleteDatabase() { + $databases = StandalonePostgresql::all(); + $database = select( + 'What database do you want to delete?', + $databases->pluck('name')->toArray(), + ); + $database = $databases->where('name', $database)->first(); + $confirmed = confirm("Are you sure you want to delete {$database->name}?"); + if (!$confirmed) { + return; + } + $database->delete(); + } + private function deleteService() { + $services = Service::all(); + $service = select( + 'What service do you want to delete?', + $services->pluck('name')->toArray(), + ); + $service = $services->where('name', $service)->first(); + $confirmed = confirm("Are you sure you want to delete {$service->name}?"); + if (!$confirmed) { + return; + } + $service->delete(); + } + +} diff --git a/app/Models/Application.php b/app/Models/Application.php index 224b332cc..fc437769a 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -18,10 +18,16 @@ class Application extends BaseModel ]); }); static::deleting(function ($application) { + // Stop Container + instant_remote_process( + ["docker rm -f {$application->uuid}"], + $application->destination->server, + false + ); $application->settings()->delete(); $storages = $application->persistentStorages()->get(); foreach ($storages as $storage) { - instant_remote_process(["docker volume rm -f $storage->name"], $application->destination->server); + instant_remote_process(["docker volume rm -f $storage->name"], $application->destination->server, false); } $application->persistentStorages()->delete(); $application->environment_variables()->delete(); @@ -233,7 +239,7 @@ class Application extends BaseModel } public function isHealthcheckDisabled(): bool { - if (data_get($this, 'dockerfile') || data_get($this, 'build_pack') === 'dockerfile' || data_get($this,'health_check_enabled') === false) { + if (data_get($this, 'dockerfile') || data_get($this, 'build_pack') === 'dockerfile' || data_get($this, 'health_check_enabled') === false) { ray('dockerfile'); return true; } diff --git a/app/Models/Service.php b/app/Models/Service.php index 7ad297229..49d8b9f33 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -8,7 +8,6 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\Cache; use Symfony\Component\Yaml\Yaml; use Illuminate\Support\Str; -use Spatie\Url\Url; class Service extends BaseModel { @@ -20,6 +19,7 @@ class Service extends BaseModel static::deleted(function ($service) { $storagesToDelete = collect([]); foreach ($service->applications()->get() as $application) { + instant_remote_process(["docker rm -f {$application->name}-{$service->uuid}"], $service->server, false); $storages = $application->persistentStorages()->get(); foreach ($storages as $storage) { $storagesToDelete->push($storage); @@ -27,6 +27,7 @@ class Service extends BaseModel $application->persistentStorages()->delete(); } foreach ($service->databases()->get() as $database) { + instant_remote_process(["docker rm -f {$database->name}-{$service->uuid}"], $service->server, false); $storages = $database->persistentStorages()->get(); foreach ($storages as $storage) { $storagesToDelete->push($storage); diff --git a/app/Models/StandalonePostgresql.php b/app/Models/StandalonePostgresql.php index 21ec17e40..17b5b8056 100644 --- a/app/Models/StandalonePostgresql.php +++ b/app/Models/StandalonePostgresql.php @@ -29,9 +29,20 @@ class StandalonePostgresql extends BaseModel ]); }); static::deleted(function ($database) { + // Stop Container + instant_remote_process( + ["docker rm -f {$database->uuid}"], + $database->destination->server, + false + ); + // Stop TCP Proxy + if ($database->is_public) { + instant_remote_process(["docker rm -f {$database->uuid}-proxy"], $database->destination->server, false); + } $database->scheduledBackups()->delete(); $database->persistentStorages()->delete(); $database->environment_variables()->delete(); + // Remove Volume instant_remote_process(['docker volume rm postgres-data-' . $database->uuid], $database->destination->server, false); }); }