Class: JobInvocationComposer
- Inherits:
-
Object
- Object
- JobInvocationComposer
show all
- Defined in:
- app/models/job_invocation_composer.rb
Defined Under Namespace
Classes: ApiParams, FeatureNotFound, HostIdsTranslator, JobTemplateNotFound, ParamsForFeature, ParamsFromJobInvocation, UiParams
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(params, set_defaults = false) ⇒ JobInvocationComposer
Returns a new instance of JobInvocationComposer.
378
379
380
381
382
383
384
385
386
387
388
|
# File 'app/models/job_invocation_composer.rb', line 378
def initialize(params, set_defaults = false)
@params = params
@set_defaults = set_defaults
@job_invocation = JobInvocation.new
@job_invocation.task_group = JobInvocationTaskGroup.new
@reruns = params[:reruns]
compose
@host_ids = validate_host_ids(params[:host_ids])
@search_query = job_invocation.targeting.search_query if job_invocation.targeting.bookmark_id.blank?
end
|
Instance Attribute Details
#host_ids ⇒ Object
Returns the value of attribute host_ids.
374
375
376
|
# File 'app/models/job_invocation_composer.rb', line 374
def host_ids
@host_ids
end
|
#job_invocation ⇒ Object
Returns the value of attribute job_invocation.
374
375
376
|
# File 'app/models/job_invocation_composer.rb', line 374
def job_invocation
@job_invocation
end
|
#params ⇒ Object
Returns the value of attribute params.
374
375
376
|
# File 'app/models/job_invocation_composer.rb', line 374
def params
@params
end
|
#reruns ⇒ Object
Returns the value of attribute reruns.
375
376
377
|
# File 'app/models/job_invocation_composer.rb', line 375
def reruns
@reruns
end
|
#search_query ⇒ Object
Returns the value of attribute search_query.
374
375
376
|
# File 'app/models/job_invocation_composer.rb', line 374
def search_query
@search_query
end
|
Class Method Details
.for_feature(feature_label, hosts, provided_inputs = {}) ⇒ Object
402
403
404
|
# File 'app/models/job_invocation_composer.rb', line 402
def self.for_feature(feature_label, hosts, provided_inputs = {})
self.new(ParamsForFeature.new(feature_label, hosts, provided_inputs).params)
end
|
.from_api_params(api_params) ⇒ Object
398
399
400
|
# File 'app/models/job_invocation_composer.rb', line 398
def self.from_api_params(api_params)
self.new(ApiParams.new(api_params).params)
end
|
.from_job_invocation(job_invocation, params = {}) ⇒ Object
390
391
392
|
# File 'app/models/job_invocation_composer.rb', line 390
def self.from_job_invocation(job_invocation, params = {})
self.new(ParamsFromJobInvocation.new(job_invocation, params).params)
end
|
.from_ui_params(ui_params) ⇒ Object
394
395
396
|
# File 'app/models/job_invocation_composer.rb', line 394
def self.from_ui_params(ui_params)
self.new(UiParams.new(ui_params).params, true)
end
|
Instance Method Details
#available_bookmarks ⇒ Object
533
534
535
|
# File 'app/models/job_invocation_composer.rb', line 533
def available_bookmarks
Bookmark.my_bookmarks.where(:controller => ['hosts', 'dashboard'])
end
|
#available_job_categories ⇒ Object
474
475
476
|
# File 'app/models/job_invocation_composer.rb', line 474
def available_job_categories
available_templates.reorder(:job_category).group(:job_category).pluck(:job_category)
end
|
#available_provider_types ⇒ Object
478
479
480
|
# File 'app/models/job_invocation_composer.rb', line 478
def available_provider_types
available_templates_for(job_category).reorder(:provider_type).group(:provider_type).pluck(:provider_type)
end
|
482
483
484
|
# File 'app/models/job_invocation_composer.rb', line 482
def available_template_inputs
TemplateInput.where(:template_id => job_template_ids.empty? ? available_templates_for(job_category).map(&:id) : job_template_ids)
end
|
#available_templates ⇒ Object
466
467
468
|
# File 'app/models/job_invocation_composer.rb', line 466
def available_templates
JobTemplate.authorized(:view_job_templates).where(:snippet => false)
end
|
#available_templates_for(job_category) ⇒ Object
470
471
472
|
# File 'app/models/job_invocation_composer.rb', line 470
def available_templates_for(job_category)
available_templates.where(:job_category => job_category)
end
|
#compose ⇒ Object
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
|
# File 'app/models/job_invocation_composer.rb', line 406
def compose
job_invocation.job_category = validate_job_category(params[:job_category])
job_invocation.job_category ||= resolve_job_category(available_job_categories.first) { |template| template.job_category } if @set_defaults
job_invocation.remote_execution_feature_id = params[:remote_execution_feature_id]
job_invocation.targeting = build_targeting
job_invocation.triggering = build_triggering
job_invocation.pattern_template_invocations = build_template_invocations
job_invocation.description_format = params[:description_format]
job_invocation.concurrency_level = params[:concurrency_control][:level].to_i if params[:concurrency_control][:level].present?
job_invocation.execution_timeout_interval = params[:execution_timeout_interval]
job_invocation.password = params[:password]
job_invocation.key_passphrase = params[:key_passphrase]
job_invocation.effective_user_password = params[:effective_user_password]
job_invocation.ssh_user = params[:ssh_user]
job_invocation.time_to_pickup = params[:time_to_pickup]
if @reruns && job_invocation.targeting.static?
job_invocation.targeting.assign_host_ids(JobInvocation.find(@reruns).targeting.host_ids)
job_invocation.targeting.mark_resolved!
end
job_invocation.job_category = nil unless rerun_possible?
self
end
|
#displayed_provider_types ⇒ Object
490
491
492
493
|
# File 'app/models/job_invocation_composer.rb', line 490
def displayed_provider_types
available_provider_types
end
|
#displayed_search_query ⇒ Object
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
|
# File 'app/models/job_invocation_composer.rb', line 517
def displayed_search_query
if @search_query.present?
@search_query
elsif host_ids.present?
Targeting.build_query_from_hosts(host_ids)
elsif targeting.bookmark_id
if (bookmark = available_bookmarks.find_by(:id => targeting.bookmark_id))
bookmark.query
else
''
end
else
''
end
end
|
555
556
557
558
559
|
# File 'app/models/job_invocation_composer.rb', line 555
def input_value_for(input)
invocations = pattern_template_invocations
default = TemplateInvocationInputValue.new(:template_input_id => input.id, :value => input.default)
invocations.map(&:input_values).flatten.detect { |iv| iv.template_input_id == input.id } || default
end
|
#job_template_ids ⇒ Object
561
562
563
|
# File 'app/models/job_invocation_composer.rb', line 561
def job_template_ids
job_invocation.pattern_template_invocations.map(&:template_id)
end
|
#needs_provider_type_selection? ⇒ Boolean
486
487
488
|
# File 'app/models/job_invocation_composer.rb', line 486
def needs_provider_type_selection?
available_provider_types.size > 1
end
|
#preselected_template_for_provider(provider_type) ⇒ Object
503
504
505
|
# File 'app/models/job_invocation_composer.rb', line 503
def preselected_template_for_provider(provider_type)
(templates_for_provider(provider_type) & selected_job_templates).first
end
|
#rerun_possible? ⇒ Boolean
565
566
567
|
# File 'app/models/job_invocation_composer.rb', line 565
def rerun_possible?
!(reruns && job_invocation.pattern_template_invocations.empty?)
end
|
#resolve_job_category(default_category) ⇒ Object
507
508
509
|
# File 'app/models/job_invocation_composer.rb', line 507
def resolve_job_category(default_category)
resolve_for_composer(default_category) { |form_template| form_template.job_category }
end
|
#resolve_job_template(provider_templates) ⇒ Object
511
512
513
514
515
|
# File 'app/models/job_invocation_composer.rb', line 511
def resolve_job_template(provider_templates)
resolve_for_composer(provider_templates.first) do |form_template|
provider_templates.include?(form_template) ? form_template : provider_templates.first
end
end
|
#save ⇒ Object
454
455
456
|
# File 'app/models/job_invocation_composer.rb', line 454
def save
valid? && job_invocation.save
end
|
#save! ⇒ Object
458
459
460
461
462
463
464
|
# File 'app/models/job_invocation_composer.rb', line 458
def save!
if valid?
job_invocation.save!
else
raise job_invocation.flattened_validation_exception
end
end
|
#selected_job_templates ⇒ Object
499
500
501
|
# File 'app/models/job_invocation_composer.rb', line 499
def selected_job_templates
available_templates_for(job_category).where(:id => job_template_ids)
end
|
#targeted_hosts ⇒ Object
537
538
539
540
541
542
543
|
# File 'app/models/job_invocation_composer.rb', line 537
def targeted_hosts
if displayed_search_query.blank?
Host.where('1 = 0')
else
Host.execution_scope.authorized(Targeting::RESOLVE_PERMISSION, Host).search_for(displayed_search_query)
end
end
|
#targeted_hosts_count ⇒ Object
545
546
547
548
549
|
# File 'app/models/job_invocation_composer.rb', line 545
def targeted_hosts_count
targeted_hosts.count
rescue
0
end
|
#template_invocation(job_template) ⇒ Object
551
552
553
|
# File 'app/models/job_invocation_composer.rb', line 551
def template_invocation(job_template)
pattern_template_invocations.find { |invocation| invocation.template == job_template }
end
|
#templates_for_provider(provider_type) ⇒ Object
495
496
497
|
# File 'app/models/job_invocation_composer.rb', line 495
def templates_for_provider(provider_type)
available_templates_for(job_category).select { |t| t.provider_type == provider_type }
end
|
#trigger(raise_on_error = false) ⇒ Object
432
433
434
435
436
437
438
439
440
|
# File 'app/models/job_invocation_composer.rb', line 432
def trigger(raise_on_error = false)
generate_description
if raise_on_error
save!
else
return false unless save
end
triggering.trigger(::Actions::RemoteExecution::RunHostsJob, job_invocation)
end
|
#trigger! ⇒ Object
442
443
444
|
# File 'app/models/job_invocation_composer.rb', line 442
def trigger!
trigger(true)
end
|
#valid? ⇒ Boolean
446
447
448
449
450
451
452
|
# File 'app/models/job_invocation_composer.rb', line 446
def valid?
unless triggering.valid?
job_invocation.errors.add(:triggering, 'is invalid')
return false
end
targeting.valid? & job_invocation.valid? & !pattern_template_invocations.map(&:valid?).include?(false)
end
|