webtranslateit-safe 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d56d9c1814184138e0ac2f4c7c1c62d977db103d6aecebd441ae6c861a4f85e
4
- data.tar.gz: 818c66a0f9307e18add81ef25fd29822a77ae1980cbbbdeafbcfdd5684ae65b7
3
+ metadata.gz: 63bd94e905a8a424ce2b408fa3d0d2898fc5d22c3be9739a95ff73668cd612ad
4
+ data.tar.gz: 2f33a476839a38aa403e89a3f0e35ad5c78a9c403756c0472f15c45337a0b575
5
5
  SHA512:
6
- metadata.gz: 10a974ca460fdfd6ccf52f19a55466b70f74ea2f7e929084935453cf04bc67f0c9618c44f7b9d70bca2fd23f7af84ee54e77d2161a0a7219df3800c73e466e77
7
- data.tar.gz: 6975cc66f99b3220b69556a20e5646c51ace16c7544380a1459f61cd9ce2781b8f5923dd942088676390cb50701daed4b964898562bf001edb4b9da590874ebd
6
+ metadata.gz: b50f77cc5ee6b609ad05e85fa5fc106ed21af49e014397427aa9a77de4bba9e5d6e3cff8773d78e14314e44388d6f0cf6cbf258d0e3ffd9db0ddeedc063a525d
7
+ data.tar.gz: e21c75b914bf576842f22893098c872659ba5d7dd27b84d4f087226e7aa80a43f32a133f668a20c09492762f2459707ae1c3e7f9e074db4a8b9fc7c933b4f885
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.4.5 - 2023-06-30
2
+
3
+ * Add SCP backup strategy.
4
+
1
5
  ## 0.4.4 - 2023-06-30
2
6
 
3
7
  * Remove `default_executable` line and simplify executables definition.
data/README.markdown CHANGED
@@ -155,6 +155,13 @@ The procedure to create and transfer the key is as follows:
155
155
  password "ssh password for sftp"
156
156
  end
157
157
 
158
+ sftp do
159
+ host "sftp.astrails.com"
160
+ user "astrails"
161
+ # port 8023
162
+ password "ssh password for scp"
163
+ end
164
+
158
165
  gpg do
159
166
  command "/usr/local/bin/gpg"
160
167
  options "--no-use-agent"
@@ -170,6 +177,7 @@ The procedure to create and transfer the key is as follows:
170
177
  s3 100
171
178
  cloudfiles 100
172
179
  sftp 100
180
+ scp 100
173
181
  end
174
182
 
175
183
  mysqldump do
@@ -77,7 +77,7 @@ module WebTranslateIt
77
77
  :api_key, :container, :socket, :service_net, :repo_path
78
78
  multi_value :skip_tables, :exclude, :files
79
79
  mixed_value :s3, :local, :cloudfiles, :sftp, :mysqldump, :tar, :gpg, :keep, :pgdump, :tar, :svndump,
80
- :ftp, :mongodump
80
+ :ftp, :mongodump, :scp
81
81
  collection :database, :archive, :repo
82
82
 
