fix: how to update docker-compose, environment variables and fqdns
This commit is contained in:
		| @@ -88,33 +88,106 @@ function updateCompose(ServiceApplication|ServiceDatabase $resource) | |||||||
|         $dockerCompose = Yaml::parse($dockerComposeRaw); |         $dockerCompose = Yaml::parse($dockerComposeRaw); | ||||||
| 
 | 
 | ||||||
|         // Switch Image
 |         // Switch Image
 | ||||||
|         $image = data_get($resource, 'image'); |         $updatedImage = data_get_str($resource, 'image'); | ||||||
|         data_set($dockerCompose, "services.{$name}.image", $image); |         $currentImage = data_get_str($dockerCompose, "services.{$name}.image"); | ||||||
|         $dockerComposeRaw = Yaml::dump($dockerCompose, 10, 2); |         if ($currentImage !== $updatedImage) { | ||||||
|         $resource->service->docker_compose_raw = $dockerComposeRaw; |             data_set($dockerCompose, "services.{$name}.image", $updatedImage->value()); | ||||||
|         $resource->service->save(); |             $dockerComposeRaw = Yaml::dump($dockerCompose, 10, 2); | ||||||
| 
 |             $resource->service->docker_compose_raw = $dockerComposeRaw; | ||||||
|         if ($resource->fqdn && !str($resource->fqdn)->contains(',')) { |             $resource->service->save(); | ||||||
|             // Update FQDN
 |             $resource->image = $updatedImage; | ||||||
|             $variableName = "SERVICE_FQDN_" . Str::of($resource->name)->upper(); |             $resource->save(); | ||||||
|             $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); |         } | ||||||
|             $fqdn = Url::fromString($resource->fqdn); |         if ($resource->fqdn) { | ||||||
|             $fqdn = $fqdn->getScheme() . '://' . $fqdn->getHost(); |             $resourceFqdns = str($resource->fqdn)->explode(','); | ||||||
|             if ($generatedEnv) { |             if ($resourceFqdns->count() === 1) { | ||||||
|                 $generatedEnv->value = $fqdn; |                 $resourceFqdns = $resourceFqdns->first(); | ||||||
|                 $generatedEnv->save(); |                 $variableName = "SERVICE_FQDN_" . Str::of($resource->name)->upper()->replace('-', ''); | ||||||
|             } |                 $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|             $variableName = "SERVICE_URL_" . Str::of($resource->name)->upper(); |                 $fqdn = Url::fromString($resourceFqdns); | ||||||
|             $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); |                 $port = $fqdn->getPort(); | ||||||
|             $url = Url::fromString($resource->fqdn); |                 $fqdn = $fqdn->getScheme() . '://' . $fqdn->getHost(); | ||||||
|             $url = $url->getHost(); |                 if ($generatedEnv) { | ||||||
|             if ($generatedEnv) { |                     $generatedEnv->value = $fqdn; | ||||||
|                 $url = Str::of($resource->fqdn)->after('://'); |                     $generatedEnv->save(); | ||||||
|                 $generatedEnv->value = $url; |                 } | ||||||
|                 $generatedEnv->save(); |                 if ($port) { | ||||||
|  |                     $variableName = $variableName . "_$port"; | ||||||
|  |                     $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|  |                     if ($generatedEnv) { | ||||||
|  |                         $generatedEnv->value = $fqdn . ':' . $port; | ||||||
|  |                         $generatedEnv->save(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 $variableName = "SERVICE_URL_" . Str::of($resource->name)->upper()->replace('-', ''); | ||||||
|  |                 $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|  |                 $url = Url::fromString($fqdn); | ||||||
|  |                 $port = $url->getPort(); | ||||||
|  |                 $url = $url->getHost(); | ||||||
|  |                 if ($generatedEnv) { | ||||||
|  |                     $url = Str::of($fqdn)->after('://'); | ||||||
|  |                     $generatedEnv->value = $url; | ||||||
|  |                     $generatedEnv->save(); | ||||||
|  |                 } | ||||||
|  |                 if ($port) { | ||||||
|  |                     $variableName = $variableName . "_$port"; | ||||||
|  |                     $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|  |                     if ($generatedEnv) { | ||||||
|  |                         $generatedEnv->value = $url . ':' . $port; | ||||||
|  |                         $generatedEnv->save(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } else if ($resourceFqdns->count() > 1) { | ||||||
|  |                 foreach ($resourceFqdns as $fqdn) { | ||||||
|  |                     $host = Url::fromString($fqdn); | ||||||
|  |                     $port = $host->getPort(); | ||||||
|  |                     $url = $host->getHost(); | ||||||
|  |                     $host = $host->getScheme() . '://' . $host->getHost(); | ||||||
|  |                     if ($port) { | ||||||
|  |                         $port_envs = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', 'like', "SERVICE_FQDN_%_$port")->get(); | ||||||
|  |                         foreach ($port_envs as $port_env) { | ||||||
|  |                             $service_fqdn = str($port_env->key)->beforeLast('_')->after('SERVICE_FQDN_'); | ||||||
|  |                             $env = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', 'SERVICE_FQDN_' . $service_fqdn)->first(); | ||||||
|  |                             if ($env) { | ||||||
|  |                                 $env->value = $host; | ||||||
|  |                                 $env->save(); | ||||||
|  |                             } | ||||||
|  |                             $port_env->value = $host . ':' . $port; | ||||||
|  |                             $port_env->save(); | ||||||
|  |                         } | ||||||
|  |                         $port_envs_url = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', 'like', "SERVICE_URL_%_$port")->get(); | ||||||
|  |                         foreach ($port_envs_url as $port_env_url) { | ||||||
|  |                             $service_url = str($port_env_url->key)->beforeLast('_')->after('SERVICE_URL_'); | ||||||
|  |                             $env = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', 'SERVICE_URL_' . $service_url)->first(); | ||||||
|  |                             if ($env) { | ||||||
|  |                                 $env->value = $url; | ||||||
|  |                                 $env->save(); | ||||||
|  |                             } | ||||||
|  |                             $port_env_url->value = $url . ':' . $port; | ||||||
|  |                             $port_env_url->save(); | ||||||
|  |                         } | ||||||
|  |                     } else { | ||||||
|  |                         $variableName = "SERVICE_FQDN_" . Str::of($resource->name)->upper()->replace('-', ''); | ||||||
|  |                         $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|  |                         $fqdn = Url::fromString($fqdn); | ||||||
|  |                         $fqdn = $fqdn->getScheme() . '://' . $fqdn->getHost(); | ||||||
|  |                         if ($generatedEnv) { | ||||||
|  |                             $generatedEnv->value = $fqdn; | ||||||
|  |                             $generatedEnv->save(); | ||||||
|  |                         } | ||||||
|  |                         $variableName = "SERVICE_URL_" . Str::of($resource->name)->upper()->replace('-', ''); | ||||||
|  |                         $generatedEnv = EnvironmentVariable::where('service_id', $resource->service_id)->where('key', $variableName)->first(); | ||||||
|  |                         $url = Url::fromString($fqdn); | ||||||
|  |                         $url = $url->getHost(); | ||||||
|  |                         if ($generatedEnv) { | ||||||
|  |                             $url = Str::of($fqdn)->after('://'); | ||||||
|  |                             $generatedEnv->value = $url; | ||||||
|  |                             $generatedEnv->save(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|     } catch (\Throwable $e) { |     } catch (\Throwable $e) { | ||||||
|         return handleError($e); |         return handleError($e); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1168,6 +1168,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal | |||||||
|                 // });
 |                 // });
 | ||||||
|                 // ray($withoutServiceEnvs);
 |                 // ray($withoutServiceEnvs);
 | ||||||
|                 // data_set($service, 'environment', $withoutServiceEnvs->toArray());
 |                 // data_set($service, 'environment', $withoutServiceEnvs->toArray());
 | ||||||
|  |                 updateCompose($savedService); | ||||||
|                 return $service; |                 return $service; | ||||||
|             }); |             }); | ||||||
|             $finalServices = [ |             $finalServices = [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai