webtranslateit-safe 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 620a90f70005e6406e8a1d355a90e287ffb38893c1e1ab39ffca0e82707d4122
4
- data.tar.gz: 52eb2a49cf8aa91cc03c0ee471282e097628487d99ee9f91203b3ed72518f22d
3
+ metadata.gz: 622f6f352864fc8dc4b3938346a25a46a47874e3b439938ed3d9b177218f2564
4
+ data.tar.gz: fa08df6cdc398f48a2bb5f8c7fd2289bf50b9cf6c3f6aaa39b542f8143363357
5
5
  SHA512:
6
- metadata.gz: 2121d992be6eccad69dcede5b04a7c83a78f156d129d118f49a713d433e0736ead3d8e0185ea5ca9f5650f843e9e7981a619a89cbe1a1f726a84fc1ea0755ab4
7
- data.tar.gz: 6df61f68e23d994300b155880425f8316744545bba20d13eac1bd1268e97dd0be2a81e7119b935db9a647daafb177398835d081241d10edcb80832ec8ce54a32
6
+ metadata.gz: 458c754bea2197d46e29e9405705af3961a03b1fec4f2f72e994c022c5549412ff4f1baa00cbd868d36df07a0d94a2cda7007b6fb447b739ed36df0efefd63e5
7
+ data.tar.gz: e70216d1c71e82b4d980a264e50f411b1c392a9d0f26f60605e71a8dc633199a4e195bed14786e858ff84aa415e90a69204f45869c8ea1a7850583b781591349
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.4.8 - 2023-07-05
2
+
3
+ * Remove svndump feature.
4
+ * Remove FTP transfer feature.
5
+ * Merge SCP with SFTP, add `use_scp` option to SFTP to force SCP transfers.
6
+
1
7
  ## 0.4.7 - 2023-06-30
2
8
 
3
9
  * Hotfix.
data/README.markdown CHANGED
@@ -9,6 +9,8 @@ We’ve added:
9
9
  - Support for ruby 3.2
10
10
  - Standardized code with rubocop
11
11
  - Added support for SCP transfers — On some conditions with servers with higher latency, transfering large files (> 18GB) with SFTP can take a very long time.
12
+ - Removed svndump feature
13
+ - Removed FTP transfer feature
12
14
 
13
15
  ## Installation
14
16
 
@@ -132,13 +134,7 @@ safe do
132
134
  user "astrails"
133
135
  # port 8023
134
136
  password "ssh password for sftp"
135
- end
136
-
137
- sftp do
138
- host "sftp.astrails.com"
139
- user "astrails"
140
- # port 8023
141
- password "ssh password for scp"
137
+ use_scp: true # use SCP if possible
142
138
  end
143
139
 
144
140
  gpg do
@@ -176,12 +172,6 @@ safe do
176
172
 
177
173
  end
178
174
 
179
- svndump do
180
- repo :my_repo do
181
- repo_path "/home/svn/my_repo"
182
- end
183
- end
184
-
185
175
  pgdump do
186
176
  options "-i -x -O" # -i => ignore version, -x => do not dump privileges (grant/revoke), -O => skip restoration of object ownership in plain text format
187
177
 
@@ -74,10 +74,10 @@ module WebTranslateIt
74
74
 
75
75
  simple_value :verbose, :dry_run, :local_only, :path, :command,
76
76
  :options, :user, :host, :port, :password, :key, :secret, :bucket,
77
- :api_key, :container, :socket, :service_net, :repo_path
77
+ :api_key, :container, :socket, :service_net, :repo_path, :use_scp
78
78
  multi_value :skip_tables, :exclude, :files
79
- mixed_value :s3, :local, :cloudfiles, :sftp, :mysqldump, :tar, :gpg, :keep, :pgdump, :tar, :svndump,
80
- :ftp, :mongodump, :scp
79
+ mixed_value :s3, :local, :cloudfiles, :sftp, :mysqldump, :tar, :gpg, :keep, :pgdump, :tar,
80
+ :mongodump
81
81
  collection :database, :archive, :repo
82
82
 
83
83
  private
@@ -19,7 +19,7 @@ module WebTranslateIt
19
19
  def save # rubocop:todo Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
20
20
  raise 'pipe-streaming not supported for SFTP.' unless @backup.path
21
21
 
22
- puts "Uploading #{host}:#{full_path} via SFTP" if verbose? || dry_run?
22
+ puts "Uploading #{host}:#{full_path} via #{use_scp? ? 'SCP' : 'SFTP'}" if verbose? || dry_run?
23
23
 
24
24
  return if dry_run? || local_only?
25
25
 
@@ -27,10 +27,11 @@ module WebTranslateIt
27
27
  opts = {}
28
28
  opts[:password] = password if password
29
29
  opts[:port] = port if port
30
- Net::SFTP.start(host, user, opts) do |sftp|
30
+ protocol = use_scp? ? Net::SCP : Net::SFTP
31
+ protocol.start(host, user, opts) do |connexion| # rubocop:todo Metrics/BlockLength
31
32
  puts "Sending #{@backup.path} to #{full_path}" if verbose?
