module Runbook::Helpers::SSHKitHelper
Public Instance Methods
_as_block(user, group, &block)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 109 def _as_block(user, group, &block) if user || group -> { as({user: user, group: group}) { instance_exec(&block) } } else -> { instance_exec(&block) } end end
_coordinator_options(ssh_config_parallelization)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 101 def _coordinator_options(ssh_config_parallelization) ssh_config_parallelization.clone.tap do |options| if options[:strategy] options[:in] = options.delete(:strategy) end end end
_servers(ssh_config_servers)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 95 def _servers(ssh_config_servers) return :local if ssh_config_servers.empty? return :local if ssh_config_servers == [:local] ssh_config_servers end
_with_block(env, &block)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 117 def _with_block(env, &block) if env -> { with(env) { instance_exec(&block) } } else -> { instance_exec(&block) } end end
_with_umask(umask, &block)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 133 def _with_umask(umask, &block) old_umask = SSHKit.config.umask begin SSHKit.config.umask = umask if umask instance_exec(&block) ensure SSHKit.config.umask = old_umask end end
_within_block(path, &block)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 125 def _within_block(path, &block) if path -> { within(path) { instance_exec(&block) } } else -> { instance_exec(&block) } end end
find_ssh_config(object, ssh_config_method=:ssh_config)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 17 def find_ssh_config(object, ssh_config_method=:ssh_config) blank_config = Runbook::Extensions::SSHConfig.blank_ssh_config nil_or_blank = ->(config) { config.nil? || config == blank_config } ssh_config = object.send(ssh_config_method) return ssh_config unless nil_or_blank.call(ssh_config) object = object.parent while object ssh_config = object.ssh_config return ssh_config unless nil_or_blank.call(ssh_config) object = object.parent end return blank_config end
render_ssh_config_output(ssh_config)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 33 def render_ssh_config_output(ssh_config) "".tap do |output| if (servers = ssh_config[:servers]).any? server_str = servers.join(", ") if server_str.size > 80 server_str = "#{server_str[0..38]}...#{server_str[-38..-1]}" end output << " on: #{server_str}\n" end if (strategy = ssh_config[:parallelization][:strategy]) limit = ssh_config[:parallelization][:limit] wait = ssh_config[:parallelization][:wait] in_str = " in: #{strategy}" in_str << ", limit: #{limit}" if strategy == :groups in_str << ", wait: #{wait}" if [:sequence, :groups].include?(strategy) output << "#{in_str}\n" end if ssh_config[:user] || ssh_config[:group] user = ssh_config[:user] group = ssh_config[:group] as_str = " as:" as_str << " user: #{user}" if user as_str << " group: #{group}" if group output << "#{as_str}\n" end if (path = ssh_config[:path]) output << " within: #{path}\n" end if (env = ssh_config[:env]) env_str = env.map do |k, v| "#{k.to_s.upcase}=#{v}" end.join(" ") output << " with: #{env_str}\n" end if (umask = ssh_config[:umask]) output << " umask: #{umask}\n" end end end
ssh_kit_command(cmd, raw: false)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 3 def ssh_kit_command(cmd, raw: false) return [cmd] if raw cmd, args = cmd.split(" ", 2) [cmd.to_sym, args] end
ssh_kit_command_options(ssh_config)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 9 def ssh_kit_command_options(ssh_config) {}.tap do |options| if ssh_config[:user] && Runbook.configuration.enable_sudo_prompt options[:interaction_handler] ||= ::SSHKit::Sudo::InteractionHandler.new end end end
with_ssh_config(ssh_config, &exec_block)
click to toggle source
# File lib/runbook/helpers/ssh_kit_helper.rb, line 78 def with_ssh_config(ssh_config, &exec_block) user = ssh_config[:user] group = ssh_config[:group] as_block = _as_block(user, group, &exec_block) within_block = _within_block(ssh_config[:path], &as_block) with_block = _with_block(ssh_config[:env], &within_block) _with_umask(ssh_config[:umask]) do servers = _servers(ssh_config[:servers]) parallelization = ssh_config[:parallelization] coordinator_options = _coordinator_options(parallelization) SSHKit::Coordinator.new(servers).each(coordinator_options) do instance_exec(&with_block) end end end