fix: delete persistent storages on resource deletion
This commit is contained in:
parent
53d1fa0331
commit
9c2fea4b2e
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Livewire\Project\Shared;
|
namespace App\Http\Livewire\Project\Shared;
|
||||||
|
|
||||||
|
use App\Actions\Service\StopService;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
use Visus\Cuid2\Cuid2;
|
use Visus\Cuid2\Cuid2;
|
||||||
|
|
||||||
@ -22,14 +23,15 @@ class Danger extends Component
|
|||||||
try {
|
try {
|
||||||
if ($this->resource->type() === 'service') {
|
if ($this->resource->type() === 'service') {
|
||||||
$server = $this->resource->server;
|
$server = $this->resource->server;
|
||||||
|
StopService::run($this->resource);
|
||||||
} else {
|
} else {
|
||||||
$destination = data_get($this->resource, 'destination');
|
$destination = data_get($this->resource, 'destination');
|
||||||
if ($destination) {
|
if ($destination) {
|
||||||
$destination = $this->resource->destination->getMorphClass()::where('id', $this->resource->destination->id)->first();
|
$destination = $this->resource->destination->getMorphClass()::where('id', $this->resource->destination->id)->first();
|
||||||
$server = $destination->server;
|
$server = $destination->server;
|
||||||
}
|
}
|
||||||
|
instant_remote_process(["docker rm -f {$this->resource->uuid}"], $server);
|
||||||
}
|
}
|
||||||
instant_remote_process(["docker rm -f {$this->resource->uuid}"], $server);
|
|
||||||
$this->resource->delete();
|
$this->resource->delete();
|
||||||
return redirect()->route('project.resources', [
|
return redirect()->route('project.resources', [
|
||||||
'project_uuid' => $this->parameters['project_uuid'],
|
'project_uuid' => $this->parameters['project_uuid'],
|
||||||
|
@ -4,10 +4,7 @@ namespace App\Models;
|
|||||||
|
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Support\Collection;
|
|
||||||
use Spatie\Activitylog\Models\Activity;
|
use Spatie\Activitylog\Models\Activity;
|
||||||
use Symfony\Component\Yaml\Yaml;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
|
|
||||||
class Application extends BaseModel
|
class Application extends BaseModel
|
||||||
{
|
{
|
||||||
@ -22,6 +19,10 @@ class Application extends BaseModel
|
|||||||
});
|
});
|
||||||
static::deleting(function ($application) {
|
static::deleting(function ($application) {
|
||||||
$application->settings()->delete();
|
$application->settings()->delete();
|
||||||
|
$storages = $application->persistentStorages()->get();
|
||||||
|
foreach ($storages as $storage) {
|
||||||
|
instant_remote_process(["docker volume rm -f $storage->name"], $application->destination->server);
|
||||||
|
}
|
||||||
$application->persistentStorages()->delete();
|
$application->persistentStorages()->delete();
|
||||||
$application->environment_variables()->delete();
|
$application->environment_variables()->delete();
|
||||||
$application->environment_variables_preview()->delete();
|
$application->environment_variables_preview()->delete();
|
||||||
|
@ -17,15 +17,29 @@ class Service extends BaseModel
|
|||||||
protected static function booted()
|
protected static function booted()
|
||||||
{
|
{
|
||||||
static::deleted(function ($service) {
|
static::deleted(function ($service) {
|
||||||
|
$storagesToDelete = collect([]);
|
||||||
foreach($service->applications()->get() as $application) {
|
foreach($service->applications()->get() as $application) {
|
||||||
|
$storages = $application->persistentStorages()->get();
|
||||||
|
foreach ($storages as $storage) {
|
||||||
|
$storagesToDelete->push($storage);
|
||||||
|
}
|
||||||
$application->persistentStorages()->delete();
|
$application->persistentStorages()->delete();
|
||||||
}
|
}
|
||||||
foreach($service->databases()->get() as $database) {
|
foreach($service->databases()->get() as $database) {
|
||||||
|
$storages = $database->persistentStorages()->get();
|
||||||
|
foreach ($storages as $storage) {
|
||||||
|
$storagesToDelete->push($storage);
|
||||||
|
}
|
||||||
$database->persistentStorages()->delete();
|
$database->persistentStorages()->delete();
|
||||||
}
|
}
|
||||||
$service->environment_variables()->delete();
|
$service->environment_variables()->delete();
|
||||||
$service->applications()->delete();
|
$service->applications()->delete();
|
||||||
$service->databases()->delete();
|
$service->databases()->delete();
|
||||||
|
if ($storagesToDelete->count() > 0) {
|
||||||
|
$storagesToDelete->each(function ($storage) use ($service) {
|
||||||
|
instant_remote_process(["docker volume rm -f $storage->name"], $service->server, false);
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public function type()
|
public function type()
|
||||||
|
@ -31,8 +31,8 @@ class StandalonePostgresql extends BaseModel
|
|||||||
static::deleted(function ($database) {
|
static::deleted(function ($database) {
|
||||||
$database->scheduledBackups()->delete();
|
$database->scheduledBackups()->delete();
|
||||||
$database->persistentStorages()->delete();
|
$database->persistentStorages()->delete();
|
||||||
instant_remote_process(['docker volume rm postgres-data-' . $database->uuid], $database->destination->server, false);
|
|
||||||
$database->environment_variables()->delete();
|
$database->environment_variables()->delete();
|
||||||
|
instant_remote_process(['docker volume rm postgres-data-' . $database->uuid], $database->destination->server, false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user