wowowowowo
This commit is contained in:
@@ -3,26 +3,33 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Actions\GenerateRandomSlug;
|
||||
use App\Enums\OperationKind;
|
||||
use App\Enums\OperationStatus;
|
||||
use App\Enums\ServerStatus;
|
||||
use App\Jobs\Servers\WaitForServerToConnect;
|
||||
use App\Models\Organisation;
|
||||
use App\Models\Provider;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
use Inertia\Response;
|
||||
|
||||
class ServerController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
|
||||
return inertia('servers/Index', [
|
||||
'servers' => $organisation->servers()->paginate(30),
|
||||
'networks' => $organisation->networks()
|
||||
->with(['servers' => fn ($query) => $query->select('id', 'network_id', 'name', 'private_ip', 'status')])
|
||||
->get(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(Request $request)
|
||||
public function create(Request $request): Response
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
|
||||
@@ -55,7 +62,7 @@ class ServerController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
$request->validate([
|
||||
'provider' => ['required', 'exists:providers,id'],
|
||||
@@ -135,13 +142,63 @@ class ServerController extends Controller
|
||||
return redirect()->route('servers.show', ['organisation' => $organisation->id, 'server' => $server->id]);
|
||||
}
|
||||
|
||||
public function show(Request $request)
|
||||
public function show(Request $request): Response
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$server = $organisation->servers()->findOrFail($request->route('server'));
|
||||
|
||||
return inertia('servers/Show', [
|
||||
'server' => $server->load('services.slices', 'serviceOperations.steps', 'serviceOperations.target'),
|
||||
'server' => $server->load(
|
||||
'firewallRules',
|
||||
'network',
|
||||
'operations.steps',
|
||||
'operations.children.target',
|
||||
'services.slices',
|
||||
'services.endpoints',
|
||||
'serviceOperations.steps',
|
||||
'serviceOperations.children.target',
|
||||
'serviceOperations.target',
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Request $request): RedirectResponse
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$server = $organisation->servers()->findOrFail($request->route('server'));
|
||||
|
||||
$server->delete();
|
||||
|
||||
return redirect()
|
||||
->route('servers.index', ['organisation' => $organisation->id])
|
||||
->with('success', 'Server deleted.');
|
||||
}
|
||||
|
||||
public function heal(Request $request): RedirectResponse
|
||||
{
|
||||
$organisation = Organisation::findOrFail($request->route('organisation'));
|
||||
$server = $organisation->servers()->findOrFail($request->route('server'));
|
||||
|
||||
$operation = $server->operations()->create([
|
||||
'kind' => OperationKind::SERVER_PROVISION,
|
||||
'status' => OperationStatus::PENDING,
|
||||
]);
|
||||
|
||||
foreach ([
|
||||
'Check server shell' => 'true',
|
||||
'Check Docker' => 'docker --version && docker compose version',
|
||||
'Check Keystone directories' => 'test -d /home/keystone && test -d /home/keystone/services',
|
||||
] as $order => $script) {
|
||||
$operation->steps()->create([
|
||||
'name' => $order,
|
||||
'order' => $operation->steps()->count() + 1,
|
||||
'status' => OperationStatus::PENDING,
|
||||
'script' => $script,
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route('servers.show', ['organisation' => $organisation->id, 'server' => $server->id])
|
||||
->with('success', 'Server heal operation queued.');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user