This commit is contained in:
Andras Bacsai 2023-03-27 14:31:42 +02:00
parent 1c87146a50
commit 653efb6983
21 changed files with 180 additions and 29 deletions

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Livewire;
use App\Models\Application;
use Livewire\Component;
class TemporaryCheckStatus extends Component
{
public $application_id;
public function checkStatus() {
dd(Application::find(1)->environments);
}
public function render()
{
return view('livewire.temporary-check-status');
}
}

View File

@ -8,4 +8,8 @@ public function environments()
{ {
return $this->morphToMany(Environment::class, 'environmentable'); return $this->morphToMany(Environment::class, 'environmentable');
} }
public function destination()
{
return $this->morphTo();
}
} }

View File

@ -4,13 +4,8 @@
class PrivateKey extends BaseModel class PrivateKey extends BaseModel
{ {
public function private_keyables()
{
return $this->hasMany(PrivateKeyable::class);
}
public function servers() public function servers()
{ {
return $this->morphedByMany(Server::class, 'private_keyable'); return $this->hasMany(Server::class);
} }
} }

View File

@ -4,8 +4,8 @@
class Server extends BaseModel class Server extends BaseModel
{ {
public function privateKeys() public function privateKey()
{ {
return $this->morphToMany(PrivateKey::class, 'private_keyable'); return $this->belongsTo(PrivateKey::class);
} }
} }

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
class StandaloneDocker extends BaseModel
{
public function applications()
{
return $this->morphMany(Application::class, 'destination');
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
class SwarmDocker extends BaseModel
{
public function applications()
{
return $this->morphMany(Application::class, 'destination');
}
}

View File

@ -13,4 +13,7 @@ class Team extends BaseModel
public function projects() { public function projects() {
return $this->hasMany(Project::class); return $this->hasMany(Project::class);
} }
public function servers() {
return $this->hasMany(Server::class);
}
} }

View File

@ -20,6 +20,7 @@ public function up(): void
$table->integer('port')->default(22); $table->integer('port')->default(22);
$table->string('user')->default('root'); $table->string('user')->default('root');
$table->foreignId('team_id'); $table->foreignId('team_id');
$table->foreignId('private_key_id');
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -17,7 +17,6 @@ public function up(): void
$table->string('name'); $table->string('name');
$table->string('description')->nullable(); $table->string('description')->nullable();
$table->longText('private_key'); $table->longText('private_key');
$table->nullableMorphs('private_keys_morph');
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -15,6 +15,7 @@ public function up(): void
$table->id(); $table->id();
$table->string('uuid')->unique(); $table->string('uuid')->unique();
$table->string('name'); $table->string('name');
$table->nullableMorphs('destination');
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -11,11 +11,12 @@
*/ */
public function up(): void public function up(): void
{ {
Schema::create('private_keyables', function (Blueprint $table) { Schema::create('standalone_dockers', function (Blueprint $table) {
$table->id(); $table->id();
$table->unsignedBigInteger('private_key_id'); $table->string('uuid')->unique();
$table->unsignedBigInteger('private_keyable_id'); $table->string('network');
$table->string('private_keyable_type');
$table->foreignId('server_id');
$table->timestamps(); $table->timestamps();
}); });
} }
@ -25,6 +26,6 @@ public function up(): void
*/ */
public function down(): void public function down(): void
{ {
Schema::dropIfExists('private_keyables'); Schema::dropIfExists('standalone_dockers');
} }
}; };

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('swarm_dockers', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->string('network');
$table->foreignId('server_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('swarm_dockers');
}
};

View File

