Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion user-creatable-servers/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# User Creatable Servers (by Boy132)
# User Creatable Servers (by Boy132 & contributions from CER06)

Allow users to create their own servers within defined resource limits set by administrators.

Expand All @@ -10,6 +10,8 @@ Add the deployment tag (`user_creatable_servers` by default) to the nodes that s

- Users can create servers without admin intervention
- Configurable resource limits per user (CPU, RAM, disk, etc.)
- Configurable default CPU, memory, and disk allocations automatically assigned to newly created users
- Optional aggregate CPU, memory, and disk caps across all UCS users (`0` is unlimited and deployment remains limited by node capacity)
- Admin management of user resource allocations
- Resource usage overview widget for users
- Integration with existing server management
8 changes: 8 additions & 0 deletions user-creatable-servers/config/user-creatable-servers.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
'allocation_limit' => (int) env('UCS_DEFAULT_ALLOCATION_LIMIT', 0),
'backup_limit' => (int) env('UCS_DEFAULT_BACKUP_LIMIT', 0),

'default_user_cpu' => (int) env('UCS_DEFAULT_USER_CPU', 0),
'default_user_memory' => (int) env('UCS_DEFAULT_USER_MEMORY', 0),
'default_user_disk' => (int) env('UCS_DEFAULT_USER_DISK', 0),

'max_cpu' => (int) env('UCS_MAX_CPU', 0),
'max_memory' => (int) env('UCS_MAX_MEMORY', 0),
'max_disk' => (int) env('UCS_MAX_DISK', 0),

