require 'json' require 'logger' require "base64" require "prepare-environment" require "trace-runner" class HelperRun def initialize () @basePath = Pathname.new(Canzea::config[:catalog_location]).realpath @log = Logger.new(Canzea::config[:logging_root] + '/plans.log') end def runPlan (plans) plans.each { | plan | puts "Running #{plan[:action]}" self.run plan[:solution], plan[:action], JSON.generate(plan[:parameters]) } end def enrich (params) # If there is context information, then merge them into the parameters before calling the helper if (ENV.has_key?('WORK_DIR') and File.exists?ENV['WORK_DIR'] + "/context.json") context = JSON.parse(File.read(ENV['WORK_DIR'] + "/context.json")) result = JSON.parse(params).merge(context) return JSON.generate(result) end return params end def run (solution, action, parameters, status = false) type = "ruby" parameters = self.enrich(parameters) envPush = PrepareEnvironment.new begin envScript = "#{@basePath}/helpers/#{solution}/environment.json" if File.exist?(envScript) @log.info("Adding environment variables...") envPush.addToEnv "#{envScript}" end r = RunnerWorker.new ENV['CATALOG_LOCATION'] = "#{@basePath}"; if (type == "ruby") cmd = "ruby #{@basePath}/helpers/#{solution}/#{action}.rb '#{parameters}'" else cmd = "#{@basePath}/helpers/#{solution}/#{action}.sh \"#{parameters}\"" end r.run cmd, 1, 1, status rescue => exception @log.error(cmd) @log.error(exception.to_s) @log.error(exception.backtrace) abort() end end end