83
83
  private
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WebTranslateIt
4
+
5
+ module Safe
6
+
7
+ class Scp < Sink
8
+
9
+ MAX_RETRIES = 5
10
+
11
+ protected
12
+
13
+ def active?
14
+ host && user
15
+ end
16
+
17
+ def path
18
+ @path ||= expand(config[:scp, :path] || config[:local, :path] || ':kind/:id')
19
+ end
20
+
21
+ def save # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
22
+ raise 'pipe-streaming not supported for SCP.' unless @backup.path
23
+
24
+ puts "Uploading #{host}:#{full_path} via SCP" if verbose? || dry_run?
25
+
26
+ return if dry_run? || local_only?
27
+
28
+ retries = 0
29
+ opts = {}
30
+ opts[:password] = password if password
31
+ opts[:port] = port if port
32
+ Net::SCP.start(host, user, opts) do |scp|
33
+ puts "Sending #{@backup.path} to #{full_path}" if verbose?
34
+ begin
35
+ scp.upload! @backup.path, full_path
36
+ rescue IO::TimeoutError
37
+ puts 'Upload timed out, retrying'
38
+ retries += 1
39
+ if retries >= MAX_RETRIES
40
+ puts "Tried #{retries} times. Giving up."
41
+ else
42
+ retry unless retries >= MAX_RETRIES
43
+ end
44
+ rescue Net::SCP::Error
45
+ puts "Ensuring remote path (#{path}) exists" if verbose?
46
+ # mkdir -p
47
+ folders = path.split('/')
48
+ folders.each_index do |i|
49
+ folder = folders[0..i].join('/')
50
+ puts "Creating #{folder} on remote" if verbose?
51
+ begin
52
+ scp.mkdir!(folder)
53
+ rescue StandardError
54
+ Net::SCP::Error
55
+ end
56
+ end
57
+ retry
58
+ end
59
+ end
60
+ puts '...done' if verbose?
61
+ end
62
+
63
+ def cleanup
64
+ return if local_only? || dry_run?
65
+
66
+ return unless (keep = config[:keep, :scp])
67
+
68
+ puts "listing files: #{host}:#{base}*" if verbose?
69
+ opts = {}
70
+ opts[:password] = password if password
71
+ opts[:port] = port if port
72
+ Net::SFTP.start(host, user, opts) do |sftp|
73
+ files = sftp.dir.glob(path, File.basename("#{base}*"))
74
+
75
+ puts files.collect(&:name) if verbose?
76
+
77
+ files = files.collect(&:name).sort
78
+
79
+ cleanup_with_limit(files, keep) do |f|
80
+ file = File.join(path, f)
81
+ puts "removing sftp file #{host}:#{file}" if dry_run? || verbose?
82
+ sftp.remove!(file) unless dry_run? || local_only?
83
+ end
84
+ end
85
+ end
86
+
87
+ def host
88
+ config[:scp, :host]
89
+ end
90
+
91
+ def user
92
+ config[:scp, :user]
93
+ end
94
+
95
+ def password
96
+ config[:scp, :password]
97
+ end
98
+
99
+ def port
100
+ config[:scp, :port]
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+
107
+ end
@@ -1,6 +1,7 @@
1
1
  require 'aws/s3'
2
2
  require 'cloudfiles'
3
3
  require 'net/sftp'
4
+ require 'net/scp'
4
5
  # require 'net/ftp'
5
6
  require 'fileutils'
6
7
  require 'benchmark'
@@ -31,6 +32,7 @@ require 'webtranslateit/safe/sink'
31
32
  require 'webtranslateit/safe/local'
32
33
  require 'webtranslateit/safe/s3'
33
34
  require 'webtranslateit/safe/cloudfiles'
35
+ require 'webtranslateit/safe/scp'
34
36
  require 'webtranslateit/safe/sftp'
35
37
  require 'webtranslateit/safe/ftp'
36
38
 
@@ -53,7 +55,7 @@ module WebTranslateIt
53
55
  next unless collection = config[*path]
54
56
 
55
57
  collection.each do |name, c|
56
- klass.new(name, c).backup.run(c, :gpg, :gzip, :local, :s3, :cloudfiles, :sftp, :ftp)
58
+ klass.new(name, c).backup.run(c, :gpg, :gzip, :local, :s3, :cloudfiles, :scp, :sftp, :ftp)
57
59
  end
58
60
  end
59
61
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webtranslateit-safe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Briere
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: net-scp
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: net-sftp
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +96,7 @@ files:
82
96
  - lib/webtranslateit/safe/pgdump.rb
83
97
  - lib/webtranslateit/safe/pipe.rb
84
98
  - lib/webtranslateit/safe/s3.rb
99
+ - lib/webtranslateit/safe/scp.rb
85
100
  - lib/webtranslateit/safe/sftp.rb
86
101
  - lib/webtranslateit/safe/sink.rb
87
102
  - lib/webtranslateit/safe/source.rb