mirror of
https://github.com/pelican-dev/panel.git
synced 2025-12-08 18:30:15 +01:00
feat: Add toggle for automatic allocation creation in panel settings (#1884)
This commit is contained in:
parent
2dd6e3d4fc
commit
6c02f9a663
@ -623,6 +623,18 @@ class Settings extends Page implements HasSchemas
|
|||||||
->columnSpanFull()
|
->columnSpanFull()
|
||||||
->stateCast(new BooleanStateCast(false))
|
->stateCast(new BooleanStateCast(false))
|
||||||
->default(env('PANEL_CLIENT_ALLOCATIONS_ENABLED', config('panel.client_features.allocations.enabled'))),
|
->default(env('PANEL_CLIENT_ALLOCATIONS_ENABLED', config('panel.client_features.allocations.enabled'))),
|
||||||
|
Toggle::make('PANEL_CLIENT_ALLOCATIONS_CREATE_NEW')
|
||||||
|
->label(trans('admin/setting.misc.auto_allocation.create_new'))
|
||||||
|
->helperText(trans('admin/setting.misc.auto_allocation.create_new_help'))
|
||||||
|
->onIcon('tabler-check')
|
||||||
|
->offIcon('tabler-x')
|
||||||
|
->onColor('success')
|
||||||
|
->offColor('danger')
|
||||||
|
->live()
|
||||||
|
->columnSpanFull()
|
||||||
|
->visible(fn (Get $get) => $get('PANEL_CLIENT_ALLOCATIONS_ENABLED'))
|
||||||
|
->stateCast(new BooleanStateCast(false))
|
||||||
|
->default(env('PANEL_CLIENT_ALLOCATIONS_CREATE_NEW', config('panel.client_features.allocations.create_new'))),
|
||||||
TextInput::make('PANEL_CLIENT_ALLOCATIONS_RANGE_START')
|
TextInput::make('PANEL_CLIENT_ALLOCATIONS_RANGE_START')
|
||||||
->label(trans('admin/setting.misc.auto_allocation.start'))
|
->label(trans('admin/setting.misc.auto_allocation.start'))
|
||||||
->required()
|
->required()
|
||||||
|
|||||||
@ -21,9 +21,11 @@ class FindAssignableAllocationService
|
|||||||
public function __construct(private AssignmentService $service) {}
|
public function __construct(private AssignmentService $service) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds an existing unassigned allocation and attempts to assign it to the given server. If
|
* Finds an existing unassigned allocation and attempts to assign it to the given server.
|
||||||
* no allocation can be found, a new one will be created with a random port between the defined
|
*
|
||||||
* range from the configuration.
|
* Always attempts to find an existing unassigned allocation first. If create_new is enabled
|
||||||
|
* and no unassigned allocation is available, creates a new one from the configured port range.
|
||||||
|
* If create_new is disabled, throws an exception when no unassigned allocations are available.
|
||||||
*
|
*
|
||||||
* @throws DisplayException
|
* @throws DisplayException
|
||||||
* @throws CidrOutOfRangeException
|
* @throws CidrOutOfRangeException
|
||||||
@ -37,9 +39,11 @@ class FindAssignableAllocationService
|
|||||||
throw new AutoAllocationNotEnabledException();
|
throw new AutoAllocationNotEnabledException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$createNew = config('panel.client_features.allocations.create_new', true);
|
||||||
|
|
||||||
// Attempt to find a given available allocation for a server. If one cannot be found
|
// Attempt to find a given available allocation for a server. If one cannot be found
|
||||||
// we will fall back to attempting to create a new allocation that can be used for the
|
// and create_new is enabled, we will fall back to attempting to create a new allocation
|
||||||
// server.
|
// that can be used for the server.
|
||||||
$start = config('panel.client_features.allocations.range_start', null);
|
$start = config('panel.client_features.allocations.range_start', null);
|
||||||
$end = config('panel.client_features.allocations.range_end', null);
|
$end = config('panel.client_features.allocations.range_end', null);
|
||||||
|
|
||||||
@ -61,6 +65,12 @@ class FindAssignableAllocationService
|
|||||||
->inRandomOrder()
|
->inRandomOrder()
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
// If create_new is disabled, only pick from existing allocations
|
||||||
|
if (!$createNew && !$allocation) {
|
||||||
|
throw new NoAutoAllocationSpaceAvailableException();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If create_new is enabled, create a new allocation if none available
|
||||||
$allocation ??= $this->createNewAllocation($server, $start, $end);
|
$allocation ??= $this->createNewAllocation($server, $start, $end);
|
||||||
|
|
||||||
$allocation->update(['server_id' => $server->id]);
|
$allocation->update(['server_id' => $server->id]);
|
||||||
|
|||||||
@ -33,6 +33,7 @@ return [
|
|||||||
|
|
||||||
'allocations' => [
|
'allocations' => [
|
||||||
'enabled' => env('PANEL_CLIENT_ALLOCATIONS_ENABLED', false),
|
'enabled' => env('PANEL_CLIENT_ALLOCATIONS_ENABLED', false),
|
||||||
|
'create_new' => env('PANEL_CLIENT_ALLOCATIONS_CREATE_NEW', true),
|
||||||
'range_start' => env('PANEL_CLIENT_ALLOCATIONS_RANGE_START'),
|
'range_start' => env('PANEL_CLIENT_ALLOCATIONS_RANGE_START'),
|
||||||
'range_end' => env('PANEL_CLIENT_ALLOCATIONS_RANGE_END'),
|
'range_end' => env('PANEL_CLIENT_ALLOCATIONS_RANGE_END'),
|
||||||
],
|
],
|
||||||
|
|||||||
@ -108,6 +108,8 @@ return [
|
|||||||
'title' => 'Automatic Allocation Creation',
|
'title' => 'Automatic Allocation Creation',
|
||||||
'helper' => 'Toggle if Users can create allocations via the client area.',
|
'helper' => 'Toggle if Users can create allocations via the client area.',
|
||||||
'question' => 'Allow Users to create Allocations?',
|
'question' => 'Allow Users to create Allocations?',
|
||||||
|
'create_new' => 'Create new allocations if none available?',
|
||||||
|
'create_new_help' => 'When enabled, creates new allocations. When disabled, only assigns from existing unassigned allocations. Both options faktor the port range below into account.',
|
||||||
'start' => 'Start Port',
|
'start' => 'Start Port',
|
||||||
'end' => 'End Port',
|
'end' => 'End Port',
|
||||||
],
|
],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user