fix: handle different label formats in services

This commit is contained in:
Andras Bacsai 2023-11-20 15:01:35 +01:00
parent 608f0b7840
commit 30f8e8f232
2 changed files with 85 additions and 39 deletions

View File

@ -53,26 +53,47 @@ class Service extends BaseModel
$image = str($application->image)->before(':')->value(); $image = str($application->image)->before(':')->value();
switch ($image) { switch ($image) {
case str($image)->contains('minio'): case str($image)->contains('minio'):
$data = collect([]);
$console_url = $this->environment_variables()->where('key', 'MINIO_BROWSER_REDIRECT_URL')->first(); $console_url = $this->environment_variables()->where('key', 'MINIO_BROWSER_REDIRECT_URL')->first();
$s3_api_url = $this->environment_variables()->where('key', 'MINIO_SERVER_URL')->first(); $s3_api_url = $this->environment_variables()->where('key', 'MINIO_SERVER_URL')->first();
$admin_user = $this->environment_variables()->where('key', 'SERVICE_USER_MINIO')->first(); $admin_user = $this->environment_variables()->where('key', 'SERVICE_USER_MINIO')->first();
if (is_null($admin_user)) {
$admin_user = $this->environment_variables()->where('key', 'MINIO_ROOT_USER')->first();
}
$admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_MINIO')->first(); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_MINIO')->first();
$fields->put('MinIO', [ if (is_null($admin_password)) {
$admin_password = $this->environment_variables()->where('key', 'MINIO_ROOT_PASSWORD')->first();
}
if ($console_url) {
$data = $data->merge([
'Console URL' => [ 'Console URL' => [
'key' => data_get($console_url, 'key'), 'key' => data_get($console_url, 'key'),
'value' => data_get($console_url, 'value'), 'value' => data_get($console_url, 'value'),
'rules' => 'required|url', 'rules' => 'required|url',
], ],
]);
}
if ($s3_api_url) {
$data = $data->merge([
'S3 API URL' => [ 'S3 API URL' => [
'key' => data_get($s3_api_url, 'key'), 'key' => data_get($s3_api_url, 'key'),
'value' => data_get($s3_api_url, 'value'), 'value' => data_get($s3_api_url, 'value'),
'rules' => 'required|url', 'rules' => 'required|url',
], ],
]);
}
if ($admin_user) {
$data = $data->merge([
'Admin User' => [ 'Admin User' => [
'key' => data_get($admin_user, 'key'), 'key' => data_get($admin_user, 'key'),
'value' => data_get($admin_user, 'value'), 'value' => data_get($admin_user, 'value'),
'rules' => 'required', 'rules' => 'required',
], ],
]);
}
if ($admin_password) {
$data = $data->merge([
'Admin Password' => [ 'Admin Password' => [
'key' => data_get($admin_password, 'key'), 'key' => data_get($admin_password, 'key'),
'value' => data_get($admin_password, 'value'), 'value' => data_get($admin_password, 'value'),
@ -80,16 +101,26 @@ class Service extends BaseModel
'isPassword' => true, 'isPassword' => true,
], ],
]); ]);
}
$fields->put('MinIO', $data->toArray());
break; break;
case str($image)->contains('weblate'): case str($image)->contains('weblate'):
$data = collect([]);
$admin_email = $this->environment_variables()->where('key', 'WEBLATE_ADMIN_EMAIL')->first(); $admin_email = $this->environment_variables()->where('key', 'WEBLATE_ADMIN_EMAIL')->first();
$admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_WEBLATE')->first(); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_WEBLATE')->first();
$fields->put('Weblate', [
if ($admin_email) {
$data = $data->merge([
'Admin Email' => [ 'Admin Email' => [
'key' => data_get($admin_email, 'key'), 'key' => data_get($admin_email, 'key'),
'value' => data_get($admin_email, 'value'), 'value' => data_get($admin_email, 'value'),
'rules' => 'required|email', 'rules' => 'required|email',
], ],
]);
}
if ($admin_password) {
$data = $data->merge([
'Admin Password' => [ 'Admin Password' => [
'key' => data_get($admin_password, 'key'), 'key' => data_get($admin_password, 'key'),
'value' => data_get($admin_password, 'value'), 'value' => data_get($admin_password, 'value'),
@ -98,6 +129,8 @@ class Service extends BaseModel
], ],
]); ]);
} }
$fields->put('Weblate', $data);
}
} }
$databases = $this->databases()->get(); $databases = $this->databases()->get();
@ -367,6 +400,19 @@ class Service extends BaseModel
$serviceNetworks = collect(data_get($service, 'networks', [])); $serviceNetworks = collect(data_get($service, 'networks', []));
$serviceVariables = collect(data_get($service, 'environment', [])); $serviceVariables = collect(data_get($service, 'environment', []));
$serviceLabels = collect(data_get($service, 'labels', [])); $serviceLabels = collect(data_get($service, 'labels', []));
if ($serviceLabels->count() > 0) {
$removedLabels = collect([]);
$serviceLabels = $serviceLabels->filter(function ($serviceLabel, $serviceLabelName) use ($removedLabels) {
if (!str($serviceLabel)->contains('=')) {
$removedLabels->put($serviceLabelName, $serviceLabel);
return false;
}
return $serviceLabel;
});
foreach($removedLabels as $removedLabelName =>$removedLabel) {
$serviceLabels->push("$removedLabelName=$removedLabel");
}
}
$containerName = "$serviceName-{$this->uuid}"; $containerName = "$serviceName-{$this->uuid}";

View File

@ -17,10 +17,10 @@
<h3>Service Specific Configuration</h3> <h3>Service Specific Configuration</h3>
</div> </div>
<div class="grid grid-cols-2 gap-2"> <div class="grid grid-cols-2 gap-2">
@foreach ($fields as $serviceName => $fields) @foreach ($fields as $serviceName => $field)
<x-forms.input type="{{ data_get($fields, 'isPassword') ? 'password' : 'text' }}" required <x-forms.input type="{{ data_get($field, 'isPassword') ? 'password' : 'text' }}" required
helper="Variable name: {{ $serviceName }}" helper="Variable name: {{ $serviceName }}"
label="{{ data_get($fields, 'serviceName') }} {{ data_get($fields, 'name') }}" label="{{ data_get($field, 'serviceName') }} {{ data_get($field, 'name') }}"
id="fields.{{ $serviceName }}.value"></x-forms.input> id="fields.{{ $serviceName }}.value"></x-forms.input>
@endforeach @endforeach
</div> </div>