71 lines
2.4 KiB
PHP
71 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Convoy\Services\Servers;
|
|
|
|
use Convoy\Data\Server\Proxmox\Config\DiskData;
|
|
use Convoy\Enums\Server\DiskInterface;
|
|
use Convoy\Models\Server;
|
|
use Convoy\Repositories\Proxmox\Server\ProxmoxConfigRepository;
|
|
use Convoy\Repositories\Proxmox\Server\ProxmoxDiskRepository;
|
|
use Illuminate\Support\Arr;
|
|
|
|
readonly class SyncBuildService
|
|
{
|
|
public function __construct(
|
|
private AllocationService $allocationService,
|
|
private CloudinitService $cloudinitService,
|
|
private NetworkService $networkService,
|
|
private ServerDetailService $detailService,
|
|
private ProxmoxConfigRepository $allocationRepository,
|
|
private ProxmoxDiskRepository $diskRepository,
|
|
)
|
|
{
|
|
}
|
|
|
|
public function handle(Server $server): void
|
|
{
|
|
$this->allocationRepository->setServer($server);
|
|
|
|
$eloquentDetails = $this->detailService->getByEloquent($server);
|
|
$disks = $this->allocationService->getDisks($server);
|
|
$bootOrder = $this->allocationService->getBootOrder($server);
|
|
|
|
$this->allocationService->syncSettings($server);
|
|
|
|
/* Sync metadata */
|
|
$this->cloudinitService->updateHostname($server, $eloquentDetails->hostname);
|
|
|
|
/* Sync network configuration */
|
|
$this->networkService->syncSettings($server);
|
|
|
|
/* Sync rate limit */
|
|
if (isset($server->rate_limit) && $server->rate_limit > 0) {
|
|
$this->networkService->updateRateLimit($server, (float) $server->rate_limit);
|
|
} else {
|
|
$this->networkService->updateRateLimit($server);
|
|
}
|
|
|
|
// find a disk that has a corresponding disk in the deployment
|
|
$disksArray = collect($disks->toArray())->pluck('interface')->all();
|
|
$bootOrder = array_filter(
|
|
collect($bootOrder->filter(fn (DiskData $disk) => !$disk->is_media)->toArray())->pluck(
|
|
'interface',
|
|
)->toArray(), fn ($disk) => in_array($disk, $disksArray),
|
|
);
|
|
|
|
if (count($bootOrder) > 0) {
|
|
/** @var DiskData $disk */
|
|
$disk = $disks->where('interface', '=', DiskInterface::from(Arr::first($bootOrder)))
|
|
->first();
|
|
|
|
$diff = $server->disk - $disk->size;
|
|
|
|
if ($diff > 0) {
|
|
$this->diskRepository->setServer($server)->resizeDisk(
|
|
$disk->interface, $server->disk,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|