32
33
  begin
33
- sftp.upload! @backup.path, full_path
34
+ connexion.upload! @backup.path, full_path
34
35
  rescue IO::TimeoutError
35
36
  puts 'Upload timed out, retrying'
36
37
  retries += 1
@@ -39,17 +40,19 @@ module WebTranslateIt
39
40
  else
40
41
  retry unless retries >= MAX_RETRIES
41
42
  end
42
- rescue Net::SFTP::StatusException
43
- puts "Ensuring remote path (#{path}) exists" if verbose?
44
- # mkdir -p
45
- folders = path.split('/')
46
- folders.each_index do |i|
47
- folder = folders[0..i].join('/')
48
- puts "Creating #{folder} on remote" if verbose?
49
- begin
50
- sftp.mkdir!(folder)
51
- rescue StandardError
52
- Net::SFTP::StatusException
43
+ rescue Net::SFTP::StatusException, Net::SCP::Error
44
+ Net::SFTP.start(host, user, opts) do |sftp|
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
+ sftp.mkdir!(folder)
53
+ rescue StandardError
54
+ Net::SFTP::StatusException
55
+ end
53
56
  end
54
57
  end
55
58
  retry
@@ -100,6 +103,10 @@ module WebTranslateIt
100
103
  config[:sftp, :port]
101
104
  end
102
105
 
106
+ def use_scp?
107
+ config[:sftp, :use_scp] == true
108
+ end
109
+
103
110
  end
104
111
 
105
112
  end
@@ -21,7 +21,6 @@ require 'web_translate_it/safe/source'
21
21
  require 'web_translate_it/safe/mysqldump'
22
22
  require 'web_translate_it/safe/pgdump'
23
23
  require 'web_translate_it/safe/archive'
24
- require 'web_translate_it/safe/svndump'
25
24
  require 'web_translate_it/safe/mongodump'
26
25
 
27
26
  require 'web_translate_it/safe/pipe'
@@ -32,9 +31,7 @@ require 'web_translate_it/safe/sink'
32
31
  require 'web_translate_it/safe/local'
33
32
  require 'web_translate_it/safe/s3'
34
33
  require 'web_translate_it/safe/cloudfiles'
35
- require 'web_translate_it/safe/scp'
36
34
  require 'web_translate_it/safe/sftp'
37
- require 'web_translate_it/safe/ftp'
38
35
 
39
36
  module WebTranslateIt
40
37
 
@@ -50,12 +47,11 @@ module WebTranslateIt
50
47
  [[Mysqldump, %i[mysqldump databases]],
51
48
  [Pgdump, %i[pgdump databases]],
52
49
  [Mongodump, %i[mongodump databases]],
53
- [Archive, %i[tar archives]],
54
- [Svndump, %i[svndump repos]]].each do |klass, path|
50
+ [Archive, %i[tar archives]]].each do |klass, path|
55
51
  next unless collection = config[*path]
56
52
 
57
53
  collection.each do |name, c|
58
- klass.new(name, c).backup.run(c, :gpg, :gzip, :local, :s3, :cloudfiles, :scp, :sftp, :ftp)
54
+ klass.new(name, c).backup.run(c, :gpg, :gzip, :local, :s3, :cloudfiles, :sftp)
59
55
  end
60
56
  end
61
57
 
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.7
4
+ version: 0.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Briere
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-30 00:00:00.000000000 Z
12
+ date: 2023-07-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-s3
@@ -68,9 +68,9 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  description: |
71
- WebTranslateIt-Safe is a simple tool to backup databases (MySQL and PostgreSQL), Subversion repositories (with svndump) and just files.
71
+ WebTranslateIt-Safe is a simple tool to backup databases (MySQL and PostgreSQL) and just files.
72
72
  Backups can be stored locally or remotely and can be enctypted.
73
- Remote storage is supported on Amazon S3, Rackspace Cloud Files, or just plain FTP/SFTP.
73
+ Remote storage is supported on Amazon S3, Rackspace Cloud Files, or just plain SFTP.
74
74
  email:
75
75
  - support@webtranslateit.com
76
76
  executables:
@@ -87,7 +87,6 @@ files:
87
87
  - lib/web_translate_it/safe/cloudfiles.rb
88
88
  - lib/web_translate_it/safe/config/builder.rb
89
89
  - lib/web_translate_it/safe/config/node.rb
90
- - lib/web_translate_it/safe/ftp.rb
91
90
  - lib/web_translate_it/safe/gpg.rb
92
91
  - lib/web_translate_it/safe/gzip.rb
93
92
  - lib/web_translate_it/safe/local.rb
@@ -96,12 +95,10 @@ files:
96
95
  - lib/web_translate_it/safe/pgdump.rb
97
96
  - lib/web_translate_it/safe/pipe.rb
