# 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 # . class GovukGuix::CreateDataSnapshotJob < Que::Job extend EnqueuedJobs include ::ShellUtils @retry_interval = 30 def enqueue(options = {}) backend_type = options[:backend_type] backend_id = options[:backend_id] remote_host = options[:run_remotely_on_host] if remote_host raise 'backend_type missing' unless backend_type raise 'backend_id missing' unless backend_id end super(options) end def run(options = {}) data_snapshot_fields = {} backend_type = options[:backend_type] backend_id = options[:backend_id] if backend_type backend = Backends.find_by_type_and_id(backend_type, backend_id) data_snapshot_fields[:backend] = backend end revision_id = options[:revision_id] revision = if revision_id GovukGuix::Revision.find(revision_id) else GovukGuix::Revision.order(:created_at).first end data_snapshot_fields[:govuk_guix_revision] = revision remote_host = options[:run_remotely_on_host] logger.info(self.class) do 'Creating new data snapshot' end if remote_host # Copy the revision to the remote host, to ensure it's available # there run_command( 'guix', 'copy', "--to=#{remote_host}", revision.store_path ) end output = run_command( "#{revision.store_path}/bin/govuk", 'data', 'build-snapshot', # TODO: Just use a couple of small databases for initial testing *%w(content-tagger contacts-admin), run_remotely_on_host: remote_host ) build_output = output.last.strip logger.debug(self.class) { "build_output: #{build_output}" } data_snapshot_fields[:store_path] = build_output data_snapshot_fields[:manifest] = read_json_file( "#{build_output}/manifest.json", from_remote_host: remote_host ) GovukGuix::DataSnapshot.create!(data_snapshot_fields) end end