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
- #recurring_mode_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.
105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/models/job_invocation_composer.rb', line 105 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.
103 104 105 |
# File 'app/models/job_invocation_composer.rb', line 103 def api_params @api_params end |
Instance Method Details
#concurrency_control_params ⇒ Object
174 175 176 177 178 |
# File 'app/models/job_invocation_composer.rb', line 174 def concurrency_control_params { :level => api_params.fetch(:concurrency_control, {})[:concurrency_level], } end |
#feature ⇒ Object
201 202 203 204 205 |
# File 'app/models/job_invocation_composer.rb', line 201 def feature @feature ||= RemoteExecutionFeature.feature(api_params[:feature]) if api_params[:feature] rescue => e raise(FeatureNotFound, e.) end |
#filter_provider_inputs(api_params) ⇒ Object
194 195 196 197 198 199 |
# File 'app/models/job_invocation_composer.rb', line 194 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
207 208 209 |
# File 'app/models/job_invocation_composer.rb', line 207 def job_template_id feature&.job_template_id || api_params[:job_template_id] end |
#params ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'app/models/job_invocation_composer.rb', line 120 def params { :job_category => template.job_category, :targeting => targeting_params, :triggering => triggering_params, :description_format => api_params[:description_format], :ssh_user => api_params[:ssh_user], :password => api_params[:password], :remote_execution_feature_id => remote_execution_feature_id, :effective_user_password => api_params[:effective_user_password], :key_passphrase => api_params[:key_passphrase], :concurrency_control => concurrency_control_params, :execution_timeout_interval => api_params[:execution_timeout_interval] || template.execution_timeout_interval, :time_to_pickup => api_params[:time_to_pickup], :template_invocations => template_invocations_params }.with_indifferent_access end |
#recurring_mode_params ⇒ Object
163 164 165 166 167 168 169 170 171 172 |
# File 'app/models/job_invocation_composer.rb', line 163 def recurring_mode_params { :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], :purpose => api_params[:recurrence][:purpose], } end |
#remote_execution_feature_id ⇒ Object
136 137 138 |
# File 'app/models/job_invocation_composer.rb', line 136 def remote_execution_feature_id feature&.id || api_params[:remote_execution_feature_id] end |
#targeting_params ⇒ Object
140 141 142 143 144 |
# File 'app/models/job_invocation_composer.rb', line 140 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
211 212 213 214 215 |
# File 'app/models/job_invocation_composer.rb', line 211 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
180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'app/models/job_invocation_composer.rb', line 180 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
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'app/models/job_invocation_composer.rb', line 146 def triggering_params if api_params[:recurrence].present? && api_params[:scheduling].present? recurring_mode_params.merge :start_at_raw => format_datetime(api_params[:scheduling][:start_at]) elsif api_params[:recurrence].present? && api_params[:scheduling].empty? recurring_mode_params elsif api_params[:recurrence].empty? && 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 |