diff options
author | Christopher Baines <mail@cbaines.net> | 2018-03-21 07:41:20 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-03-29 07:59:01 +0100 |
commit | 54b28b0c0ee3f71e8f4997d22aea19adeedcb11a (patch) | |
tree | b53d75658dd3199379892d4254c6d41f7651b0e7 /app/models/backends | |
parent | cd8e1dad2f8c73b9d35f5bc997c44470bd2268ae (diff) | |
download | govuk-mini-environment-admin-54b28b0c0ee3f71e8f4997d22aea19adeedcb11a.tar govuk-mini-environment-admin-54b28b0c0ee3f71e8f4997d22aea19adeedcb11a.tar.gz |
Improve AWS backend support
Diffstat (limited to 'app/models/backends')
-rw-r--r-- | app/models/backends/terraform.rb | 22 | ||||
-rw-r--r-- | app/models/backends/terraform_aws.rb | 47 | ||||
-rw-r--r-- | app/models/backends/terraform_libvirt.rb | 21 |
3 files changed, 51 insertions, 39 deletions
diff --git a/app/models/backends/terraform.rb b/app/models/backends/terraform.rb new file mode 100644 index 0000000..e1f937f --- /dev/null +++ b/app/models/backends/terraform.rb @@ -0,0 +1,22 @@ +module Backends::Terraform + def working_directory(mini_environment) + "tmp/terraform-working-directories/#{mini_environment.name}" + 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 d79ff51..246af8b 100644 --- a/app/models/backends/terraform_aws.rb +++ b/app/models/backends/terraform_aws.rb @@ -12,6 +12,8 @@ # class Backends::TerraformAws < ApplicationRecord + include Backends::Terraform + has_many :mini_environments, as: :backend self.table_name = "terraform_aws_backends" @@ -30,26 +32,26 @@ class Backends::TerraformAws < ApplicationRecord ) end - def start - logger.info "Setting up #{@mini_environment.name}" + def start(mini_environment) + logger.info "Setting up #{mini_environment.name}" - Dir.chdir("tmp/terraform-working-directories/#{@mini_environment.name}") do # TODO - RubyTerraform.init( - backend: true, - source: "terraform/aws", # TODO - backend_config: { - address: 'http://localhost:3000' + Rails.application.routes.url_helpers.terraform_http_backend_path - }, - plugin_dir: "/gnu/store/x0b54k4i02vi05ghc0np7cqs2p5q6i31-profile/bin" - ) + source = File.expand_path("terraform/libvirt") + 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: plugin_dir + ) + end RubyTerraform.apply( - vars: { - aws_region: 'eu-west-1', - slug: @mini_environment.name.parameterize, - ssh_public_key: ssh_public_key, - start_command: @mini_environment.start_command - }, + vars: terraform_variables(mini_environment), auto_approve: true ) end @@ -59,7 +61,7 @@ class Backends::TerraformAws < ApplicationRecord Dir.chdir('terraform/aws') do RubyTerraform.destroy( vars: { - aws_region: 'eu-west-1', + aws_region: aws_region, slug: @mini_environment.name.parameterize, ssh_public_key: ssh_public_key, start_command: @mini_environment.start_command @@ -69,6 +71,15 @@ class Backends::TerraformAws < ApplicationRecord end end + def terraform_variables(mini_environment) + mini_environment.backend_data.merge( + aws_region: self.aws_region, + slug: mini_environment.name.parameterize, + ssh_public_key: ssh_public_key, + start_command: mini_environment.start_command, + ) + end + def ssh_public_key File.open("#{ENV['HOME']}/.ssh/id_rsa.pub") do |file| file.readline() diff --git a/app/models/backends/terraform_libvirt.rb b/app/models/backends/terraform_libvirt.rb index 4cb63b7..11e04ad 100644 --- a/app/models/backends/terraform_libvirt.rb +++ b/app/models/backends/terraform_libvirt.rb @@ -72,27 +72,6 @@ class Backends::TerraformLibvirt < ApplicationRecord ) 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 working_directory(mini_environment) - "tmp/terraform-working-directories/#{mini_environment.name}" - end - - def plugin_dir - ENV['PATH'].split(':').first - end - def ssh_public_key File.open("#{ENV['HOME']}/.ssh/id_rsa.pub") do |file| file.readline() |