Update ByHetzner.php

This commit is contained in:
Andras Bacsai 2026-03-25 19:26:13 +01:00
parent 3470f8b2a6
commit f0c8ff6a77

View file

@ -8,6 +8,7 @@
use App\Models\PrivateKey; use App\Models\PrivateKey;
use App\Models\Server; use App\Models\Server;
use App\Models\Team; use App\Models\Team;
use App\Rules\ValidCloudInitYaml;
use App\Rules\ValidHostname; use App\Rules\ValidHostname;
use App\Services\HetznerService; use App\Services\HetznerService;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
@ -161,7 +162,7 @@ protected function rules(): array
'selectedHetznerSshKeyIds.*' => 'integer', 'selectedHetznerSshKeyIds.*' => 'integer',
'enable_ipv4' => 'required|boolean', 'enable_ipv4' => 'required|boolean',
'enable_ipv6' => 'required|boolean', 'enable_ipv6' => 'required|boolean',
'cloud_init_script' => ['nullable', 'string', new \App\Rules\ValidCloudInitYaml], 'cloud_init_script' => ['nullable', 'string', new ValidCloudInitYaml],
'save_cloud_init_script' => 'boolean', 'save_cloud_init_script' => 'boolean',
'cloud_init_script_name' => 'nullable|string|max:255', 'cloud_init_script_name' => 'nullable|string|max:255',
'selected_cloud_init_script_id' => 'nullable|integer|exists:cloud_init_scripts,id', 'selected_cloud_init_script_id' => 'nullable|integer|exists:cloud_init_scripts,id',
@ -295,11 +296,6 @@ private function getCpuVendorInfo(array $serverType): ?string
public function getAvailableServerTypesProperty() public function getAvailableServerTypesProperty()
{ {
ray('Getting available server types', [
'selected_location' => $this->selected_location,
'total_server_types' => count($this->serverTypes),
]);
if (! $this->selected_location) { if (! $this->selected_location) {
return $this->serverTypes; return $this->serverTypes;
} }
@ -322,21 +318,11 @@ public function getAvailableServerTypesProperty()
->values() ->values()
->toArray(); ->toArray();
ray('Filtered server types', [
'selected_location' => $this->selected_location,
'filtered_count' => count($filtered),
]);
return $filtered; return $filtered;
} }
public function getAvailableImagesProperty() public function getAvailableImagesProperty()
{ {
ray('Getting available images', [
'selected_server_type' => $this->selected_server_type,
'total_images' => count($this->images),
'images' => $this->images,
]);
if (! $this->selected_server_type) { if (! $this->selected_server_type) {
return $this->images; return $this->images;
@ -344,10 +330,7 @@ public function getAvailableImagesProperty()
$serverType = collect($this->serverTypes)->firstWhere('name', $this->selected_server_type); $serverType = collect($this->serverTypes)->firstWhere('name', $this->selected_server_type);
ray('Server type data', $serverType);
if (! $serverType || ! isset($serverType['architecture'])) { if (! $serverType || ! isset($serverType['architecture'])) {
ray('No architecture in server type, returning all');
return $this->images; return $this->images;
} }
@ -359,11 +342,6 @@ public function getAvailableImagesProperty()
->values() ->values()
->toArray(); ->toArray();
ray('Filtered images', [
'architecture' => $architecture,
'filtered_count' => count($filtered),
]);
return $filtered; return $filtered;
} }
@ -386,8 +364,6 @@ public function getSelectedServerPriceProperty(): ?string
public function updatedSelectedLocation($value) public function updatedSelectedLocation($value)
{ {
ray('Location selected', $value);
// Reset server type and image when location changes // Reset server type and image when location changes
$this->selected_server_type = null; $this->selected_server_type = null;
$this->selected_image = null; $this->selected_image = null;
@ -395,15 +371,13 @@ public function updatedSelectedLocation($value)
public function updatedSelectedServerType($value) public function updatedSelectedServerType($value)
{ {
ray('Server type selected', $value);
// Reset image when server type changes // Reset image when server type changes
$this->selected_image = null; $this->selected_image = null;
} }
public function updatedSelectedImage($value) public function updatedSelectedImage($value)
{ {
ray('Image selected', $value); //
} }
public function updatedSelectedCloudInitScriptId($value) public function updatedSelectedCloudInitScriptId($value)
@ -433,18 +407,10 @@ private function createHetznerServer(string $token): array
$publicKey = $privateKey->getPublicKey(); $publicKey = $privateKey->getPublicKey();
$md5Fingerprint = PrivateKey::generateMd5Fingerprint($privateKey->private_key); $md5Fingerprint = PrivateKey::generateMd5Fingerprint($privateKey->private_key);
ray('Private Key Info', [
'private_key_id' => $this->private_key_id,
'sha256_fingerprint' => $privateKey->fingerprint,
'md5_fingerprint' => $md5Fingerprint,
]);
// Check if SSH key already exists on Hetzner by comparing MD5 fingerprints // Check if SSH key already exists on Hetzner by comparing MD5 fingerprints
$existingSshKeys = $hetznerService->getSshKeys(); $existingSshKeys = $hetznerService->getSshKeys();
$existingKey = null; $existingKey = null;
ray('Existing SSH Keys on Hetzner', $existingSshKeys);
foreach ($existingSshKeys as $key) { foreach ($existingSshKeys as $key) {
if ($key['fingerprint'] === $md5Fingerprint) { if ($key['fingerprint'] === $md5Fingerprint) {
$existingKey = $key; $existingKey = $key;
@ -455,12 +421,10 @@ private function createHetznerServer(string $token): array
// Upload SSH key if it doesn't exist // Upload SSH key if it doesn't exist
if ($existingKey) { if ($existingKey) {
$sshKeyId = $existingKey['id']; $sshKeyId = $existingKey['id'];
ray('Using existing SSH key', ['ssh_key_id' => $sshKeyId]);
} else { } else {
$sshKeyName = $privateKey->name; $sshKeyName = $privateKey->name;
$uploadedKey = $hetznerService->uploadSshKey($sshKeyName, $publicKey); $uploadedKey = $hetznerService->uploadSshKey($sshKeyName, $publicKey);
$sshKeyId = $uploadedKey['id']; $sshKeyId = $uploadedKey['id'];
ray('Uploaded new SSH key', ['ssh_key_id' => $sshKeyId, 'name' => $sshKeyName]);
} }
// Normalize server name to lowercase for RFC 1123 compliance // Normalize server name to lowercase for RFC 1123 compliance
@ -495,13 +459,9 @@ private function createHetznerServer(string $token): array
$params['user_data'] = $this->cloud_init_script; $params['user_data'] = $this->cloud_init_script;
} }
ray('Server creation parameters', $params);
// Create server on Hetzner // Create server on Hetzner
$hetznerServer = $hetznerService->createServer($params); $hetznerServer = $hetznerService->createServer($params);
ray('Hetzner server created', $hetznerServer);
return $hetznerServer; return $hetznerServer;
} }