# 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 'open3' class GovukGuix::Job < Que::Job def run_command(*command) logger.debug("#{self.class}: Running command #{command.join(' ')}") Open3.popen2e(*command) do |_stdin, stdout_and_stderr, wait_thr| logger.info("#{self.class}: commmand running, pid #{wait_thr.pid}") output = [] stdout_and_stderr.each_line do |line| logger.debug(self.class) { line.chomp } output << line end exit_status = wait_thr.value unless exit_status == 0 logger.error(self.class) { "failed, exit status #{exit_status}" } raise "Running #{command.join(' ')} failed:\n\n#{output.join}\n" end output end end def hash_to_arguments(hash) hash.map do |(key, value)| transformed_key = key.tr('_', '-') if value == true "--#{transformed_key}" elsif value.include? ' ' "--#{transformed_key}='#{value}'" else "--#{transformed_key}=#{value}" end end end end