# GOV.UK Mini Environment Admin # Copyright © 2018 Christopher Baines # # 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 # . # == 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 # domain :string # route_53_zone_id :string not null # vpc_id :string not null # ssh_public_key :string # ssh_private_key :string # require 'ruby_terraform' class Backends::TerraformAws < ApplicationRecord include MiniEnvironmentMethods include BackendMethods has_many :mini_environments, as: :backend self.table_name = 'terraform_aws_backends' def self.label 'Amazon Web Services' end def self.available? File.exist? "#{ENV['PATH'].split(':').first}/terraform-provider-aws" end def type_and_id "#{self.class.name}=#{id}" end def common_terraform_variables { aws_access_key: aws_access_key_id, aws_secret_key: aws_secret_access_key, aws_region: aws_region, ssh_private_key: ssh_private_key, aws_route_53_zone_id: route_53_zone_id } end def build_remote_host RemoteHost.new( 'ubuntu', backend_latest_terraform_state.output_value('guix_daemon_public_dns'), ssh_private_key ) end def terraform_state_id "backend/terraform_aws/#{id}" end def guix_public_key "(entry #{File.read("/etc/guix/signing-key.pub")} (tag (guix import)))" rescue Errno::ENOENT # This is optional, as if it doesn't exist, it means that `guix # copy` won't be used '' end end