Module: ForemanKernelCare::ForemanTasks

Defined in:
app/controllers/concerns/foreman_kernel_care/foreman_tasks.rb

Instance Method Summary collapse

Instance Method Details

#callbackObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'app/controllers/concerns/foreman_kernel_care/foreman_tasks.rb', line 3

def callback
  callbacks = params.key?(:callback) ? Array(params) : params[:callbacks]
  ids = callbacks.map { |payload| payload[:callback][:task_id] }
  foreman_tasks = ::ForemanTasks::Task.where(:id => ids)
  external_map = Hash[*foreman_tasks.pluck(:id, :external_id).flatten]
  callbacks.each do |payload|
    # We need to call .to_unsafe_h to unwrap the hash from ActionController::Parameters
    callback = payload[:callback]
    foreman_task = foreman_tasks.find { |task| task.id == callback[:task_id] }
    if foreman_task.action.include?('Get patched kernel version')
      version, release = payload[:data].to_unsafe_h['result'].first['output'].strip.split('-')
      job_invocation = ::JobInvocation.where(:task_id => foreman_task.parent_task_id).first
      job_invocation.targeting.hosts.each { |host| host.update_kernel_version(version, release) }
    end
    process_callback(external_map[callback[:task_id]], callback[:step_id].to_i, payload[:data].to_unsafe_h, :request_id => ::Logging.mdc['request'])
  end
  render :json => { :message => 'processing' }.to_json
end