Add core logic to allow for limited databases and allocations
This commit is contained in:
		
							parent
							
								
									5f6c153537
								
							
						
					
					
						commit
						87b96bdfc8
					
				@ -13,7 +13,7 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function rules(): array
 | 
					    public function rules(): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = Server::getUpdateRulesForId($this->route()->parameter('server')->id);
 | 
					        $rules = Server::getUpdateRulesForId($this->getModel(Server::class)->id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
            'allocation' => $rules['allocation_id'],
 | 
					            'allocation' => $rules['allocation_id'],
 | 
				
			||||||
@ -26,6 +26,9 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
 | 
				
			|||||||
            'add_allocations.*' => 'integer',
 | 
					            'add_allocations.*' => 'integer',
 | 
				
			||||||
            'remove_allocations' => 'bail|array',
 | 
					            'remove_allocations' => 'bail|array',
 | 
				
			||||||
            'remove_allocations.*' => 'integer',
 | 
					            'remove_allocations.*' => 'integer',
 | 
				
			||||||
 | 
					            'feature_limits' => 'required|array',
 | 
				
			||||||
 | 
					            'feature_limits.databases' => $rules['database_limit'],
 | 
				
			||||||
 | 
					            'feature_limits.allocations' => $rules['allocation_limit'],
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -39,7 +42,9 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
 | 
				
			|||||||
        $data = parent::validated();
 | 
					        $data = parent::validated();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $data['allocation_id'] = $data['allocation'];
 | 
					        $data['allocation_id'] = $data['allocation'];
 | 
				
			||||||
        unset($data['allocation']);
 | 
					        $data['database_limit'] = $data['feature_limits']['databases'];
 | 
				
			||||||
 | 
					        $data['allocation_limit'] = $data['feature_limits']['allocations'];
 | 
				
			||||||
 | 
					        unset($data['allocation'], $data['feature_limits']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $data;
 | 
					        return $data;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -56,6 +61,8 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
 | 
				
			|||||||
            'remove_allocations' => 'allocations to remove',
 | 
					            'remove_allocations' => 'allocations to remove',
 | 
				
			||||||
            'add_allocations.*' => 'allocation to add',
 | 
					            'add_allocations.*' => 'allocation to add',
 | 
				
			||||||
            'remove_allocations.*' => 'allocation to remove',
 | 
					            'remove_allocations.*' => 'allocation to remove',
 | 
				
			||||||
 | 
					            'feature_limits.databases' => 'Database Limit',
 | 
				
			||||||
 | 
					            'feature_limits.allocations' => 'Allocation Limit',
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -69,6 +69,8 @@ class Server extends Model implements CleansAttributes, ValidableContract
 | 
				
			|||||||
        'skip_scripts' => 'sometimes',
 | 
					        'skip_scripts' => 'sometimes',
 | 
				
			||||||
        'image' => 'required',
 | 
					        'image' => 'required',
 | 
				
			||||||
        'startup' => 'required',
 | 
					        'startup' => 'required',
 | 
				
			||||||
 | 
					        'database_limit' => 'present',
 | 
				
			||||||
 | 
					        'allocation_limit' => 'present',
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -93,6 +95,8 @@ class Server extends Model implements CleansAttributes, ValidableContract
 | 
				
			|||||||
        'skip_scripts' => 'boolean',
 | 
					        'skip_scripts' => 'boolean',
 | 
				
			||||||
        'image' => 'string|max:255',
 | 
					        'image' => 'string|max:255',
 | 
				
			||||||
        'installed' => 'boolean',
 | 
					        'installed' => 'boolean',
 | 
				
			||||||
 | 
					        'database_limit' => 'nullable|integer|min:0',
 | 
				
			||||||
 | 
					        'allocation_limit' => 'nullable|integer|min:0',
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -116,6 +120,8 @@ class Server extends Model implements CleansAttributes, ValidableContract
 | 
				
			|||||||
        'egg_id' => 'integer',
 | 
					        'egg_id' => 'integer',
 | 
				
			||||||
        'pack_id' => 'integer',
 | 
					        'pack_id' => 'integer',
 | 
				
			||||||
        'installed' => 'integer',
 | 
					        'installed' => 'integer',
 | 
				
			||||||
 | 
					        'database_limit' => 'integer',
 | 
				
			||||||
 | 
					        'allocation_limit' => 'integer',
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -91,6 +91,8 @@ class BuildModificationService
 | 
				
			|||||||
            'cpu' => array_get($data, 'cpu'),
 | 
					            'cpu' => array_get($data, 'cpu'),
 | 
				
			||||||
            'disk' => array_get($data, 'disk'),
 | 
					            'disk' => array_get($data, 'disk'),
 | 
				
			||||||
            'allocation_id' => array_get($data, 'allocation_id'),
 | 
					            'allocation_id' => array_get($data, 'allocation_id'),
 | 
				
			||||||
 | 
					            'database_limit' => array_get($data, 'database_limit'),
 | 
				
			||||||
 | 
					            'allocation_limit' => array_get($data, 'allocation_limit'),
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $allocations = $this->allocationRepository->findWhere([['server_id', '=', $server->id]]);
 | 
					        $allocations = $this->allocationRepository->findWhere([['server_id', '=', $server->id]]);
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,10 @@ class ServerTransformer extends BaseTransformer
 | 
				
			|||||||
                'io' => $server->io,
 | 
					                'io' => $server->io,
 | 
				
			||||||
                'cpu' => $server->cpu,
 | 
					                'cpu' => $server->cpu,
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
 | 
					            'feature_limits' => [
 | 
				
			||||||
 | 
					                'databases' => $server->database_limit,
 | 
				
			||||||
 | 
					                'allocations' => $server->allocation_limit,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
            'user' => $server->owner_id,
 | 
					            'user' => $server->owner_id,
 | 
				
			||||||
            'node' => $server->node_id,
 | 
					            'node' => $server->node_id,
 | 
				
			||||||
            'allocation' => $server->allocation_id,
 | 
					            'allocation' => $server->allocation_id,
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,10 @@ class ServerTransformer extends BaseClientTransformer
 | 
				
			|||||||
                'io' => $server->io,
 | 
					                'io' => $server->io,
 | 
				
			||||||
                'cpu' => $server->cpu,
 | 
					                'cpu' => $server->cpu,
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
 | 
					            'feature_limits' => [
 | 
				
			||||||
 | 
					                'databases' => $server->database_limit,
 | 
				
			||||||
 | 
					                'allocations' => $server->allocation_limit,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Schema;
 | 
				
			||||||
 | 
					use Illuminate\Database\Schema\Blueprint;
 | 
				
			||||||
 | 
					use Illuminate\Database\Migrations\Migration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AddDatabaseAndPortLimitColumnsToServersTable extends Migration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Run the migrations.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function up()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Schema::table('servers', function (Blueprint $table) {
 | 
				
			||||||
 | 
					            $table->unsignedInteger('database_limit')->after('installed')->nullable()->default(0);
 | 
				
			||||||
 | 
					            $table->unsignedInteger('allocation_limit')->after('installed')->nullable()->default(0);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Reverse the migrations.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function down()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Schema::table('servers', function (Blueprint $table) {
 | 
				
			||||||
 | 
					            $table->dropColumn(['database_limit', 'allocation_limit']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -111,7 +111,7 @@
 | 
				
			|||||||
                    <div class="form-group col-sm-4">
 | 
					                    <div class="form-group col-sm-4">
 | 
				
			||||||
                        <label for="pSwap">Swap</label>
 | 
					                        <label for="pSwap">Swap</label>
 | 
				
			||||||
                        <div class="input-group">
 | 
					                        <div class="input-group">
 | 
				
			||||||
                            <input type="text" value="{{ old('swap') }}" class="form-control" name="swap" id="pSwap" />
 | 
					                            <input type="text" value="{{ old('swap', 0) }}" class="form-control" name="swap" id="pSwap" />
 | 
				
			||||||
                            <span class="input-group-addon">MB</span>
 | 
					                            <span class="input-group-addon">MB</span>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -89,50 +89,79 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="col-sm-7">
 | 
					        <div class="col-sm-7">
 | 
				
			||||||
            <div class="box">
 | 
					            <div class="row">
 | 
				
			||||||
                <div class="box-header with-border">
 | 
					                <div class="col-xs-12">
 | 
				
			||||||
                    <h3 class="box-title">Allocation Management</h3>
 | 
					                    <div class="box">
 | 
				
			||||||
                </div>
 | 
					                        <div class="box-header with-border">
 | 
				
			||||||
                <div class="box-body">
 | 
					                            <h3 class="box-title">Application Feature Limits</h3>
 | 
				
			||||||
                    <div class="form-group">
 | 
					 | 
				
			||||||
                        <label for="pAllocation" class="control-label">Game Port</label>
 | 
					 | 
				
			||||||
                        <select id="pAllocation" name="allocation_id" class="form-control">
 | 
					 | 
				
			||||||
                            @foreach ($assigned as $assignment)
 | 
					 | 
				
			||||||
                                <option value="{{ $assignment->id }}"
 | 
					 | 
				
			||||||
                                    @if($assignment->id === $server->allocation_id)
 | 
					 | 
				
			||||||
                                        selected="selected"
 | 
					 | 
				
			||||||
                                    @endif
 | 
					 | 
				
			||||||
                                >{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
					 | 
				
			||||||
                            @endforeach
 | 
					 | 
				
			||||||
                        </select>
 | 
					 | 
				
			||||||
                        <p class="text-muted small">The default connection address that will be used for this game server.</p>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    <div class="form-group">
 | 
					 | 
				
			||||||
                        <label for="pAddAllocations" class="control-label">Assign Additional Ports</label>
 | 
					 | 
				
			||||||
                        <div>
 | 
					 | 
				
			||||||
                            <select name="add_allocations[]" class="form-control" multiple id="pAddAllocations">
 | 
					 | 
				
			||||||
                                @foreach ($unassigned as $assignment)
 | 
					 | 
				
			||||||
                                    <option value="{{ $assignment->id }}">{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
					 | 
				
			||||||
                                @endforeach
 | 
					 | 
				
			||||||
                            </select>
 | 
					 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <p class="text-muted small">Please note that due to software limitations you cannot assign identical ports on different IPs to the same server.</p>
 | 
					                        <div class="box-body">
 | 
				
			||||||
                    </div>
 | 
					                            <div class="row">
 | 
				
			||||||
                    <div class="form-group">
 | 
					                                <div class="form-group col-xs-6">
 | 
				
			||||||
                        <label for="pRemoveAllocations" class="control-label">Remove Additional Ports</label>
 | 
					                                    <label for="cpu" class="control-label">Database Limit</label>
 | 
				
			||||||
                        <div>
 | 
					                                    <div>
 | 
				
			||||||
                            <select name="remove_allocations[]" class="form-control" multiple id="pRemoveAllocations">
 | 
					                                        <input type="text" name="database_limit" class="form-control" value="{{ old('database_limit', $server->database_limit) }}"/>
 | 
				
			||||||
                                @foreach ($assigned as $assignment)
 | 
					                                    </div>
 | 
				
			||||||
                                    <option value="{{ $assignment->id }}">{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
					                                    <p class="text-muted small">The total number of databases a user is allowed to create for this server. Leave blank to allow unlimmited.</p>
 | 
				
			||||||
                                @endforeach
 | 
					                                </div>
 | 
				
			||||||
                            </select>
 | 
					                                <div class="form-group col-xs-6">
 | 
				
			||||||
 | 
					                                    <label for="cpu" class="control-label">Allocation Limit</label>
 | 
				
			||||||
 | 
					                                    <div>
 | 
				
			||||||
 | 
					                                        <input type="text" name="allocation_limit" class="form-control" value="{{ old('allocation_limit', $server->allocation_limit) }}"/>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <p class="text-muted small"><strong>This feature is not currently implemented.</strong> The total number of allocations a user is allowed to create for this server. Leave blank to allow unlimited.</p>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <p class="text-muted small">Simply select which ports you would like to remove from the list above. If you want to assign a port on a different IP that is already in use you can select it from the left and delete it here.</p>
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="box-footer">
 | 
					                <div class="col-xs-12">
 | 
				
			||||||
                    {!! csrf_field() !!}
 | 
					                    <div class="box">
 | 
				
			||||||
                    <button type="submit" class="btn btn-primary pull-right">Update Build Configuration</button>
 | 
					                        <div class="box-header with-border">
 | 
				
			||||||
 | 
					                            <h3 class="box-title">Allocation Management</h3>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="box-body">
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="pAllocation" class="control-label">Game Port</label>
 | 
				
			||||||
 | 
					                                <select id="pAllocation" name="allocation_id" class="form-control">
 | 
				
			||||||
 | 
					                                    @foreach ($assigned as $assignment)
 | 
				
			||||||
 | 
					                                        <option value="{{ $assignment->id }}"
 | 
				
			||||||
 | 
					                                            @if($assignment->id === $server->allocation_id)
 | 
				
			||||||
 | 
					                                                selected="selected"
 | 
				
			||||||
 | 
					                                            @endif
 | 
				
			||||||
 | 
					                                        >{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
				
			||||||
 | 
					                                    @endforeach
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                                <p class="text-muted small">The default connection address that will be used for this game server.</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="pAddAllocations" class="control-label">Assign Additional Ports</label>
 | 
				
			||||||
 | 
					                                <div>
 | 
				
			||||||
 | 
					                                    <select name="add_allocations[]" class="form-control" multiple id="pAddAllocations">
 | 
				
			||||||
 | 
					                                        @foreach ($unassigned as $assignment)
 | 
				
			||||||
 | 
					                                            <option value="{{ $assignment->id }}">{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
				
			||||||
 | 
					                                        @endforeach
 | 
				
			||||||
 | 
					                                    </select>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <p class="text-muted small">Please note that due to software limitations you cannot assign identical ports on different IPs to the same server.</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="pRemoveAllocations" class="control-label">Remove Additional Ports</label>
 | 
				
			||||||
 | 
					                                <div>
 | 
				
			||||||
 | 
					                                    <select name="remove_allocations[]" class="form-control" multiple id="pRemoveAllocations">
 | 
				
			||||||
 | 
					                                        @foreach ($assigned as $assignment)
 | 
				
			||||||
 | 
					                                            <option value="{{ $assignment->id }}">{{ $assignment->alias }}:{{ $assignment->port }}</option>
 | 
				
			||||||
 | 
					                                        @endforeach
 | 
				
			||||||
 | 
					                                    </select>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <p class="text-muted small">Simply select which ports you would like to remove from the list above. If you want to assign a port on a different IP that is already in use you can select it from the left and delete it here.</p>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="box-footer">
 | 
				
			||||||
 | 
					                            {!! csrf_field() !!}
 | 
				
			||||||
 | 
					                            <button type="submit" class="btn btn-primary pull-right">Update Build Configuration</button>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user