class ForemanInventoryUpload::Async::ShellProcess

Public Instance Methods

command() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 34
def command
end
env() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 44
def env
  {}
end
logger() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 48
def logger
  Foreman::Logging.logger('background')
end
plan(instance_label, more_inputs = {}) click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 9
def plan(instance_label, more_inputs = {})
  inputs = more_inputs.merge(instance_label: instance_label)
  plan_self(inputs)
end
progress_output() { |progress_output| ... } click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 37
def progress_output
  progress_output = ProgressOutput.register(instance_label)
  yield(progress_output)
ensure
  progress_output.close
end
rescue_strategy_for_self() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 52
def rescue_strategy_for_self
  Dynflow::Action::Rescue::Fail
end
try_execute() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 14
def try_execute
  klass_name = self.class.name
  logger.debug("Starting #{klass_name} with label #{instance_label}")
  progress_output do |progress_output|
    Open3.popen2e(hash_to_s(env), *preprocess_command(command)) do |_stdin, stdout_stderr, wait_thread|
      progress_output.status = "Running in pid #{wait_thread.pid}"

      stdout_stderr.each do |out_line|
        progress_output.write_line(out_line)
      end

      progress_output.status = wait_thread.value.to_s
    end
  end
  logger.debug("Finished job #{klass_name} with label #{instance_label}")

  assert_task_status(ProgressOutput.get(instance_label).status)
  done!
end

Private Instance Methods

assert_task_status(status) click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 66
def assert_task_status(status)
  raise Foreman::Exception.new('Process exited with an unknown status: %{status}', status: status) unless status.match?(/pid \d+ exit 0/)
end
instance_label() click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 62
def instance_label
  input[:instance_label]
end
preprocess_command(command) click to toggle source
# File lib/foreman_inventory_upload/async/shell_process.rb, line 58
def preprocess_command(command)
  command.kind_of?(Array) ? command : [command]
end