feat: add persistent volumes

This commit is contained in:
Andras Bacsai 2023-04-04 15:25:42 +02:00
parent 302f224bc0
commit 2d17c15b71
4 changed files with 37 additions and 19 deletions

View File

@ -154,6 +154,8 @@ class DeployApplicationJob implements ShouldQueue
private function generate_docker_compose() private function generate_docker_compose()
{ {
$persistentStorages = $this->generate_local_persistent_volumes();
$volume_names = $this->generate_local_persistent_volumes_only_volume_names();
$docker_compose = [ $docker_compose = [
'version' => '3.8', 'version' => '3.8',
'services' => [ 'services' => [
@ -192,15 +194,36 @@ class DeployApplicationJob implements ShouldQueue
if (count($this->application->ports_mappings) > 0) { if (count($this->application->ports_mappings) > 0) {
$docker_compose['services'][$this->application->uuid]['ports'] = $this->application->ports_mappings; $docker_compose['services'][$this->application->uuid]['ports'] = $this->application->ports_mappings;
} }
// if (count($volumes) > 0) { if (count($persistentStorages) > 0) {
// $docker_compose['services'][$this->application->uuid]['volumes'] = $volumes; $docker_compose['services'][$this->application->uuid]['volumes'] = $persistentStorages;
// } }
// if (count($volume_names) > 0) { if (count($volume_names) > 0) {
// $docker_compose['volumes'] = $volume_names; $docker_compose['volumes'] = $volume_names;
// } }
return Yaml::dump($docker_compose); return Yaml::dump($docker_compose);
} }
private function generate_local_persistent_volumes()
{
foreach ($this->application->persistentStorages as $persistentStorage) {
$volume_name = $persistentStorage->host_path ?? $persistentStorage->name;
$local_persistent_volumes[] = $volume_name . ':' . $persistentStorage->mount_path;
}
return $local_persistent_volumes ?? [];
}
private function generate_local_persistent_volumes_only_volume_names()
{
foreach ($this->application->persistentStorages as $persistentStorage) {
if ($persistentStorage->host_path) {
continue;
}
$local_persistent_volumes_names[$persistentStorage->name] = [
'name' => $persistentStorage->name,
'external' => false,
];
}
return $local_persistent_volumes_names ?? [];
}
private function generate_healthcheck_commands() private function generate_healthcheck_commands()
{ {
if (!$this->application->health_check_port) { if (!$this->application->health_check_port) {
@ -208,18 +231,12 @@ class DeployApplicationJob implements ShouldQueue
} }
if ($this->application->health_check_path) { if ($this->application->health_check_path) {
$generated_healthchecks_commands = [ $generated_healthchecks_commands = [
"curl -X {$this->application->health_check_method} -f {$this->application->health_check_scheme}://{$this->application->health_check_host}:{$this->application->health_check_port}{$this->application->health_check_path}" "curl -s -X {$this->application->health_check_method} -f {$this->application->health_check_scheme}://{$this->application->health_check_host}:{$this->application->health_check_port}{$this->application->health_check_path} > /dev/null"
]; ];
} else { } else {
$generated_healthchecks_commands = []; $generated_healthchecks_commands = [
foreach ($this->application->ports_exposes as $key => $port) { "curl -s -X {$this->application->health_check_method} -f {$this->application->health_check_scheme}://{$this->application->health_check_host}:{$this->application->health_check_port}/"
$generated_healthchecks_commands = [ ];
"curl -X {$this->application->health_check_method} -f {$this->application->health_check_scheme}://{$this->application->health_check_host}:{$port}/"
];
if (count($this->application->ports_exposes) != $key + 1) {
$generated_healthchecks_commands[] = '&&';
}
}
} }
return implode(' ', $generated_healthchecks_commands); return implode(' ', $generated_healthchecks_commands);
} }

View File

@ -40,7 +40,7 @@ return new class extends Migration
$table->string('base_directory')->default('/'); $table->string('base_directory')->default('/');
$table->string('publish_directory')->nullable(); $table->string('publish_directory')->nullable();
$table->string('health_check_path')->nullable(); $table->string('health_check_path')->default('/');
$table->string('health_check_port')->nullable(); $table->string('health_check_port')->nullable();
$table->string('health_check_host')->default('localhost'); $table->string('health_check_host')->default('localhost');
$table->string('health_check_method')->default('GET'); $table->string('health_check_method')->default('GET');

View File

@ -18,7 +18,6 @@ class DatabaseSeeder extends Seeder
ProjectSeeder::class, ProjectSeeder::class,
ProjectSettingSeeder::class, ProjectSettingSeeder::class,
EnvironmentSeeder::class, EnvironmentSeeder::class,
LocalPersistentVolumeSeeder::class,
StandaloneDockerSeeder::class, StandaloneDockerSeeder::class,
SwarmDockerSeeder::class, SwarmDockerSeeder::class,
KubernetesSeeder::class, KubernetesSeeder::class,
@ -28,6 +27,7 @@ class DatabaseSeeder extends Seeder
ApplicationSettingsSeeder::class, ApplicationSettingsSeeder::class,
DBSeeder::class, DBSeeder::class,
ServiceSeeder::class, ServiceSeeder::class,
LocalPersistentVolumeSeeder::class,
]); ]);
} }
} }

View File

@ -13,10 +13,11 @@ class LocalPersistentVolumeSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
$application = Application::where('name', 'Public application (from GitHub)')->first();
LocalPersistentVolume::create([ LocalPersistentVolume::create([
'name' => 'test-pv', 'name' => 'test-pv',
'mount_path' => '/data', 'mount_path' => '/data',
'resource_id' => 1, 'resource_id' => $application->id,
'resource_type' => Application::class, 'resource_type' => Application::class,
]); ]);
} }