# == Schema Information # # Table name: terraform_aws_backends # # id :integer not null, primary key # label :string # aws_region :string # aws_access_key_id :string # aws_secret_access_key :string # created_at :datetime not null # updated_at :datetime not null # require 'ruby_terraform' class Backends::TerraformAws < ApplicationRecord include Backends::Terraform has_many :mini_environments, as: :backend self.table_name = 'terraform_aws_backends' def self.label 'Amazon Web Services' end def type_and_id "#{self.class.name}=#{id}" end def build(mini_environment) GovukGuix::GenerateStartCommandJob.enqueue( mini_environment.id ) end def start(mini_environment) logger.info "Setting up #{mini_environment.name}" with_terraform(mini_environment, 'terraform/aws') do RubyTerraform.apply( vars: terraform_variables(mini_environment), auto_approve: true ) end end def destroy(mini_environment) with_terraform(mini_environment, 'terraform/aws') do RubyTerraform.destroy( vars: terraform_variables(mini_environment), force: true ) end end def terraform_variables(mini_environment) mini_environment.backend_data.merge( aws_region: 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", &:readline) end end