diff --git a/app/controllers/servers_controller.rb b/app/controllers/servers_controller.rb index 05460d3..27abd01 100644 --- a/app/controllers/servers_controller.rb +++ b/app/controllers/servers_controller.rb @@ -1,5 +1,5 @@ class ServersController < ApplicationController - before_action :set_server, only: [ :show, :destroy, :start, :stop, :restart ] + before_action :set_server, only: [ :show, :destroy, :start, :stop, :restart, :spawn ] def index @servers = current_user.servers.includes(:server_template).order(created_at: :desc) @@ -36,6 +36,14 @@ class ServersController < ApplicationController end end + def spawn + authorize_user! + Activity.log(current_user, "spawning", "Server", @server.id, { name: @server.name }) + SpawnServerJob.perform_later(@server.id) + @server.update(status: :starting) + redirect_to @server, notice: "Server spawning..." + end + def start authorize_user! L4dServer::SystemdManager.start(@server) diff --git a/app/views/servers/show.html.slim b/app/views/servers/show.html.slim index 1a0ed07..7a489ec 100644 --- a/app/views/servers/show.html.slim +++ b/app/views/servers/show.html.slim @@ -18,17 +18,15 @@ .server-actions - case @server.status - - when "stopped" - = form_with url: start_server_path(@server), method: :post, local: true do |f| - = f.submit "Start", class: "btn btn--success" + - when "stopped", "failed" + = button_to "Spawn Server", spawn_server_path(@server), method: :post, class: "btn btn--primary" + = button_to "Start Server", start_server_path(@server), method: :post, class: "btn btn--success" - when "starting", "running" - = form_with url: stop_server_path(@server), method: :post, local: true do |f| - = f.submit "Stop", class: "btn btn--warning" - = form_with url: restart_server_path(@server), method: :post, local: true do |f| - = f.submit "Restart", class: "btn btn--warning" + = button_to "Stop Server", stop_server_path(@server), method: :post, class: "btn btn--warning" + = button_to "Restart Server", restart_server_path(@server), method: :post, class: "btn btn--warning" - = link_to "Delete Server", server_path(@server), method: :delete, data: { confirm: "Sure?" }, class: "btn btn--danger" - = link_to "Back", servers_path, class: "btn" + = button_to "Delete Server", server_path(@server), method: :delete, data: { confirm: "Are you sure? This will stop and remove the server." }, class: "btn btn--danger" + = link_to "Back to Servers", servers_path, class: "btn" section.logs h3 Live Logs diff --git a/config/routes.rb b/config/routes.rb index 111a826..bf2e616 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -19,6 +19,7 @@ Rails.application.routes.draw do resources :servers do member do + post :spawn post :start post :stop post :restart diff --git a/lib/l4d_server/config_generator.rb b/lib/l4d_server/config_generator.rb index 32f9dc6..6340464 100644 --- a/lib/l4d_server/config_generator.rb +++ b/lib/l4d_server/config_generator.rb @@ -26,13 +26,8 @@ module L4dServer private def render_config - lines = [] - - @template.config_options.each do |option| - lines << "#{option.config_key} \"#{option.config_value}\"" - end - - lines.join("\n") + # config is now a text field, not an association + @template.config.to_s end end end diff --git a/lib/l4d_server/systemd_manager.rb b/lib/l4d_server/systemd_manager.rb index b8a8a25..a794b89 100644 --- a/lib/l4d_server/systemd_manager.rb +++ b/lib/l4d_server/systemd_manager.rb @@ -81,11 +81,9 @@ module L4dServer def render_unit template = @server.server_template - overlays_str = template.template_overlays.ordered.map { |to| "/opt/l4d2/overlays/#{to.overlay.name}" }.join(":") - startup_args = template.startup_params.map { |param| "#{param.param_key} #{param.param_value}" }.join(" ") - - ExecStart = "/opt/l4d2/servers/#{@server.id}/merged/srcds_run -norestart -pidfile /opt/l4d2/servers/#{@server.id}/pid -game left4dead2 -ip 0.0.0.0 -port #{@server.port} +hostname \"#{@server.name}\" +map c1m1_hotel #{startup_args}".strip + # startup_params is now a text field, not an association + startup_args = template.startup_params.to_s.strip <<~UNIT [Unit]