From 051c8bf612126fa79699c8bf45a661dde127f4a0 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Fri, 16 Mar 2018 08:51:54 +0000 Subject: Add backend controllers, models and views Also annotate existing models. --- .../backends/terraform_aws_controller.rb | 7 ++++ .../backends/terraform_libvirt_controller.rb | 39 ++++++++++++++++++++++ app/controllers/backends_controller.rb | 4 +++ app/controllers/govuk_guix/revisions_controller.rb | 18 +++++++++- app/controllers/mini_environments_controller.rb | 26 +++++++++------ app/controllers/setup_controller.rb | 10 ++++++ .../terraform_http_backend_controller.rb | 17 ++++++++-- 7 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 app/controllers/backends/terraform_aws_controller.rb create mode 100644 app/controllers/backends/terraform_libvirt_controller.rb create mode 100644 app/controllers/backends_controller.rb create mode 100644 app/controllers/setup_controller.rb (limited to 'app/controllers') diff --git a/app/controllers/backends/terraform_aws_controller.rb b/app/controllers/backends/terraform_aws_controller.rb new file mode 100644 index 0000000..b7f10ef --- /dev/null +++ b/app/controllers/backends/terraform_aws_controller.rb @@ -0,0 +1,7 @@ +class Backends::TerraformAwsController < ApplicationController + def new + end + + def show + end +end diff --git a/app/controllers/backends/terraform_libvirt_controller.rb b/app/controllers/backends/terraform_libvirt_controller.rb new file mode 100644 index 0000000..f854bc2 --- /dev/null +++ b/app/controllers/backends/terraform_libvirt_controller.rb @@ -0,0 +1,39 @@ +class Backends::TerraformLibvirtController < ApplicationController + def new + @backend = Backends::TerraformLibvirt.new + @backend.uri = "qemu:///system" + end + + def create + backend = Backends::TerraformLibvirt.create( + params + .require(:backends_terraform_libvirt) + .permit(:label, :uri) + ) + + flash[:success] = "#{backend.label} created" + + redirect_to setup_path + end + + def update + backend = Backends::TerraformLibvirt.update( + params[:id], + params + .require(:backends_terraform_libvirt) + .permit(:label, :uri) + ) + + flash[:success] = "#{backend.label} updated" + end + + def show + @backend = Backends::TerraformLibvirt.find(params['id']) + end + + def destroy + backend = Backends::TerraformLibvirt.find(params['id']) + + backend.delete + end +end diff --git a/app/controllers/backends_controller.rb b/app/controllers/backends_controller.rb new file mode 100644 index 0000000..d433193 --- /dev/null +++ b/app/controllers/backends_controller.rb @@ -0,0 +1,4 @@ +class BackendsController < ApplicationController + def index + end +end diff --git a/app/controllers/govuk_guix/revisions_controller.rb b/app/controllers/govuk_guix/revisions_controller.rb index a890fd0..a0d8c01 100644 --- a/app/controllers/govuk_guix/revisions_controller.rb +++ b/app/controllers/govuk_guix/revisions_controller.rb @@ -1,4 +1,20 @@ class GovukGuix::RevisionsController < ApplicationController - def index + def show + @revision = GovukGuix::Revision.find(params['id']) end + + def enqueue_fetch_revision + revision = params.require('revision') + + GovukGuix::FetchRevisionJob.enqueue(revision) + + flash[:info] = "Fetching govuk-guix revision (#{revision})..." + redirect_to setup_path + end + + def fetch_revision_jobs + @_revision_jobs ||= GovukGuix::FetchRevisionJob.enqueued_jobs + end + + helper_method :fetch_revision_jobs end diff --git a/app/controllers/mini_environments_controller.rb b/app/controllers/mini_environments_controller.rb index 8009777..d845787 100644 --- a/app/controllers/mini_environments_controller.rb +++ b/app/controllers/mini_environments_controller.rb @@ -8,17 +8,23 @@ class MiniEnvironmentsController < ApplicationController end def create - @mini_environment = MiniEnvironment.create( - params - .require(:mini_environment) - .permit( - :name, - :govuk_guix_revision_id - ) + parameters = params.require( + :mini_environment + ).permit( + :name, + :govuk_guix_revision_id, ) - GovukGuix::BuildJob.enqueue(@mini_environment.id) + logger.error(parameters) + + @mini_environment = MiniEnvironment.new(parameters) + @mini_environment.backend = Backends.find_by_type_and_id( + params.require(:mini_environment).fetch(:backend) + ) + @mini_environment.save! + @mini_environment.backend.build(@mini_environment) + redirect_to @mini_environment end @@ -29,11 +35,11 @@ class MiniEnvironmentsController < ApplicationController case action when 'Destroy' - DestroyJob.enqueue(@mini_environment.id) + MiniEnvironmentJob.enqueue(@mini_environment.id, :destroy) flash[:notice] = "Destroying mini environment" when 'Start' - StartJob.enqueue(@mini_environment.id) + MiniEnvironmentJob.enqueue(@mini_environment.id, :start) flash[:notice] = "Starting mini environment" else diff --git a/app/controllers/setup_controller.rb b/app/controllers/setup_controller.rb new file mode 100644 index 0000000..2d16c4e --- /dev/null +++ b/app/controllers/setup_controller.rb @@ -0,0 +1,10 @@ +class SetupController < ApplicationController + def show + end + + def fetch_revision_jobs + @_revision_jobs ||= GovukGuix::FetchRevisionJob.enqueued_jobs + end + + helper_method :fetch_revision_jobs +end diff --git a/app/controllers/terraform_http_backend_controller.rb b/app/controllers/terraform_http_backend_controller.rb index 6b94d8d..2f6e9f8 100644 --- a/app/controllers/terraform_http_backend_controller.rb +++ b/app/controllers/terraform_http_backend_controller.rb @@ -2,13 +2,18 @@ class TerraformHttpBackendController < ApplicationController skip_before_action :verify_authenticity_token def create - TerraformState.create(data: params) + TerraformState.create( + mini_environment_id: mini_environment_id, + data: params + ) render json: '{ "success": true }', status: 200 end def show - state = TerraformState.last + state = TerraformState + .where(mini_environment_id: mini_environment_id) + .last if state.nil? render json: '{}', status: 404 @@ -18,8 +23,14 @@ class TerraformHttpBackendController < ApplicationController end def destroy - TerraformState.delete_all + TerraformState + .where(mini_environment_id: mini_environment_id) + .delete_all render json: '{ "success": true }', status: 200 end + + def mini_environment_id + params[:mini_environment_id] + end end -- cgit v1.2.3