Sha256: 9f997e32e8f79401b41e1962b160174709672cc58a3b0f095c803133de022cc3

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

require 'uri'

module ForemanSalt
  module Api
    module V2
      class JobsController < ::ForemanSalt::Api::V2::BaseController
        include ::Foreman::Controller::SmartProxyAuth
        add_smart_proxy_filters :upload, :features => 'Salt'

        def_param_group :job do
          param :job, Hash, :required => true, :action_aware => true do
            param :job_id, Integer, :required => true, :desc => N_('JID')
            param :function, String, :required => true, :desc => N_('Function')
            param :result, Hash, :required => true, :desc => N_('Result')
          end
        end

        api :POST, '/upload', N_('Upload a Job')
        param_group :job, :as => :upload

        def upload
          Rails.logger.info("Processing job #{params[:job][:job_id]} from Salt.")
          case params[:job][:function]
          when 'state.highstate'
            # Dynflowize the action if we can, otherwise we'll do it live
            if defined? ForemanTasks
              task = ForemanTasks.async_task(::Actions::ForemanSalt::ReportImport, params[:job], detected_proxy.try(:id))
              render :json => { :task_id => task.id }
            else
              reports = ForemanSalt::ReportImporter.import(params[:job][:result], detected_proxy.try(:id))
              render :json => { :message => "Imported #{reports.count} new reports." }
            end
          else
            render :json => { :message => 'Unsupported function' }, :status => :unprocessable_entity
          end
        rescue ::Foreman::Exception => e
          render :json => { :message => e.to_s }, :status => :unprocessable_entity
        end

        def resource_class
          ::Report
        end

        private

        def action_permission
          case params[:action]
            when 'upload'
              :create
            else
              super
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
foreman_salt-2.0.1 app/controllers/foreman_salt/api/v2/jobs_controller.rb
foreman_salt-2.0.0 app/controllers/foreman_salt/api/v2/jobs_controller.rb