98
97
  - lib/web_translate_it/safe/s3.rb
99
- - lib/web_translate_it/safe/scp.rb
100
98
  - lib/web_translate_it/safe/sftp.rb
101
99
  - lib/web_translate_it/safe/sink.rb
102
100
  - lib/web_translate_it/safe/source.rb
103
101
  - lib/web_translate_it/safe/stream.rb
104
- - lib/web_translate_it/safe/svndump.rb
105
102
  - lib/web_translate_it/safe/tmp_file.rb
106
103
  homepage: http://github.com/webtranslateit/safe
107
104
  licenses:
@@ -1,87 +0,0 @@
1
- module WebTranslateIt
2
-
3
- module Safe
4
-
5
- class Ftp < Sink
6
-
7
- protected
8
-
9
- def active?
10
- host && user
11
- end
12
-
13
- def path
14
- @path ||= expand(config[:ftp, :path] || config[:local, :path] || ':kind/:id')
15
- end
16
-
17
- def save # rubocop:todo Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
18
- raise 'pipe-streaming not supported for FTP.' unless @backup.path
19
-
20
- puts "Uploading #{host}:#{full_path} via FTP" if verbose? || dry_run?
21
-
22
- return if dry_run? || local_only?
23
-
24
- port ||= 21
25
- Net::FTP.open(host) do |ftp|
26
- ftp.connect(host, port)
27
- ftp.login(user, password)
28
- puts "Sending #{@backup.path} to #{full_path}" if verbose?
29
- begin
30
- ftp.put(@backup.path, full_path)
31
- rescue Net::FTPPermError
32
- puts "Ensuring remote path (#{path}) exists" if verbose?
33
- end
34
- end
35
- puts '...done' if verbose?
36
- end
37
-
38
- # rubocop:todo Metrics/PerceivedComplexity
39
- def cleanup # rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
40
- return if local_only? || dry_run?
41
-
42
- return unless keep = config[:keep, :ftp]
43
-
44
- puts "listing files: #{host}:#{base}*" if verbose?
45
- port ||= 21
46
- Net::FTP.open(host) do |ftp|
47
- ftp.connect(host, port)
48
- ftp.login(user, password)
49
- files = ftp.nlst(path)
50
- pattern = File.basename(base.to_s)
51
- files = files.select { |x| x.start_with?(pattern) }
52
- puts(files.collect { |x| x }) if verbose?
53
-
54
- files = files
55
- .collect { |x| x }
56
- .sort
57
-
58
- cleanup_with_limit(files, keep) do |f|
59
- file = File.join(path, f)
60
- puts "removing ftp file #{host}:#{file}" if dry_run? || verbose?
61
- ftp.delete(file) unless dry_run? || local_only?
62
- end
63
- end
64
- end
65
- # rubocop:enable Metrics/PerceivedComplexity
66
-
67
- def host
68
- config[:ftp, :host]
69
- end
70
-
71
- def user
72
- config[:ftp, :user]
73
- end
74
-
75
- def password
76
- config[:ftp, :password]
77
- end
78
-
79
- def port
80
- config[:ftp, :port]
81
- end
82
-
83
- end
84
-
85
- end
86
-
87
- end
@@ -1,109 +0,0 @@
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, Metrics/MethodLength
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
- # rubocop:todo Metrics/PerceivedComplexity
64
- def cleanup # rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/MethodLength
65
- return if local_only? || dry_run?
66
-
67
- return unless (keep = config[:keep, :scp])
68
-
69
- puts "listing files: #{host}:#{base}*" if verbose?
70
- opts = {}
71
- opts[:password] = password if password
72
- opts[:port] = port if port
73
- Net::SFTP.start(host, user, opts) do |sftp|
74
- files = sftp.dir.glob(path, File.basename("#{base}*"))
75
-
76
- puts files.collect(&:name) if verbose?
77
-
78
- files = files.collect(&:name).sort
79
-
80
- cleanup_with_limit(files, keep) do |f|
81
- file = File.join(path, f)
82
- puts "removing sftp file #{host}:#{file}" if dry_run? || verbose?
83
- sftp.remove!(file) unless dry_run? || local_only?
84
- end
85
- end
86
- end
87
- # rubocop:enable Metrics/PerceivedComplexity
88
-
89
- def host
90
- config[:scp, :host]
91
- end
92
-
93
- def user
94
- config[:scp, :user]
95
- end
96
-
97
- def password
98
- config[:scp, :password]
99
- end
100
-
101
- def port
102
- config[:scp, :port]
103
- end
104
-
105
- end
106
-
107
- end
108
-
109
- end
@@ -1,17 +0,0 @@
1
- module WebTranslateIt
2
-
3
- module Safe
4
-
5
- class Svndump < Source
6
-
7
- def command
8
- "svnadmin dump #{config[:options]} #{config[:repo_path]}"
9
- end
10
-
11
- def extension = '.svn'
12
-
13
- end
14
-
15
- end
16
-
17
- end