refactor: env variable generator
This commit is contained in:
@@ -16,13 +16,13 @@ class StartService
|
|||||||
$commands[] = "cd " . $service->workdir();
|
$commands[] = "cd " . $service->workdir();
|
||||||
$commands[] = "echo 'Saved configuration files to {$service->workdir()}.'";
|
$commands[] = "echo 'Saved configuration files to {$service->workdir()}.'";
|
||||||
$commands[] = "echo 'Creating Docker network.'";
|
$commands[] = "echo 'Creating Docker network.'";
|
||||||
$commands[] = "docker network create --attachable '{$service->uuid}' >/dev/null || true";
|
$commands[] = "docker network create --attachable '{$service->uuid}' >/dev/null 2>&1 || true";
|
||||||
$commands[] = "echo 'Starting service {$service->name} on {$service->server->name}.'";
|
$commands[] = "echo 'Starting service {$service->name} on {$service->server->name}.'";
|
||||||
$commands[] = "echo 'Pulling images.'";
|
$commands[] = "echo 'Pulling images.'";
|
||||||
$commands[] = "docker compose pull";
|
$commands[] = "docker compose pull";
|
||||||
$commands[] = "echo 'Starting containers.'";
|
$commands[] = "echo 'Starting containers.'";
|
||||||
$commands[] = "docker compose up -d --remove-orphans --force-recreate";
|
$commands[] = "docker compose up -d --remove-orphans --force-recreate";
|
||||||
$commands[] = "docker network connect $service->uuid coolify-proxy || true";
|
$commands[] = "docker network connect $service->uuid coolify-proxy >/dev/null 2>&1 || true";
|
||||||
$compose = data_get($service,'docker_compose',[]);
|
$compose = data_get($service,'docker_compose',[]);
|
||||||
$serviceNames = data_get(Yaml::parse($compose),'services',[]);
|
$serviceNames = data_get(Yaml::parse($compose),'services',[]);
|
||||||
foreach($serviceNames as $serviceName => $serviceConfig){
|
foreach($serviceNames as $serviceName => $serviceConfig){
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class ProjectController extends Controller
|
|||||||
$database = create_standalone_mongodb($environment->id, $destination_uuid);
|
$database = create_standalone_mongodb($environment->id, $destination_uuid);
|
||||||
} else if ($type->value() === 'mysql') {
|
} else if ($type->value() === 'mysql') {
|
||||||
$database = create_standalone_mysql($environment->id, $destination_uuid);
|
$database = create_standalone_mysql($environment->id, $destination_uuid);
|
||||||
}else if ($type->value() === 'mariadb') {
|
} else if ($type->value() === 'mariadb') {
|
||||||
$database = create_standalone_mariadb($environment->id, $destination_uuid);
|
$database = create_standalone_mariadb($environment->id, $destination_uuid);
|
||||||
}
|
}
|
||||||
return redirect()->route('project.database.configuration', [
|
return redirect()->route('project.database.configuration', [
|
||||||
@@ -104,27 +104,7 @@ class ProjectController extends Controller
|
|||||||
$generatedValue = $value;
|
$generatedValue = $value;
|
||||||
if ($value->contains('SERVICE_')) {
|
if ($value->contains('SERVICE_')) {
|
||||||
$command = $value->after('SERVICE_')->beforeLast('_');
|
$command = $value->after('SERVICE_')->beforeLast('_');
|
||||||
// TODO: make it shared with Service.php
|
$generatedValue = generateEnvValue($command->value());
|
||||||
switch ($command->value()) {
|
|
||||||
case 'PASSWORD':
|
|
||||||
$generatedValue = Str::password(symbols: false);
|
|
||||||
break;
|
|
||||||
case 'PASSWORD_64':
|
|
||||||
$generatedValue = Str::password(length: 64, symbols: false);
|
|
||||||
break;
|
|
||||||
case 'BASE64_64':
|
|
||||||
$generatedValue = Str::random(64);
|
|
||||||
break;
|
|
||||||
case 'BASE64_128':
|
|
||||||
$generatedValue = Str::random(128);
|
|
||||||
break;
|
|
||||||
case 'BASE64':
|
|
||||||
$generatedValue = Str::random(32);
|
|
||||||
break;
|
|
||||||
case 'USER':
|
|
||||||
$generatedValue = Str::random(16);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
EnvironmentVariable::create([
|
EnvironmentVariable::create([
|
||||||
'key' => $key,
|
'key' => $key,
|
||||||
|
|||||||
@@ -579,7 +579,7 @@ function getTopLevelNetworks(Service|Application $resource)
|
|||||||
return $topLevelNetworks->keys();
|
return $topLevelNetworks->keys();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function parseDockerComposeFile(Service|Application $resource, bool $isNew = false, int $pull_request_id, bool $is_pr = false)
|
function parseDockerComposeFile(Service|Application $resource, bool $isNew = false, int $pull_request_id = 0, bool $is_pr = false)
|
||||||
{
|
{
|
||||||
// ray()->clearAll();
|
// ray()->clearAll();
|
||||||
if ($resource->getMorphClass() === 'App\Models\Service') {
|
if ($resource->getMorphClass() === 'App\Models\Service') {
|
||||||
@@ -921,22 +921,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
'service_id' => $resource->id,
|
'service_id' => $resource->id,
|
||||||
])->first();
|
])->first();
|
||||||
if ($value->startsWith('SERVICE_')) {
|
if ($value->startsWith('SERVICE_')) {
|
||||||
// Count _ in $value
|
['command' => $command, 'forService' => $forService, 'generatedValue' => $generatedValue, 'port' => $port] = parseEnvVariable($value);
|
||||||
$count = substr_count($value->value(), '_');
|
|
||||||
if ($count === 2) {
|
|
||||||
// SERVICE_FQDN_UMAMI
|
|
||||||
$command = $value->after('SERVICE_')->beforeLast('_');
|
|
||||||
$forService = $value->afterLast('_');
|
|
||||||
$generatedValue = null;
|
|
||||||
$port = null;
|
|
||||||
}
|
|
||||||
if ($count === 3) {
|
|
||||||
// SERVICE_FQDN_UMAMI_1000
|
|
||||||
$command = $value->after('SERVICE_')->before('_');
|
|
||||||
$forService = $value->after('SERVICE_')->after('_')->before('_');
|
|
||||||
$generatedValue = null;
|
|
||||||
$port = $value->afterLast('_');
|
|
||||||
}
|
|
||||||
if ($command->value() === 'FQDN' || $command->value() === 'URL') {
|
if ($command->value() === 'FQDN' || $command->value() === 'URL') {
|
||||||
if (Str::lower($forService) === $serviceName) {
|
if (Str::lower($forService) === $serviceName) {
|
||||||
$fqdn = generateFqdn($resource->server, $containerName);
|
$fqdn = generateFqdn($resource->server, $containerName);
|
||||||
@@ -967,27 +952,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch ($command) {
|
$generatedValue = generateEnvValue($command);
|
||||||
case 'PASSWORD':
|
|
||||||
$generatedValue = Str::password(symbols: false);
|
|
||||||
break;
|
|
||||||
case 'PASSWORD_64':
|
|
||||||
$generatedValue = Str::password(length: 64, symbols: false);
|
|
||||||
break;
|
|
||||||
case 'BASE64_64':
|
|
||||||
$generatedValue = Str::random(64);
|
|
||||||
break;
|
|
||||||
case 'BASE64_128':
|
|
||||||
$generatedValue = Str::random(128);
|
|
||||||
break;
|
|
||||||
case 'BASE64':
|
|
||||||
$generatedValue = Str::random(32);
|
|
||||||
break;
|
|
||||||
case 'USER':
|
|
||||||
$generatedValue = Str::random(16);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$foundEnv) {
|
if (!$foundEnv) {
|
||||||
EnvironmentVariable::create([
|
EnvironmentVariable::create([
|
||||||
'key' => $key,
|
'key' => $key,
|
||||||
@@ -1272,7 +1237,6 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
$key = Str::of($variableName);
|
$key = Str::of($variableName);
|
||||||
$value = Str::of($variable);
|
$value = Str::of($variable);
|
||||||
}
|
}
|
||||||
// TODO: here is the problem
|
|
||||||
if ($key->startsWith('SERVICE_FQDN')) {
|
if ($key->startsWith('SERVICE_FQDN')) {
|
||||||
if ($isNew) {
|
if ($isNew) {
|
||||||
$name = $key->after('SERVICE_FQDN_')->beforeLast('_')->lower();
|
$name = $key->after('SERVICE_FQDN_')->beforeLast('_')->lower();
|
||||||
@@ -1315,22 +1279,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
'application_id' => $resource->id,
|
'application_id' => $resource->id,
|
||||||
])->first();
|
])->first();
|
||||||
if ($value->startsWith('SERVICE_')) {
|
if ($value->startsWith('SERVICE_')) {
|
||||||
// Count _ in $value
|
['command' => $command, 'forService' => $forService, 'generatedValue' => $generatedValue, 'port' => $port] = parseEnvVariable($value);
|
||||||
$count = substr_count($value->value(), '_');
|
|
||||||
if ($count === 2) {
|
|
||||||
// SERVICE_FQDN_UMAMI
|
|
||||||
$command = $value->after('SERVICE_')->beforeLast('_');
|
|
||||||
$forService = $value->afterLast('_');
|
|
||||||
$generatedValue = null;
|
|
||||||
$port = null;
|
|
||||||
}
|
|
||||||
if ($count === 3) {
|
|
||||||
// SERVICE_FQDN_UMAMI_1000
|
|
||||||
$command = $value->after('SERVICE_')->before('_');
|
|
||||||
$forService = $value->after('SERVICE_')->after('_')->before('_');
|
|
||||||
$generatedValue = null;
|
|
||||||
$port = $value->afterLast('_');
|
|
||||||
}
|
|
||||||
if ($command->value() === 'FQDN' || $command->value() === 'URL') {
|
if ($command->value() === 'FQDN' || $command->value() === 'URL') {
|
||||||
if (Str::lower($forService) === $serviceName) {
|
if (Str::lower($forService) === $serviceName) {
|
||||||
$fqdn = generateFqdn($server, $containerName);
|
$fqdn = generateFqdn($server, $containerName);
|
||||||
@@ -1355,27 +1304,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch ($command) {
|
$generatedValue = generateEnvValue($command);
|
||||||
case 'PASSWORD':
|
|
||||||
$generatedValue = Str::password(symbols: false);
|
|
||||||
break;
|
|
||||||
case 'PASSWORD_64':
|
|
||||||
$generatedValue = Str::password(length: 64, symbols: false);
|
|
||||||
break;
|
|
||||||
case 'BASE64_64':
|
|
||||||
$generatedValue = Str::random(64);
|
|
||||||
break;
|
|
||||||
case 'BASE64_128':
|
|
||||||
$generatedValue = Str::random(128);
|
|
||||||
break;
|
|
||||||
case 'BASE64':
|
|
||||||
$generatedValue = Str::random(32);
|
|
||||||
break;
|
|
||||||
case 'USER':
|
|
||||||
$generatedValue = Str::random(16);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$foundEnv) {
|
if (!$foundEnv) {
|
||||||
EnvironmentVariable::create([
|
EnvironmentVariable::create([
|
||||||
'key' => $key,
|
'key' => $key,
|
||||||
@@ -1495,3 +1424,65 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
return collect($finalServices);
|
return collect($finalServices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseEnvVariable(Str|string $value)
|
||||||
|
{
|
||||||
|
$value = str($value);
|
||||||
|
$count = substr_count($value->value(), '_');
|
||||||
|
$command = null;
|
||||||
|
$forService = null;
|
||||||
|
$generatedValue = null;
|
||||||
|
$port = null;
|
||||||
|
|
||||||
|
if ($count === 2) {
|
||||||
|
if ($value->startsWith('SERVICE_FQDN') || $value->startsWith('SERVICE_URL')) {
|
||||||
|
// SERVICE_FQDN_UMAMI
|
||||||
|
$command = $value->after('SERVICE_')->beforeLast('_');
|
||||||
|
$forService = $value->afterLast('_');
|
||||||
|
} else {
|
||||||
|
// SERVICE_BASE64_UMAMI
|
||||||
|
$command = $value->after('SERVICE_')->beforeLast('_');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($count === 3) {
|
||||||
|
if ($value->startsWith('SERVICE_FQDN') || $value->startsWith('SERVICE_URL')) {
|
||||||
|
// SERVICE_FQDN_UMAMI_1000
|
||||||
|
$command = $value->after('SERVICE_')->before('_');
|
||||||
|
$forService = $value->after('SERVICE_')->after('_')->before('_');
|
||||||
|
$port = $value->afterLast('_');
|
||||||
|
} else {
|
||||||
|
// SERVICE_BASE64_64_UMAMI
|
||||||
|
$command = $value->after('SERVICE_')->beforeLast('_');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'command' => $command,
|
||||||
|
'forService' => $forService,
|
||||||
|
'generatedValue' => $generatedValue,
|
||||||
|
'port' => $port,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
function generateEnvValue(string $command)
|
||||||
|
{
|
||||||
|
switch ($command) {
|
||||||
|
case 'PASSWORD':
|
||||||
|
$generatedValue = Str::password(symbols: false);
|
||||||
|
break;
|
||||||
|
case 'PASSWORD_64':
|
||||||
|
$generatedValue = Str::password(length: 64, symbols: false);
|
||||||
|
break;
|
||||||
|
case 'BASE64_64':
|
||||||
|
$generatedValue = Str::random(64);
|
||||||
|
break;
|
||||||
|
case 'BASE64_128':
|
||||||
|
$generatedValue = Str::random(128);
|
||||||
|
break;
|
||||||
|
case 'BASE64':
|
||||||
|
$generatedValue = Str::random(32);
|
||||||
|
break;
|
||||||
|
case 'USER':
|
||||||
|
$generatedValue = Str::random(16);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $generatedValue;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user