server view fixes
This commit is contained in:
parent
a9a93d2657
commit
d3579504aa
3 changed files with 33 additions and 13 deletions
|
|
@ -10,12 +10,18 @@ class ServersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@server_templates = current_user.server_templates.order(:name)
|
||||||
|
if params[:server_template_id].present?
|
||||||
@server_template = current_user.server_templates.find(params[:server_template_id])
|
@server_template = current_user.server_templates.find(params[:server_template_id])
|
||||||
@server = current_user.servers.build(server_template: @server_template)
|
@server = current_user.servers.build(server_template: @server_template)
|
||||||
|
else
|
||||||
|
@server = current_user.servers.build
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@server_template = current_user.server_templates.find(params[:server_template_id])
|
template_id = params[:server_template_id] || server_params[:server_template_id]
|
||||||
|
@server_template = current_user.server_templates.find(template_id)
|
||||||
@server = current_user.servers.build(server_params)
|
@server = current_user.servers.build(server_params)
|
||||||
@server.server_template = @server_template
|
@server.server_template = @server_template
|
||||||
@server.status = :stopped
|
@server.status = :stopped
|
||||||
|
|
@ -25,6 +31,7 @@ class ServersController < ApplicationController
|
||||||
SpawnServerJob.perform_later(@server.id)
|
SpawnServerJob.perform_later(@server.id)
|
||||||
redirect_to @server, notice: "Server spawning..."
|
redirect_to @server, notice: "Server spawning..."
|
||||||
else
|
else
|
||||||
|
@server_templates = current_user.server_templates.order(:name)
|
||||||
render :new, status: :unprocessable_entity
|
render :new, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -68,7 +75,7 @@ class ServersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def server_params
|
def server_params
|
||||||
params.require(:server).permit(:name, :port)
|
params.require(:server).permit(:name, :port, :server_template_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_user!
|
def authorize_user!
|
||||||
|
|
|
||||||
|
|
@ -4,18 +4,31 @@ class Server < ApplicationRecord
|
||||||
|
|
||||||
enum :status, { stopped: 0, starting: 1, running: 2, failed: 3 }
|
enum :status, { stopped: 0, starting: 1, running: 2, failed: 3 }
|
||||||
|
|
||||||
validates :name, :port, presence: true
|
validates :name, presence: true
|
||||||
validates :name, uniqueness: { scope: :user_id }
|
validates :name, uniqueness: { scope: :user_id }
|
||||||
validates :port, uniqueness: true
|
validates :port, presence: true, uniqueness: true, numericality: { only_integer: true, greater_than_or_equal_to: 27016, less_than_or_equal_to: 27999 }
|
||||||
validates :status, presence: true
|
validates :status, presence: true
|
||||||
|
|
||||||
|
before_validation :assign_port, if: -> { port.blank? }
|
||||||
|
|
||||||
scope :for_user, ->(user) { where(user_id: user.id) }
|
scope :for_user, ->(user) { where(user_id: user.id) }
|
||||||
scope :active, -> { where(status: [ :starting, :running ]) }
|
scope :active, -> { where(status: [ :starting, :running ]) }
|
||||||
|
|
||||||
after_destroy :cleanup_server
|
after_destroy :cleanup_server
|
||||||
|
|
||||||
|
def self.next_available_port
|
||||||
|
(27016..27999).each do |port|
|
||||||
|
return port unless exists?(port: port)
|
||||||
|
end
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def assign_port
|
||||||
|
self.port = self.class.next_available_port
|
||||||
|
end
|
||||||
|
|
||||||
def cleanup_server
|
def cleanup_server
|
||||||
L4dServer::SystemdManager.cleanup(self)
|
L4dServer::SystemdManager.cleanup(self)
|
||||||
L4dServer::Launcher.cleanup(self)
|
L4dServer::Launcher.cleanup(self)
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,6 @@
|
||||||
.server_form
|
.server_form
|
||||||
h2 Spawn New Server
|
h2 Spawn New Server
|
||||||
|
|
||||||
- if @server_template
|
|
||||||
p
|
|
||||||
strong Template:
|
|
||||||
= @server_template.name
|
|
||||||
|
|
||||||
= form_with model: @server, local: true do |f|
|
= form_with model: @server, local: true do |f|
|
||||||
= hidden_field_tag :server_template_id, @server_template.id if @server_template
|
= hidden_field_tag :server_template_id, @server_template.id if @server_template
|
||||||
- if @server.errors.any?
|
- if @server.errors.any?
|
||||||
|
|
@ -15,13 +10,18 @@
|
||||||
- @server.errors.full_messages.each do |msg|
|
- @server.errors.full_messages.each do |msg|
|
||||||
li = msg
|
li = msg
|
||||||
|
|
||||||
|
- unless @server_template
|
||||||
|
.form-group
|
||||||
|
= f.label :server_template_id, "Template"
|
||||||
|
= f.select :server_template_id, options_from_collection_for_select(@server_templates, :id, :name, @server.server_template_id), { prompt: "Select a template" }, class: "form-control", required: true
|
||||||
|
|
||||||
.form-group
|
.form-group
|
||||||
= f.label :name
|
= f.label :name
|
||||||
= f.text_field :name, placeholder: "e.g., server1"
|
= f.text_field :name, placeholder: "e.g., server1"
|
||||||
|
|
||||||
.form-group
|
.form-group
|
||||||
= f.label :port
|
= f.label :port, "Port (optional, auto-assigned if blank)"
|
||||||
= f.number_field :port, placeholder: "e.g., 27015"
|
= f.number_field :port, placeholder: "Auto: 27016-27999", min: 27016, max: 27999
|
||||||
|
|
||||||
- if @server_template
|
- if @server_template
|
||||||
.template-preview
|
.template-preview
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue