Class: Actions::ForemanPatch::Invocation::Patch

Inherits:
EntryAction
  • Object
show all
Includes:
Helpers::WithContinuousOutput
Defined in:
app/lib/actions/foreman_patch/invocation/patch.rb

Instance Method Summary collapse

Instance Method Details

#continuous_output_providersObject



55
56
57
58
59
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 55

def continuous_output_providers
  planned_actions.select do |action|
    action.respond_to?(:fill_continuous_output)
  end
end

#finalizeObject



26
27
28
29
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 26

def finalize
  host.group_facet.last_patched_at = Time.current
  host.group_facet.save!
end

#humanized_nameObject



74
75
76
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 74

def humanized_name
  _('Patch %s') % host.name
end

#live_outputObject



50
51
52
53
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 50

def live_output
  continuous_output.sort!
  continuous_output.raw_outputs
end

#plan(invocation) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 9

def plan(invocation)
  action_subject(invocation.host, invocation_id: invocation.id)

  invocation.update!(task_id: task.id)

  sequence do
    plan_action(Actions::ForemanPatch::Invocation::Action, host, 'katello_package_update',
                pre_script: 'yum clean all; subscription-manager refresh',
                package: Setting[:skip_broken_patches] ? '--skip-broken' : nil)
    plan_action(Actions::ForemanPatch::Invocation::Action, host, 'power_action',
                action: 'restart')
    plan_action(Actions::ForemanPatch::Invocation::WaitForHost, host)
    plan_action(Actions::ForemanPatch::Invocation::Action, host, 'ensure_services', false)
    plan_self
  end
end

#rescue_strategyObject



61
62
63
64
65
66
67
68
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 61

def rescue_strategy
  planned_actions.each do |planned_action|
    if planned_action.steps.compact.any? { |step| step.state == :error }
      return rescue_strategy_for_planned_action(planned_action)
    end
  end
  rescue_strategy_for_self
end

#rescue_strategy_for_selfObject



70
71
72
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 70

def rescue_strategy_for_self
  ::Dynflow::Action::Rescue::Fail
end

#update_status(execution_plan) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/lib/actions/foreman_patch/invocation/patch.rb', line 31

def update_status(execution_plan)
  return unless root_action?
  return if input[:invocation_id].nil?

  case execution_plan.state
  when :scheduled, :pending, :planning, :planned
    invocation.update!(status: 'pending')
  when :running
    invocation.update!(status: 'running')
  else
    action = failed_action
    if action.nil?
      invocation.update!(status: 'success')
    else
      invocation.update!(status: action.required? ? 'error' : 'warning')
    end
  end
end