aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-04-05 22:58:56 +0100
committerChristopher Baines <mail@cbaines.net>2018-04-12 08:30:05 +0100
commitb03a664ec42bd93a7547fb53216ab3ae5d099dcd (patch)
treef15bbc4e10ab4f6df3e51c194d5aea2f488215bf /app
parent4238b1f3bc88ab2a1d97aa3c4967361c853b4880 (diff)
downloadgovuk-mini-environment-admin-b03a664ec42bd93a7547fb53216ab3ae5d099dcd.tar
govuk-mini-environment-admin-b03a664ec42bd93a7547fb53216ab3ae5d099dcd.tar.gz
Move the terraform utilities to lib/
Change the module to a class, which is used to represent a terraform working directory. Change the routing for the terraform http backends, to remove any connection with mini environments, and remove this concern from the new TerraformWorkingDirectory class also.
Diffstat (limited to 'app')
-rw-r--r--app/models/backends/terraform.rb64
-rw-r--r--app/models/backends/terraform_aws.rb13
-rw-r--r--app/models/backends/terraform_libvirt.rb13
3 files changed, 18 insertions, 72 deletions
diff --git a/app/models/backends/terraform.rb b/app/models/backends/terraform.rb
deleted file mode 100644
index b3c6ee7..0000000
--- a/app/models/backends/terraform.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-# GOV.UK Mini Environment Admin
-# Copyright © 2018 Christopher Baines <mail@cbaines.net>
-#
-# This file is part of the GOV.UK Mini Environment Admin.
-#
-# The GOV.UK Mini Environment Admin is free software: you can
-# redistribute it and/or modify it under the terms of the GNU Affero
-# General Public License as published by the Free Software Foundation,
-# either version 3 of the License, or (at your option) any later
-# version.
-#
-# The GOV.UK Mini Environment Admin is distributed in the hope that it
-# will be useful, but WITHOUT ANY WARRANTY; without even the implied
-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public
-# License along with the GOV.UK Mini Environment Admin. If not, see
-# <http://www.gnu.org/licenses/>.
-
-require 'fileutils'
-
-module Backends::Terraform
- def working_directory(mini_environment)
- "tmp/terraform-working-directories/#{mini_environment.name}"
- end
-
- def with_terraform(mini_environment, source)
- source = File.expand_path(source)
- FileUtils.mkdir_p working_directory(mini_environment)
-
- Dir.chdir(working_directory(mini_environment)) do
- if Dir.empty?('.')
- RubyTerraform.init(
- backend: true,
- from_module: source,
- backend_config: {
- address: terraform_backend_address(mini_environment)
- },
- plugin_dir: terraform_plugin_dir
- )
- end
-
- yield
- end
- end
-
- def terraform_backend_address(mini_environment)
- (
- 'http://localhost:3000' +
- Rails
- .application
- .routes
- .url_helpers
- .mini_environment_terraform_http_backend_path(
- mini_environment
- )
- )
- end
-
- def terraform_plugin_dir
- ENV['PATH'].split(':').first
- end
-end
diff --git a/app/models/backends/terraform_aws.rb b/app/models/backends/terraform_aws.rb
index 98b1f41..45c766b 100644
--- a/app/models/backends/terraform_aws.rb
+++ b/app/models/backends/terraform_aws.rb
@@ -35,8 +35,6 @@
require 'ruby_terraform'
class Backends::TerraformAws < ApplicationRecord
- include Backends::Terraform
-
has_many :mini_environments, as: :backend
self.table_name = 'terraform_aws_backends'
@@ -65,7 +63,7 @@ class Backends::TerraformAws < ApplicationRecord
def start(mini_environment)
logger.info "Setting up #{mini_environment.name}"
- with_terraform(mini_environment, 'terraform/aws') do
+ within_terraform_working_directory(mini_environment) do
RubyTerraform.apply(
vars: terraform_variables(mini_environment),
auto_approve: true
@@ -74,7 +72,7 @@ class Backends::TerraformAws < ApplicationRecord
end
def destroy(mini_environment)
- with_terraform(mini_environment, 'terraform/aws') do
+ within_terraform_working_directory(mini_environment) do
RubyTerraform.destroy(
vars: terraform_variables(mini_environment),
force: true
@@ -82,6 +80,13 @@ class Backends::TerraformAws < ApplicationRecord
end
end
+ def within_terraform_working_directory(mini_environment, &block)
+ TerraformWorkingDirectory.new(
+ "mini_environment/#{mini_environment.id}",
+ 'terraform/aws'
+ ).within_working_directory(&block)
+ end
+
def signon_url(mini_environment)
"https://signon.#{mini_environment.name.parameterize}.#{domain}"
end
diff --git a/app/models/backends/terraform_libvirt.rb b/app/models/backends/terraform_libvirt.rb
index 147c27d..f108560 100644
--- a/app/models/backends/terraform_libvirt.rb
+++ b/app/models/backends/terraform_libvirt.rb
@@ -33,8 +33,6 @@
require 'ruby_terraform'
class Backends::TerraformLibvirt < ApplicationRecord
- include Backends::Terraform
-
has_many :mini_environments, as: :backend
self.table_name = 'terraform_libvirt_backends'
@@ -65,7 +63,7 @@ class Backends::TerraformLibvirt < ApplicationRecord
def start(mini_environment)
logger.info "Setting up #{mini_environment.name}"
- with_terraform(mini_environment, 'terraform/libvirt') do
+ within_terraform_working_directory(mini_environment) do
RubyTerraform.apply(
vars: terraform_variables(mini_environment),
auto_approve: true
@@ -74,7 +72,7 @@ class Backends::TerraformLibvirt < ApplicationRecord
end
def destroy(mini_environment)
- with_terraform(mini_environment, 'terraform/libvirt') do
+ within_terraform_working_directory(mini_environment) do
RubyTerraform.destroy(
vars: terraform_variables(mini_environment),
force: true
@@ -82,6 +80,13 @@ class Backends::TerraformLibvirt < ApplicationRecord
end
end
+ def within_terraform_working_directory(mini_environment, &block)
+ TerraformWorkingDirectory.new(
+ "mini_environment/#{mini_environment.id}",
+ 'terraform/libvirt'
+ ).within_working_directory(&block)
+ end
+
def signon_url(mini_environment)
"https://signon.#{mini_environment.name.parameterize}.#{domain}"
end