# 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 # . module Backends::TerraformLibvirt::BackendMethods def deploy_backend within_backend_terraform_working_directory do RubyTerraform.apply( vars: { uri: uri, domain: domain }, auto_approve: true ) end end def destroy_backend within_backend_terraform_working_directory do RubyTerraform.destroy( vars: { uri: uri, domain: domain }, force: true ) end end def refresh_backend_state within_backend_terraform_working_directory do RubyTerraform.refresh( vars: { uri: uri, domain: domain } ) end end def in_use_store_paths [ GovukGuix::Revision.pluck(:store_path), available_data_snapshots.pluck(:store_path), mini_environments.pluck(:backend_data).map { |x| x.dig('build_output') } ].flatten.compact end def update_guix_gcroots GovukGuix::UpdateGcrootsDirectory.set_in_use_store_paths( in_use_store_paths ) end def add_in_use_store_path(store_path) GovukGuix::UpdateGcrootsDirectory.add_store_path( store_path ) end def within_backend_terraform_working_directory(&block) with_advisory_lock( "terraform" ) do TerraformWorkingDirectory.new( terraform_state_id, 'terraform/libvirt/backend' ).within_working_directory(&block) end end def backend_terraform_states TerraformState.where( state_id: terraform_state_id ) end def status latest_terraform_state = backend_terraform_states.order(:id).last running = ( latest_terraform_state && (latest_terraform_state.output_value('backend_up') == 'true') ) { running: running, updated_at: latest_terraform_state.try(:created_at) } end end