@ -3,10 +3,13 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\Application; use App\Models\Application;
use App\Models\Destination;
use App\Models\Environment; use App\Models\Environment;
use App\Models\Project; use App\Models\Project;
use App\Models\StandaloneDocker;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ApplicationSeeder extends Seeder class ApplicationSeeder extends Seeder
{ {
@ -16,9 +19,13 @@ class ApplicationSeeder extends Seeder
public function run(): void public function run(): void
{ {
$environment_1 = Environment::find(1); $environment_1 = Environment::find(1);
$standalone_docker_1 = StandaloneDocker::find(1);
$application_1 = Application::create([ $application_1 = Application::create([
'id' => 1, 'id' => 1,
'name' => 'My first application', 'name' => 'My first application',
'destination_id' => $standalone_docker_1->id,
'destination_type' => StandaloneDocker::class,
]); ]);
$environment_1->applications()->attach($application_1); $environment_1->applications()->attach($application_1);
} }

View File

@ -2,6 +2,7 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\StandaloneDocker;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
@ -12,11 +13,13 @@ public function run(): void
$this->call([ $this->call([
UserSeeder::class, UserSeeder::class,
TeamSeeder::class, TeamSeeder::class,
ServerSeeder::class,
PrivateKeySeeder::class, PrivateKeySeeder::class,
ServerSeeder::class,
ProjectSeeder::class, ProjectSeeder::class,
ProjectSettingSeeder::class, ProjectSettingSeeder::class,
EnvironmentSeeder::class, EnvironmentSeeder::class,
StandaloneDockerSeeder::class,
SwarmDockerSeeder::class,
ApplicationSeeder::class, ApplicationSeeder::class,
DBSeeder::class, DBSeeder::class,
]); ]);

View File

@ -14,9 +14,7 @@ class PrivateKeySeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
$server = Server::find(1); PrivateKey::create([
$server2 = Server::find(2);
$private_key = PrivateKey::create([
"name" => "Testing-host", "name" => "Testing-host",
"description" => "This is a test docker container", "description" => "This is a test docker container",
"private_key" => "-----BEGIN OPENSSH PRIVATE KEY----- "private_key" => "-----BEGIN OPENSSH PRIVATE KEY-----
@ -26,9 +24,7 @@ public function run(): void
AAAECBQw4jg1WRT2IGHMncCiZhURCts2s24HoDS0thHnnRKVuGmoeGq/pojrsyP1pszcNV AAAECBQw4jg1WRT2IGHMncCiZhURCts2s24HoDS0thHnnRKVuGmoeGq/pojrsyP1pszcNV
uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
-----END OPENSSH PRIVATE KEY----- -----END OPENSSH PRIVATE KEY-----
", "
]); ]);
$server->privateKeys()->attach($private_key);
$server2->privateKeys()->attach($private_key);
} }
} }

View File

@ -2,10 +2,12 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\PrivateKey;
use App\Models\Server; use App\Models\Server;
use App\Models\Team; use App\Models\Team;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ServerSeeder extends Seeder class ServerSeeder extends Seeder
{ {
@ -15,12 +17,14 @@ class ServerSeeder extends Seeder
public function run(): void public function run(): void
{ {
$root_team = Team::find(1); $root_team = Team::find(1);
Server::create([ $private_key_1 = PrivateKey::find(1);
$server_1 = Server::create([
'id' => 1, 'id' => 1,
'name' => "testing-host", 'name' => "testing-host",
'description' => "This is a test docker container", 'description' => "This is a test docker container",
'ip' => "coolify-testing-host", 'ip' => "coolify-testing-host",
'team_id' => $root_team->id, 'team_id' => $root_team->id,
'private_key_id' => $private_key_1->id,
]); ]);
Server::create([ Server::create([
'id' => 2, 'id' => 2,
@ -28,6 +32,8 @@ public function run(): void
'description' => "This is a test docker container", 'description' => "This is a test docker container",
'ip' => "coolify-testing-host-2", 'ip' => "coolify-testing-host-2",
'team_id' => $root_team->id, 'team_id' => $root_team->id,
'private_key_id' => $private_key_1->id,
]); ]);
} }
} }

View File

@ -0,0 +1,25 @@
<?php
namespace Database\Seeders;
use App\Models\Destination;
use App\Models\Server;
use App\Models\StandaloneDocker;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class StandaloneDockerSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$server_1 = Server::find(1);
StandaloneDocker::create([
'id' => 1,
'network' => 'coolify',
'server_id' => $server_1->id,
]);
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace Database\Seeders;
use App\Models\Destination;
use App\Models\Server;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class SwarmDockerSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$server_1 = Server::find(1);
SwarmDocker::create([
'id' => 1,
'network' => 'coolify-swarms',
'server_id' => $server_1->id,
]);
}
}

View File

@ -11,14 +11,23 @@
<h2>Environments</h2> <h2>Environments</h2>
@forelse ($project->environments as $environment) @forelse ($project->environments as $environment)
<p>Environment Name: {{ $environment->name }}</p> <p>Environment Name: {{ $environment->name }}</p>
<p>Applications: {{ $environment->applications }}</p> @forelse ($environment->applications as $application)
<p>Databases: {{ $environment->databases }}</p> <p>Application: {{ $application }}</p>
@empty <livewire:temporary-check-status :application_id="$application->id" />
<p>No environments found</p> @empty
@endforelse <li>No application found</li>
</li> @endforelse
@forelse ($environment->databases as $database)
<p>Database: {{ $database }}</p>
@empty @empty
<li>No projects found</li> <li>No database found</li>
@endforelse
@empty
<p>No environments found</p>
@endforelse
</li>
@empty
<li>No projects found</li>
@endforelse @endforelse
</ul> </ul>
</x-layout> </x-layout>

View File

@ -0,0 +1,3 @@
<div>
<button wire:click='checkStatus'>Check Status</button>
</div>