mirror of
https://github.com/coollabsio/coolify.git
synced 2026-03-11 08:55:47 +00:00
Merge branch 'docker-image-login-davidh' into docker-image-login
This commit is contained in:
commit
03bfcfb0e6
4 changed files with 73 additions and 1 deletions
37
app/Actions/Docker/ListServerDockerImages.php
Normal file
37
app/Actions/Docker/ListServerDockerImages.php
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Actions\Docker;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
|
use Lorisleiva\Actions\Concerns\AsAction;
|
||||||
|
|
||||||
|
class ListServerDockerImages
|
||||||
|
{
|
||||||
|
use AsAction;
|
||||||
|
|
||||||
|
public Collection $server;
|
||||||
|
|
||||||
|
public static function run($server)
|
||||||
|
{
|
||||||
|
|
||||||
|
$jsonString = instant_remote_process(["docker images --format '{{json .}}'"], $server);
|
||||||
|
|
||||||
|
return collect(explode("\n", trim($jsonString)))
|
||||||
|
->filter()
|
||||||
|
->map(function ($line) {
|
||||||
|
$data = json_decode($line, true);
|
||||||
|
if (!$data) return null;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'tag' => $data['Tag'] ?? '<none>',
|
||||||
|
'id' => $data['ID'] ?? '',
|
||||||
|
'created_at' => $data['CreatedAt'] ?? '',
|
||||||
|
'size' => $data['Size'] ?? '',
|
||||||
|
'name' => $data['Repository'] ?? '',
|
||||||
|
];
|
||||||
|
})
|
||||||
|
->filter()
|
||||||
|
->values()
|
||||||
|
->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
31
app/Http/Controllers/Api/DockerController.php
Normal file
31
app/Http/Controllers/Api/DockerController.php
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Actions\Docker\ListServerDockerImages;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\Server;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
|
||||||
|
class DockerController extends Controller
|
||||||
|
{
|
||||||
|
public function list_server_docker_images($server_uuid)
|
||||||
|
{
|
||||||
|
|
||||||
|
$query = Server::query();
|
||||||
|
|
||||||
|
$server = $query->where('uuid', $server_uuid)->first();
|
||||||
|
if (!$server) {
|
||||||
|
return response()->json(['error' => 'server not found'], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$isReachable = (bool) $server->settings->is_reachable;
|
||||||
|
// If the server is reachable, send the reachable notification if it was sent before
|
||||||
|
if ($isReachable !== true) {
|
||||||
|
return response()->json(['error' => 'server is not reachable.'], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json(ListServerDockerImages::run($server));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -70,7 +70,7 @@ class Rollback extends Component
|
||||||
];
|
];
|
||||||
})->toArray();
|
})->toArray();
|
||||||
}
|
}
|
||||||
$showToast && $this->dispatch('success', 'Images loaded.');
|
$showToast && $this->dispatch('success', 'ListServerDockerImages loaded.');
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
use App\Http\Controllers\Api\ApplicationsController;
|
use App\Http\Controllers\Api\ApplicationsController;
|
||||||
use App\Http\Controllers\Api\DatabasesController;
|
use App\Http\Controllers\Api\DatabasesController;
|
||||||
use App\Http\Controllers\Api\DeployController;
|
use App\Http\Controllers\Api\DeployController;
|
||||||
|
use App\Http\Controllers\Api\DockerController;
|
||||||
use App\Http\Controllers\Api\OtherController;
|
use App\Http\Controllers\Api\OtherController;
|
||||||
use App\Http\Controllers\Api\ProjectController;
|
use App\Http\Controllers\Api\ProjectController;
|
||||||
use App\Http\Controllers\Api\ResourcesController;
|
use App\Http\Controllers\Api\ResourcesController;
|
||||||
|
|
@ -128,8 +129,11 @@ Route::group([
|
||||||
Route::match(['get', 'post'], '/services/{uuid}/start', [ServicesController::class, 'action_deploy'])->middleware([IgnoreReadOnlyApiToken::class]);
|
Route::match(['get', 'post'], '/services/{uuid}/start', [ServicesController::class, 'action_deploy'])->middleware([IgnoreReadOnlyApiToken::class]);
|
||||||
Route::match(['get', 'post'], '/services/{uuid}/restart', [ServicesController::class, 'action_restart'])->middleware([IgnoreReadOnlyApiToken::class]);
|
Route::match(['get', 'post'], '/services/{uuid}/restart', [ServicesController::class, 'action_restart'])->middleware([IgnoreReadOnlyApiToken::class]);
|
||||||
Route::match(['get', 'post'], '/services/{uuid}/stop', [ServicesController::class, 'action_stop'])->middleware([IgnoreReadOnlyApiToken::class]);
|
Route::match(['get', 'post'], '/services/{uuid}/stop', [ServicesController::class, 'action_stop'])->middleware([IgnoreReadOnlyApiToken::class]);
|
||||||
|
|
||||||
|
Route::get('/docker/images/{server_uuid}', [DockerController::class, 'list_server_docker_images']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
Route::group([
|
Route::group([
|
||||||
'prefix' => 'v1',
|
'prefix' => 'v1',
|
||||||
], function () {
|
], function () {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue