coolify/app/Livewire/Destination/Show.php

76 lines
2.5 KiB
PHP
Raw Normal View History

2023-06-15 15:38:15 +02:00
<?php
2023-12-07 19:06:32 +01:00
namespace App\Livewire\Destination;
2023-06-15 15:38:15 +02:00
use App\Models\Server;
2024-03-22 11:34:15 +01:00
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
2023-06-15 15:38:15 +02:00
use Illuminate\Support\Collection;
use Livewire\Component;
class Show extends Component
{
public Server $server;
2024-06-10 22:43:34 +02:00
2023-06-15 15:38:15 +02:00
public Collection|array $networks = [];
2024-03-22 11:34:15 +01:00
private function createNetworkAndAttachToProxy()
{
$connectProxyToDockerNetworks = connectProxyToNetworks($this->server);
instant_remote_process($connectProxyToDockerNetworks, $this->server, false);
}
2024-06-10 22:43:34 +02:00
2024-03-22 11:34:15 +01:00
public function add($name)
{
if ($this->server->isSwarm()) {
$found = $this->server->swarmDockers()->where('network', $name)->first();
if ($found) {
$this->dispatch('error', 'Network already added to this server.');
2024-06-10 22:43:34 +02:00
2024-03-22 11:34:15 +01:00
return;
} else {
SwarmDocker::create([
2024-06-10 22:43:34 +02:00
'name' => $this->server->name.'-'.$name,
2024-03-22 11:34:15 +01:00
'network' => $this->name,
'server_id' => $this->server->id,
]);
}
} else {
$found = $this->server->standaloneDockers()->where('network', $name)->first();
if ($found) {
$this->dispatch('error', 'Network already added to this server.');
2024-06-10 22:43:34 +02:00
2024-03-22 11:34:15 +01:00
return;
} else {
StandaloneDocker::create([
2024-06-10 22:43:34 +02:00
'name' => $this->server->name.'-'.$name,
2024-03-22 11:34:15 +01:00
'network' => $name,
'server_id' => $this->server->id,
]);
}
$this->createNetworkAndAttachToProxy();
}
}
2024-06-10 22:43:34 +02:00
2023-06-15 15:38:15 +02:00
public function scan()
{
2023-12-15 15:48:01 +01:00
if ($this->server->isSwarm()) {
$alreadyAddedNetworks = $this->server->swarmDockers;
} else {
$alreadyAddedNetworks = $this->server->standaloneDockers;
}
2023-06-15 15:38:15 +02:00
$networks = instant_remote_process(['docker network ls --format "{{json .}}"'], $this->server, false);
$this->networks = format_docker_command_output_to_json($networks)->filter(function ($network) {
return $network['Name'] !== 'bridge' && $network['Name'] !== 'host' && $network['Name'] !== 'none';
})->filter(function ($network) use ($alreadyAddedNetworks) {
2024-06-10 22:43:34 +02:00
return ! $alreadyAddedNetworks->contains('network', $network['Name']);
2023-06-15 15:38:15 +02:00
});
2023-06-22 09:38:44 +02:00
if ($this->networks->count() === 0) {
2023-12-07 19:06:32 +01:00
$this->dispatch('success', 'No new networks found.');
2024-06-10 22:43:34 +02:00
2024-03-22 11:34:15 +01:00
return;
2023-06-22 09:38:44 +02:00
}
2024-03-22 11:34:15 +01:00
$this->dispatch('success', 'Scan done.');
2023-06-15 15:38:15 +02:00
}
}