Class: Proxy::RemoteExecution::Ssh::CommandAction
- Inherits:
-
Dynflow::Action
- Object
- Dynflow::Action
- Proxy::RemoteExecution::Ssh::CommandAction
- Includes:
- Dynflow::Action::Cancellable, Dynflow::Callback::PlanHelper
- Defined in:
- lib/smart_proxy_remote_execution_ssh/command_action.rb
Instance Method Summary collapse
- #command ⇒ Object
- #failed_run? ⇒ Boolean
- #finalize ⇒ Object
- #finish_run(update) ⇒ Object
- #init_run ⇒ Object
- #kill_run ⇒ Object
- #plan(input) ⇒ Object
- #process_update(update) ⇒ Object
- #rescue_strategy_for_self ⇒ Object
- #run(event = nil) ⇒ Object
Instance Method Details
#command ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 42 def command @command ||= Dispatcher::Command.new(:id => input[:task_id], :host => input[:hostname], :ssh_user => input[:ssh_user] || 'root', :effective_user => input[:effective_user], :script => input[:script], :effective_user_method => input[:effective_user_method], :host_public_key => input[:host_public_key], :verify_host => input[:verify_host], :suspended_action => suspended_action) end |
#failed_run? ⇒ Boolean
78 79 80 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 78 def failed_run? output[:exit_status] != 0 end |
#finalize ⇒ Object
33 34 35 36 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 33 def finalize # To mark the task as a whole as failed error! "Script execution failed" if failed_run? end |
#finish_run(update) ⇒ Object
65 66 67 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 65 def finish_run(update) output[:exit_status] = update.exit_status end |
#init_run ⇒ Object
54 55 56 57 58 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 54 def init_run output[:result] = [] Proxy::RemoteExecution::Ssh.dispatcher.tell([:initialize_command, command]) suspend end |
#kill_run ⇒ Object
60 61 62 63 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 60 def kill_run Proxy::RemoteExecution::Ssh.dispatcher.tell([:kill, command]) suspend end |
#plan(input) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 6 def plan(input) if callback = input['callback'] input[:task_id] = callback['task_id'] else input[:task_id] ||= SecureRandom.uuid end plan_with_callback(input) end |
#process_update(update) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 69 def process_update(update) output[:result].concat(update.buffer_to_hash) if update.exit_status finish_run(update) else suspend end end |
#rescue_strategy_for_self ⇒ Object
38 39 40 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 38 def rescue_strategy_for_self Dynflow::Action::Rescue::Skip end |
#run(event = nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/smart_proxy_remote_execution_ssh/command_action.rb', line 15 def run(event = nil) case event when nil init_run when CommandUpdate process_update(event) when Dynflow::Action::Cancellable::Cancel kill_run when Dynflow::Action::Skip # do nothing else raise "Unexpected event #{event.inspect}" end rescue => e action_logger.error(e) process_update(CommandUpdate.new(CommandUpdate.encode_exception("Proxy error", e))) end |