'can_users_update_servers' => (bool) env('UCS_CAN_USERS_UPDATE_SERVERS', true),
'can_users_delete_servers' => (bool) env('UCS_CAN_USERS_DELETE_SERVERS', false),

Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/de/strings.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
'notifications' => [
'server_resources_updated' => 'Server Ressourcen Limits aktualisiert',
'might_need_restart' => 'Um die neuen Ressourcen Limits vollständig zu nutzen, ist möglicherweise ein Neustart des Servers erforderlich.',
'resource_limit_reached' => 'Die angeforderten Ressourcen überschreiten die verfügbaren Benutzer- oder UCS-Zuweisungen.',
'manual_restart_needed' => 'Bitte starte deinen Server manuell neu, um die neuen Ressourcen Limits zu übernehmen.',

'server_deleted' => 'Server gelöscht',
Expand Down
1 change: 1 addition & 0 deletions user-creatable-servers/lang/en/strings.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

'notifications' => [
'server_resources_updated' => 'Server Resource Limits updated',
'resource_limit_reached' => 'The requested resources exceed the available user or UCS allocation.',
'might_need_restart' => 'To fully use the new resource limits a server restart might be required.',
'manual_restart_needed' => 'Please manually restart your server to apply the new resource limits.',

Expand Down
41 changes: 41 additions & 0 deletions user-creatable-servers/lang/no-nb/strings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

return [
'user_resource_limits' => 'Brukerreessursgrense|Brukerressursgrenser',
'user' => 'Bruker|Brukere',
'cpu' => 'CPU',
'memory' => 'Minne',
'disk' => 'Diskplass',
'server_limit' => 'Servergrense',
'no_limit' => 'Ingen grense',
'unlimited' => 'Ubegrenset',
'hint_unlimited' => '0 betyr ubegrenset',
'name' => 'Servernavn',
'egg' => 'Egg',
'left' => 'igjen',
'variables' => 'Oppstartsvariabler',

'create_server' => 'Opprett server',

'modals' => [
'delete_server_confirm' => 'Er du sikker på at du vil slette denne serveren?',
'delete_server_warning' => 'Denne handlingen kan ikke angres og all data vil gå tapt permanent.',
'delete_server' => 'Slett server',
],

'notifications' => [
'server_resources_updated' => 'Serverressursgrenser oppdatert',
'resource_limit_reached' => 'De forespurte ressursene overstiger tilgjengelig bruker- eller UCS-allokering.',
'might_need_restart' => 'For å bruke de nye ressursgrensene kan det være nødvendig å starte serveren på nytt.',
'manual_restart_needed' => 'Vennligst start serveren på nytt, manuelt, for å bruke de nye ressursgrensene.',

'server_deleted' => 'Server slettet',
'server_deleted_success' => 'Serveren ble slettet.',
'server_delete_error' => 'Kunne ikke slette server',

'server_creation_failed' => 'Kunne ikke opprette server',
'no_viable_node_found' => 'Ingen tilgjengelig node ble funnet. Vennligst kontakt paneladministratoren.',
'no_viable_allocation_found' => 'Ingen tilgjengelig allokering ble funnet. Vennligst kontakt paneladministratoren.',
'unknown_server_creation_error' => 'Ukjent feil. Vennligst kontakt paneladministratoren.',
],
];
4 changes: 2 additions & 2 deletions user-creatable-servers/plugin.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"id": "user-creatable-servers",
"name": "User Creatable Servers",
"author": "Boy132",
"version": "1.1.1",
"author": "Boy132 & CER06",
"version": "1.1.2",
"description": "Allow users to create their own servers",
"category": "plugin",
"url": "https://hub.pelican.dev/plugins/user-creatable-servers",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,23 +111,23 @@ public static function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,23 +65,23 @@ public function form(Schema $schema): Schema
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_cpu'))
->suffix('%')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_memory'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->numeric()
->minValue(0)
->default(0)
->default(fn () => config('user-creatable-servers.default_user_disk'))
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hint(trans('user-creatable-servers::strings.hint_unlimited')),
TextInput::make('server_limit')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,13 @@ public function form(Schema $schema): Schema

$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$maxCpu = $server->cpu + $userResourceLimits->getCpuLeft();
$maxMemory = $server->memory + $userResourceLimits->getMemoryLeft();
$maxDisk = $server->disk + $userResourceLimits->getDiskLeft();
$cpuLeft = $userResourceLimits->getCpuLeft();
$memoryLeft = $userResourceLimits->getMemoryLeft();
$diskLeft = $userResourceLimits->getDiskLeft();

$maxCpu = $cpuLeft === null ? null : $server->cpu + $cpuLeft;
$maxMemory = $memoryLeft === null ? null : $server->memory + $memoryLeft;
$maxDisk = $diskLeft === null ? null : $server->disk + $diskLeft;

$suffix = config('panel.use_binary_prefix') ? 'MiB' : 'MB';

Expand All @@ -66,31 +70,31 @@ public function form(Schema $schema): Schema
->label(trans('user-creatable-servers::strings.cpu'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->cpu > 0 ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->cpu > 0 && $maxCpu - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $cpuLeft !== null ? ($maxCpu - $state . '% ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $cpuLeft !== null && $maxCpu - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->cpu > 0 ? 1 : 0)
->maxValue($userResourceLimits->cpu > 0 ? $maxCpu : null)
->maxValue($maxCpu)
->suffix('%'),
TextInput::make('memory')
->label(trans('user-creatable-servers::strings.memory'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->memory > 0 ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->memory > 0 && $maxMemory - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $memoryLeft !== null ? ($maxMemory - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $memoryLeft !== null && $maxMemory - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->memory > 0 ? 1 : 0)
->maxValue($userResourceLimits->memory > 0 ? $maxMemory : null)
->maxValue($maxMemory)
->suffix($suffix),
TextInput::make('disk')
->label(trans('user-creatable-servers::strings.disk'))
->required()
->live(onBlur: true)
->hint(fn ($state) => $userResourceLimits->disk > 0 ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $userResourceLimits->disk > 0 && $maxDisk - $state < 0 ? 'danger' : null)
->hint(fn ($state) => $diskLeft !== null ? ($maxDisk - $state . $suffix . ' ' . trans('user-creatable-servers::strings.left')) : trans('user-creatable-servers::strings.unlimited'))
->hintColor(fn ($state) => $diskLeft !== null && $maxDisk - $state < 0 ? 'danger' : null)
->numeric()
->minValue($userResourceLimits->disk > 0 ? 1 : 0)
->maxValue($userResourceLimits->disk > 0 ? $maxDisk : null)
->maxValue($maxDisk)
->suffix($suffix),
]);
}
Expand Down Expand Up @@ -155,11 +159,20 @@ public function save(): void
/** @var Server $server */
$server = Filament::getTenant();

$server->update([
'cpu' => $data['cpu'],
'memory' => $data['memory'],
'disk' => $data['disk'],
]);
/** @var UserResourceLimits $userResourceLimits */
$userResourceLimits = UserResourceLimits::where('user_id', $server->owner_id)->firstOrFail();

$server = $userResourceLimits->updateServerResources($server, $data['cpu'], $data['memory'], $data['disk']);

if (!$server) {
Notification::make()
->title(trans('user-creatable-servers::strings.notifications.server_resources_updated'))
->body(trans('user-creatable-servers::strings.notifications.resource_limit_reached'))
->danger()
->send();

return;
}

try {
/** @var DaemonServerRepository $repository */
Expand Down
Loading