Class: RestFtpDaemon::Remote::RemoteSftp
- Inherits:
-
RemoteBase
- Object
- RemoteBase
- RestFtpDaemon::Remote::RemoteSftp
- Defined in:
- lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb
Instance Attribute Summary collapse
-
#sftp ⇒ Object
readonly
Class options.
Class Method Summary collapse
-
.handles ⇒ Object
URI schemes handled by this plugin.
Instance Method Summary collapse
- #chdir_or_create(directory, mkdir = false) ⇒ Object
- #close ⇒ Object
- #connect ⇒ Object
- #connected? ⇒ Boolean
- #debug_enabled ⇒ Object
-
#initialize(target, job, config) ⇒ RemoteSftp
constructor
A new instance of RemoteSftp.
- #mkdir(directory) ⇒ Object
- #move(source, target) ⇒ Object
- #push(source, target, &callback) ⇒ Object
- #remote_try_delete(target) ⇒ Object
- #size_if_exists(target) ⇒ Object
Constructor Details
#initialize(target, job, config) ⇒ RemoteSftp
Returns a new instance of RemoteSftp.
26 27 28 29 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 26 def initialize target, job, config # Call daddy's initialize() first super end |
Instance Attribute Details
#sftp ⇒ Object (readonly)
Class options
19 20 21 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 19 def sftp @sftp end |
Class Method Details
Instance Method Details
#chdir_or_create(directory, mkdir = false) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 84 def chdir_or_create directory, mkdir = false # Init, extract my parent name and my own name log_debug "chdir_or_create mkdir[#{mkdir}] dir[#{directory}]" parent, _current = split_path(directory) # Access this directory begin @sftp.opendir! directory rescue Net::SFTP::StatusException => _e # If not allowed to create path, that's over, we're stuck return false unless mkdir # Recurse upward chdir_or_create parent, mkdir # Now I was able to chdir into my parent, create the current directory mkdir directory # Finally retry the chdir retry else return true end # We should never get here raise JobTargetShouldBeDirectory end |
#close ⇒ Object
145 146 147 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 145 def close log_debug "remote close" end |
#connect ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 31 def connect super # Debug level if debug_enabled verbosity = Logger::DEBUG else verbosity = false end # Connect remote server @sftp = Net::SFTP.start(@target.host.to_s, @target.user.to_s, password: @target.password.to_s, verbose: verbosity, port: @target.port, non_interactive: true, timeout: DEFAULT_SFTP_TIMEOUT ) # rescue NotImplementedError => exception # raise RemoteConnectError, "RemoteConnectError: #{exception.class}: #{exception.message}" rescue Exception => exception raise RemoteConnectError, "#{exception.class}: #{exception.}" end |
#connected? ⇒ Boolean
149 150 151 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 149 def connected? @sftp && !@sftp.closed? end |
#debug_enabled ⇒ Object
153 154 155 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 153 def debug_enabled @config[:debug_sftp] end |
#mkdir(directory) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 76 def mkdir directory log_debug "mkdir [#{directory}]" @sftp.mkdir! directory rescue StandardError => ex raise TargetPermissionError, ex. end |
#move(source, target) ⇒ Object
141 142 143 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 141 def move source, target @sftp.rename! source.path_abs, target.path_abs, 0x00000001 end |
#push(source, target, &callback) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 113 def push source, target, &callback # Push init raise RestFtpDaemon::AssertionFailed, "push/sftp" if @sftp.nil? # Do the transfer @sftp.upload! source.path_abs, target.path_abs do |event, _uploader, *args| case event when :open then # args[0] : file metadata when :put then # args[0] : file metadata # args[1] : byte offset in remote file # args[2] : data being written (as string) # puts "writing #{args[2].length} bytes to #{args[0].remote} starting at #{args[1]}" # Update job status after this block transfer yield args[2].length, target.name when :close then # args[0] : file metadata when :mkdir # args[0] : remote path name when :finish end end end |
#remote_try_delete(target) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 66 def remote_try_delete target log_debug "remote_try_delete [#{target.name}]" @sftp.remove target.path_abs rescue Net::SFTP::StatusException log_debug "#{LOG_INDENT}[#{target.name}] file not found" else log_debug "#{LOG_INDENT}[#{target.name}] removed" end |
#size_if_exists(target) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/plugins/rest-ftp-daemon/remote/remote_sftp.rb', line 56 def size_if_exists target log_debug "size_if_exists [#{target.name}]" stat = @sftp.stat! target.path_abs rescue Net::SFTP::StatusException return false else return stat.size end |