# == 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 # domain :string # require 'ruby_terraform' class Backends::TerraformLibvirt < ApplicationRecord include Backends::Terraform 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) slug = mini_environment.name.parameterize GovukGuix::BuildJob.enqueue( mini_environment.id, %w(whitehall government-frontend), type: 'vm-image-and-system', app_domain: "#{slug}.#{domain}", web_domain: "www.#{slug}.#{domain}", # Assume that this is a local environment, and not externally # accessible use_https: 'development' ) end def start(mini_environment) logger.info "Setting up #{mini_environment.name}" with_terraform(mini_environment, 'terraform/libvirt') do RubyTerraform.apply( vars: terraform_variables(mini_environment), auto_approve: true ) end end def destroy(mini_environment) with_terraform(mini_environment, 'terraform/libvirt') do RubyTerraform.destroy( vars: terraform_variables(mini_environment), force: true ) end end def signon_url(mini_environment) "https://signon.#{mini_environment.name.parameterize}.#{domain}" end def terraform_variables(mini_environment) { uri: uri, machine_name: mini_environment.name.parameterize, vm_image_and_system: mini_environment.backend_data['build_output'] } end end