# == Schema Information # # Table name: terraform_libvirt_backends # # id :integer not null, primary key # label :string # uri :string # created_at :datetime not null # updated_at :datetime not null # class Backends::TerraformLibvirt < ApplicationRecord has_many :mini_environments, as: :backend self.table_name = 'terraform_libvirt_backends' def self.label 'libvirt' end def type_and_id "#{self.class.name}=#{id}" end def build(mini_environment) GovukGuix::GenerateVmImageAndSystemJob.enqueue( mini_environment.id ) end def start(mini_environment) logger.info "Setting up #{mini_environment.name}" 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: terraform_variables(mini_environment), auto_approve: true ) end end def destroy(mini_environment) Dir.chdir(working_directory(mini_environment)) do RubyTerraform.destroy( vars: terraform_variables(mini_environment), force: true ) end end def terraform_variables(mini_environment) mini_environment.backend_data.merge( uri: uri, machine_name: mini_environment.name.parameterize ) end def ssh_public_key File.open("#{ENV['HOME']}/.ssh/id_rsa.pub") do |file| file.readline() end end end