class Gaptool::ScpCommand
Public Instance Methods
execute()
click to toggle source
# File lib/gaptool_client/commands.rb, line 402 def execute if src.start_with?(':') # from remote to local signal_usage_error('SRC and DEST cannot be both remote') \ if dest && dest.start_with?(':') source = src[1..-1] destf = dest ? dest : File.join(Dir.pwd, File.basename(source)) destd = File.dirname(destf) Gaptool::Helpers.error("Cannot write to #{destd}") \ unless File.writable?(destd) pre_hook = proc do |node| download! node['source'], "#{node['destf']}.#{node['instance']}" end else # from local to remote signal_usage_error('SRC and DEST cannot be both local') \ if dest && !dest.start_with?(':') begin source = File.realpath(src) rescue => e Gaptool::Helpers.error(e) end destf = dest ? dest[1..-1] : File.basename(src) if destf.end_with?('/') destd = destf destf = File.join(destf, File.basename(src)) else destd = File.dirname(destf) end pre_hook = proc do |node| if test("[ -w #{node['destd']} ]") upload! node['source'], node['destf'] else fail "No such directory #{node['destd']}" \ unless test("[ -d #{node['destd']} ]") tmp = File.join('/tmp', File.basename(node['destf'])) upload! node['source'], tmp execute("sudo mv #{tmp} #{node['destf']}") end end end params = exclude_hidden? ? {} : { hidden: true } nodes = Gaptool::API.query_nodes(params.merge(instance: instance, role: role, environment: environment)) nodes = nodes.map { |x| x.merge('source' => source, 'destd' => destd, 'destf' => destf) } res = Gaptool::SSH.exec( nodes, [], pre_hooks: [pre_hook], serial: serial?, continue_on_errors: continue_on_errors?, batch_size: batch_size, log_level: Logger::INFO ) exit res end