# 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 # . require 'fileutils' class TerraformWorkingDirectory def initialize(id, source) @id = id @source = source end def working_directory "tmp/terraform-working-directories/#{@id}" end def within_working_directory if Rails.env.development? && Dir.exist?(working_directory) # For the purposes of development, always clear the working # directory. This ensures that fresh terraform configuration # will be copied over FileUtils.remove_dir(working_directory) end source = File.expand_path(@source) FileUtils.mkdir_p working_directory Dir.chdir(working_directory) do if Dir.empty?('.') credentials = TerraformHttpBackendController.credentials RubyTerraform.init( backend: true, from_module: source, backend_config: { address: terraform_backend_address, username: credentials[:name], password: credentials[:password] }, plugin_dir: terraform_plugin_dir ) end yield end end def terraform_backend_address ( Plek.new.external_url_for('mini-environment-admin') + Rails .application .routes .url_helpers .terraform_http_backend_path(@id) ) end def terraform_plugin_dir ENV['PATH'].split(':').first end end