aboutsummaryrefslogtreecommitdiff
path: root/app/models/backends
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-03-21 07:41:20 +0000
committerChristopher Baines <mail@cbaines.net>2018-03-29 07:59:01 +0100
commit54b28b0c0ee3f71e8f4997d22aea19adeedcb11a (patch)
treeb53d75658dd3199379892d4254c6d41f7651b0e7 /app/models/backends
parentcd8e1dad2f8c73b9d35f5bc997c44470bd2268ae (diff)
downloadgovuk-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.rb22
-rw-r--r--app/models/backends/terraform_aws.rb47
-rw-r--r--app/models/backends/terraform_libvirt.rb21
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()