aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/terraform_http_backend_controller.rb25
-rw-r--r--app/jobs/setup_job.rb19
-rw-r--r--app/models/mini_environment.rb4
-rw-r--r--app/models/terraform_state.rb2
-rw-r--r--app/views/mini_environments/show.html.erb12
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 %>