diff options
author | Christopher Baines <mail@cbaines.net> | 2018-01-28 14:46:03 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-03-29 07:28:09 +0100 |
commit | 97f6d7e326a1fd7ddcbe7cf32dc0e4c0a508913d (patch) | |
tree | fa2dceba69676cd0a2d35840fea69eb1422b52bd /app | |
parent | eb3177b0d8de10f316ac595dff3b8165cf828796 (diff) | |
download | govuk-mini-environment-admin-97f6d7e326a1fd7ddcbe7cf32dc0e4c0a508913d.tar govuk-mini-environment-admin-97f6d7e326a1fd7ddcbe7cf32dc0e4c0a508913d.tar.gz |
Add terraform backend and initial guix configuration
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/terraform_http_backend_controller.rb | 25 | ||||
-rw-r--r-- | app/jobs/setup_job.rb | 19 | ||||
-rw-r--r-- | app/models/mini_environment.rb | 4 | ||||
-rw-r--r-- | app/models/terraform_state.rb | 2 | ||||
-rw-r--r-- | app/views/mini_environments/show.html.erb | 12 |
5 files changed, 62 insertions, 0 deletions
diff --git a/app/controllers/terraform_http_backend_controller.rb b/app/controllers/terraform_http_backend_controller.rb new file mode 100644 index 0000000..6b94d8d --- /dev/null +++ b/app/controllers/terraform_http_backend_controller.rb @@ -0,0 +1,25 @@ +class TerraformHttpBackendController < ApplicationController + skip_before_action :verify_authenticity_token + + def create + TerraformState.create(data: params) + + render json: '{ "success": true }', status: 200 + end + + def show + state = TerraformState.last + + if state.nil? + render json: '{}', status: 404 + else + render json: state.data, status: 200 + end + end + + def destroy + TerraformState.delete_all + + render json: '{ "success": true }', status: 200 + end +end diff --git a/app/jobs/setup_job.rb b/app/jobs/setup_job.rb index c7b1b80..6b4f9fe 100644 --- a/app/jobs/setup_job.rb +++ b/app/jobs/setup_job.rb @@ -1,5 +1,24 @@ +require 'ruby_terraform' + class SetupJob < TerraformJob def run_terraform puts "Setting up #{@mini_environment.name}" + + RubyTerraform.init( + source: 'terraform/aws', + path: 'terraform/aws', + backend: true, + backend_config: { + address: 'http://localhost:3000' + Rails.application.routes.url_helpers.terraform_http_backend_path + } + ) + + RubyTerraform.apply( + directory: 'terraform/aws', + vars: { + slug: @mini_environment.name.parameterize + }, + auto_approve: true + ) end end diff --git a/app/models/mini_environment.rb b/app/models/mini_environment.rb index d53a8b1..2d6d8ae 100644 --- a/app/models/mini_environment.rb +++ b/app/models/mini_environment.rb @@ -1,3 +1,7 @@ class MiniEnvironment < ApplicationRecord has_many :finished_terraform_jobs, dependent: :destroy + + def enqueued_terraform_jobs + Que.execute("SELECT * FROM que_jobs WHERE args->>0 = '#{id}'") + end end diff --git a/app/models/terraform_state.rb b/app/models/terraform_state.rb new file mode 100644 index 0000000..fe1d364 --- /dev/null +++ b/app/models/terraform_state.rb @@ -0,0 +1,2 @@ +class TerraformState < ApplicationRecord +end diff --git a/app/views/mini_environments/show.html.erb b/app/views/mini_environments/show.html.erb index 2d8988c..5b2199e 100644 --- a/app/views/mini_environments/show.html.erb +++ b/app/views/mini_environments/show.html.erb @@ -1,6 +1,18 @@ <h1>Name: <%= @mini_environment.name %></h1> +<h2>Finished jobs</h2> + <% @mini_environment.finished_terraform_jobs.each do |job| %> <%= job.job_class %> <%= job.created_at %> <% end %> + +<h2>Enqueued jobs</h2> + +<% @mini_environment.enqueued_terraform_jobs.each do |job| %> + <%= job['job_class'] %> + + <pre> + <%= job['last_error'] %> + </pre> +<% end %> |