diff options
author | Christopher Baines <mail@cbaines.net> | 2018-04-05 22:58:56 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-04-12 08:30:05 +0100 |
commit | b03a664ec42bd93a7547fb53216ab3ae5d099dcd (patch) | |
tree | f15bbc4e10ab4f6df3e51c194d5aea2f488215bf /app/models | |
parent | 4238b1f3bc88ab2a1d97aa3c4967361c853b4880 (diff) | |
download | govuk-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/models')
-rw-r--r-- | app/models/backends/terraform.rb | 64 | ||||
-rw-r--r-- | app/models/backends/terraform_aws.rb | 13 | ||||
-rw-r--r-- | app/models/backends/terraform_libvirt.rb | 13 |
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 |