Skip to content

Commit 622df9d

Browse files
committed
add startup variables to server creation modal
closes #102
1 parent 0381a15 commit 622df9d

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

user-creatable-servers/lang/en/strings.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
'name' => 'Server Name',
1414
'egg' => 'Egg',
1515
'left' => 'left',
16+
'variables' => 'Startup variables',
1617

1718
'modals' => [
1819
'delete_server_confirm' => 'Are you sure you want to delete this server?',

user-creatable-servers/src/Filament/Components/Actions/CreateServerAction.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44

55
use App\Exceptions\Service\Deployment\NoViableAllocationException;
66
use App\Exceptions\Service\Deployment\NoViableNodeException;
7+
use App\Filament\Components\Forms\Fields\StartupVariable;
78
use App\Filament\Server\Pages\Console;
89
use App\Models\Egg;
910
use App\Services\Servers\RandomWordService;
1011
use Boy132\UserCreatableServers\Models\UserResourceLimits;
1112
use Exception;
1213
use Filament\Actions\Action;
14+
use Filament\Forms\Components\Repeater;
1315
use Filament\Forms\Components\Select;
1416
use Filament\Forms\Components\TextInput;
1517
use Filament\Notifications\Notification;
18+
use Filament\Schemas\Components\Utilities\Get;
19+
use Filament\Schemas\Components\Utilities\Set;
20+
use Illuminate\Support\Arr;
1621

1722
class CreateServerAction extends Action
1823
{
@@ -54,7 +59,23 @@ protected function setUp(): void
5459
->options(fn () => Egg::all()->mapWithKeys(fn (Egg $egg) => [$egg->id => $egg->name]))
5560
->required()
5661
->searchable()
57-
->preload(),
62+
->preload()
63+
->live()
64+
->afterStateUpdated(function ($state, Set $set) {
65+
$egg = Egg::find($state);
66+
67+
$variables = $egg->variables ?? [];
68+
$serverVariables = collect();
69+
foreach ($variables as $variable) {
70+
$serverVariables->add($variable->toArray());
71+
}
72+
73+
$set('variables', $serverVariables->sortBy(['sort'])->all());
74+
for ($i = 0; $i < $serverVariables->count(); $i++) {
75+
$set("variables.$i.variable_value", $serverVariables[$i]['default_value']);
76+
$set("variables.$i.variable_id", $serverVariables[$i]['id']);
77+
}
78+
}),
5879
TextInput::make('cpu')
5980
->label(trans('user-creatable-servers::strings.cpu'))
6081
->required()
@@ -76,6 +97,20 @@ protected function setUp(): void
7697
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
7798
->maxValue($userResourceLimits->getDiskLeft())
7899
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB'),
100+
Repeater::make('variables')
101+
->label(trans('user-creatable-servers::strings.variables'))
102+
->hidden(fn (Get $get) => !$get('egg_id'))
103+
->grid(2)
104+
->reorderable(false)
105+
->addable(false)
106+
->deletable(false)
107+
->default([])
108+
->hidden(fn ($state) => empty($state))
109+
->schema([
110+
StartupVariable::make('variable_value')
111+
->fromForm()
112+
->disabled(false),
113+
]),
79114
];
80115
});
81116

@@ -84,7 +119,7 @@ protected function setUp(): void
84119
/** @var UserResourceLimits $userResourceLimits */
85120
$userResourceLimits = UserResourceLimits::where('user_id', auth()->user()->id)->firstOrFail();
86121

87-
if ($server = $userResourceLimits->createServer($data['name'], $data['egg_id'], $data['cpu'], $data['memory'], $data['disk'])) {
122+
if ($server = $userResourceLimits->createServer($data['name'], $data['egg_id'], $data['cpu'], $data['memory'], $data['disk'], Arr::mapWithKeys($data['variables'], fn ($value) => [$value['env_variable'] => $value['variable_value']]))) {
88123
redirect(Console::getUrl(panel: 'server', tenant: $server));
89124
}
90125
} catch (Exception $exception) {

user-creatable-servers/src/Models/UserResourceLimits.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public function canCreateServer(int $cpu, int $memory, int $disk): bool
112112
return true;
113113
}
114114

115-
public function createServer(string $name, int|Egg $egg, int $cpu, int $memory, int $disk): Server|bool
115+
public function createServer(string $name, int|Egg $egg, int $cpu, int $memory, int $disk, array $variables = []): Server|bool
116116
{
117117
if ($this->canCreateServer($cpu, $memory, $disk)) {
118118
if (!$egg instanceof Egg) {
@@ -121,7 +121,7 @@ public function createServer(string $name, int|Egg $egg, int $cpu, int $memory,
121121

122122
$environment = [];
123123
foreach ($egg->variables as $variable) {
124-
$environment[$variable->env_variable] = $variable->default_value;
124+
$environment[$variable->env_variable] = $variables[$variable->env_variable] ?? $variable->default_value;
125125
}
126126

127127
$data = [

0 commit comments

Comments
 (0)