Class: Actions::ForemanPatch::Invocation::Action
- Inherits:
-
EntryAction
- Object
- EntryAction
- Actions::ForemanPatch::Invocation::Action
- Includes:
- Helpers::WithDelegatedAction
- Defined in:
- app/lib/actions/foreman_patch/invocation/action.rb
Defined Under Namespace
Classes: TemplateInvocation, TemplateInvocationInputValue
Instance Method Summary collapse
- #continuous_output_providers ⇒ Object
- #exit_status ⇒ Object
- #feature ⇒ Object
- #fill_continuous_output(continuous_output) ⇒ Object
- #humanized_name ⇒ Object
- #live_output ⇒ Object
- #plan(host, feature_name, required = true, **input_values) ⇒ Object
- #required? ⇒ Boolean
- #rescue_strategy_for_self ⇒ Object
- #resource_locks ⇒ Object
- #run ⇒ Object
- #template ⇒ Object
Instance Method Details
#continuous_output_providers ⇒ Object
95 96 97 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 95 def continuous_output_providers super << self end |
#exit_status ⇒ Object
78 79 80 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 78 def exit_status delegated_output[:exit_status] end |
#feature ⇒ Object
82 83 84 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 82 def feature @feature ||= ::RemoteExecutionFeature.feature(input[:feature_name]) end |
#fill_continuous_output(continuous_output) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 99 def fill_continuous_output(continuous_output) delegated_output.fetch('result', []).each do |raw_output| continuous_output.add_raw_output(raw_output) end = (continuous_output. || task.ended_at).to_f + 1 fill_planning_errors_to_continuous_output(continuous_output) unless exit_status continuous_output.add_output(_('Exit status: %s') % exit_status, 'stdout', ) if exit_status rescue => e continuous_output.add_exception(_('Error loading data from proxy'), e) end |
#humanized_name ⇒ Object
117 118 119 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 117 def humanized_name input[:feature_name].titleize end |
#live_output ⇒ Object
90 91 92 93 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 90 def live_output continuous_output.sort! continuous_output.raw_outputs end |
#plan(host, feature_name, required = true, **input_values) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 41 def plan(host, feature_name, required = true, **input_values) action_subject(host, feature_name: feature_name, required: required, **input_values) invocation = TemplateInvocation.new(template, **input_values) provider = template.provider proxy_selector = provider.required_proxy_selector_for(template) || ::RemoteExecutionProxySelector.new proxy = proxy_selector.determine_proxy(host, template.provider_type.to_s) renderer = InputTemplateRenderer.new(template, host, invocation) script = renderer.render raise _('Failed rendering template: %s') % renderer. unless script = { hostname: provider.find_ip_or_hostname(host), execution_timeout_interval: template.execution_timeout_interval, script: script, secrets: provider.secrets(host), } = provider.(invocation, host).merge() sequence do plan_delegated_action(proxy, provider.proxy_action_class, ) plan_self end end |
#required? ⇒ Boolean
113 114 115 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 113 def required? input.fetch(:required, true) end |
#rescue_strategy_for_self ⇒ Object
121 122 123 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 121 def rescue_strategy_for_self required? ? ::Dynflow::Action::Rescue::Fail : ::Dynflow::Action::Rescue::Skip end |
#resource_locks ⇒ Object
37 38 39 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 37 def resource_locks :link end |
#run ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 69 def run if exit_status != 0 users = ::User.select { |user| user.receives?(:patch_invocation_failure) }.compact MailNotification[:patch_invocation_failure].deliver(users: users, host: host, output: live_output) unless users.blank? fail(_('Patch step failed: %{step}') % {step: humanized_name}) end end |
#template ⇒ Object
86 87 88 |
# File 'app/lib/actions/foreman_patch/invocation/action.rb', line 86 def template @template ||= feature.job_template end |