Class: JobInvocationComposer::ApiParams
- Inherits:
-
Object
- Object
- JobInvocationComposer::ApiParams
- Defined in:
- app/models/job_invocation_composer.rb
Instance Attribute Summary collapse
-
#api_params ⇒ Object
readonly
Returns the value of attribute api_params.
Instance Method Summary collapse
- #concurrency_control_params ⇒ Object
- #feature ⇒ Object
- #filter_provider_inputs(api_params) ⇒ Object
-
#initialize(api_params) ⇒ ApiParams
constructor
A new instance of ApiParams.
- #job_template_id ⇒ Object
- #params ⇒ Object
- #remote_execution_feature_id ⇒ Object
- #targeting_params ⇒ Object
- #template ⇒ Object
- #template_invocations_params ⇒ Object
- #triggering_params ⇒ Object
Constructor Details
#initialize(api_params) ⇒ ApiParams
Returns a new instance of ApiParams.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'app/models/job_invocation_composer.rb', line 104 def initialize(api_params) @api_params = api_params if api_params[:feature] # set a default targeting type for backward compatibility # when `for_feature` was used by the API it automatically set a default api_params[:targeting_type] = Targeting::STATIC_TYPE end if api_params[:search_query].blank? && api_params[:host_ids].present? translator = HostIdsTranslator.new(api_params[:host_ids]) api_params[:search_query] = translator.scoped_search end end |
Instance Attribute Details
#api_params ⇒ Object (readonly)
Returns the value of attribute api_params.
102 103 104 |
# File 'app/models/job_invocation_composer.rb', line 102 def api_params @api_params end |
Instance Method Details
#concurrency_control_params ⇒ Object
163 164 165 166 167 168 |
# File 'app/models/job_invocation_composer.rb', line 163 def concurrency_control_params { :level => api_params.fetch(:concurrency_control, {})[:concurrency_level], :time_span => api_params.fetch(:concurrency_control, {})[:time_span], } end |
#feature ⇒ Object
191 192 193 194 195 |
# File 'app/models/job_invocation_composer.rb', line 191 def feature @feature ||= RemoteExecutionFeature.feature(api_params[:feature]) if api_params[:feature] rescue => e raise(FeatureNotFound, e.) end |
#filter_provider_inputs(api_params) ⇒ Object
184 185 186 187 188 189 |
# File 'app/models/job_invocation_composer.rb', line 184 def filter_provider_inputs(api_params) return [] if template.provider.provider_input_namespace.empty? inputs = api_params[template.provider.provider_input_namespace].to_h provider_input_names = template.provider.provider_inputs.map(&:name) inputs.select { |key, value| provider_input_names.include? key }.map { |key, value| { :name => key, :value => value } } end |
#job_template_id ⇒ Object
197 198 199 |
# File 'app/models/job_invocation_composer.rb', line 197 def job_template_id feature&.job_template_id || api_params[:job_template_id] end |
#params ⇒ Object
119 120 121 122 123 124 125 126 127 128 |
# File 'app/models/job_invocation_composer.rb', line 119 def params { :job_category => template.job_category, :targeting => targeting_params, :triggering => triggering_params, :description_format => api_params[:description_format], :remote_execution_feature_id => remote_execution_feature_id, :concurrency_control => concurrency_control_params, :execution_timeout_interval => api_params[:execution_timeout_interval] || template.execution_timeout_interval, :template_invocations => template_invocations_params }.with_indifferent_access end |
#remote_execution_feature_id ⇒ Object
130 131 132 |
# File 'app/models/job_invocation_composer.rb', line 130 def remote_execution_feature_id feature&.id || api_params[:remote_execution_feature_id] end |
#targeting_params ⇒ Object
134 135 136 137 138 |
# File 'app/models/job_invocation_composer.rb', line 134 def targeting_params raise ::Foreman::Exception, _('Cannot specify both bookmark_id and search_query') if api_params[:bookmark_id] && api_params[:search_query] api_params.slice(:targeting_type, :bookmark_id, :search_query, :randomized_ordering).merge(:user_id => User.current.id) end |
#template ⇒ Object
201 202 203 204 205 |
# File 'app/models/job_invocation_composer.rb', line 201 def template @template ||= JobTemplate.(:view_job_templates).find(job_template_id) rescue ActiveRecord::RecordNotFound raise(JobTemplateNotFound, _("Template with id '%{id}' was not found") % { id: job_template_id }) end |
#template_invocations_params ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'app/models/job_invocation_composer.rb', line 170 def template_invocations_params template_invocation_params = { :template_id => template.id, :effective_user => api_params[:effective_user] } template_invocation_params[:provider_input_values] = filter_provider_inputs api_params template_invocation_params[:input_values] = api_params.fetch(:inputs, {}).to_h.map do |name, value| input = template.template_inputs_with_foreign.find { |i| i.name == name } unless input raise ::Foreman::Exception, _('Unknown input %{input_name} for template %{template_name}') % { :input_name => name, :template_name => template.name } end { :template_input_id => input.id, :value => value } end [template_invocation_params] end |
#triggering_params ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'app/models/job_invocation_composer.rb', line 140 def triggering_params raise ::Foreman::Exception, _('Cannot specify both recurrence and scheduling') if api_params[:recurrence].present? && api_params[:scheduling].present? if api_params[:recurrence].present? { :mode => :recurring, :cronline => api_params[:recurrence][:cron_line], :end_time => format_datetime(api_params[:recurrence][:end_time]), :input_type => :cronline, :max_iteration => api_params[:recurrence][:max_iteration], } elsif api_params[:scheduling].present? { :mode => :future, :start_at_raw => format_datetime(api_params[:scheduling][:start_at]), :start_before_raw => format_datetime(api_params[:scheduling][:start_before]), :end_time_limited => api_params[:scheduling][:start_before] ? true : false, } else {} end end |