pg_export 1.0.0.rc1 → 1.0.0.rc2
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 +4 -4
- data/CHANGELOG.md +1 -0
- data/README.md +1 -1
- data/bin/pg_export +54 -11
- data/lib/pg_export/lib/pg_export/gateways/ftp.rb +2 -2
- data/lib/pg_export/lib/pg_export/gateways/ssh.rb +12 -4
- data/lib/pg_export/lib/pg_export/repositories/gateway_dump_repository.rb +2 -2
- data/lib/pg_export/version.rb +1 -1
- data/pg_export.gemspec +3 -2
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96c2a7a23f195dba8cb7e21e3de8d9d130fd5849291e68ed153892b1f9e7aef6
|
4
|
+
data.tar.gz: 6f3fe11961d2d6b2089b6abacf93a1f37e48deee88d697c8402a9ac73b3dbbd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 320d541ded251f9053bffa686fb429e22572b306f48227cb9b51aaa4bae76fd452ce2ab8e8f84ac63a0b1b4628bc8c70fbfbfb26d2295d5fc7bd1c1f9188330f
|
7
|
+
data.tar.gz: db3b2d4799b5ddc7e0628070b8d99406655d7fc3111a34a93dc8237a189ea01ef004a72d8ed2716ad03d74b901ec597d4dc796c9e893b0557e0f698639788a48
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -74,7 +74,7 @@ __Step 1.__ Prepare ENV variables.
|
|
74
74
|
PG_EXPORT_GATEWAY_USER=user
|
75
75
|
PG_EXPORT_GATEWAY_PASSWORD=password
|
76
76
|
|
77
|
-
/* Encryption key
|
77
|
+
/* Encryption key should have exactly 16 characters. */
|
78
78
|
/* Dumps will be SSL(AES-128-CBC) encrypted using this key. */
|
79
79
|
PG_EXPORT_ENCRYPTION_KEY=1234567890abcdef
|
80
80
|
|
data/bin/pg_export
CHANGED
@@ -11,30 +11,58 @@ ENV['GATEWAY'] = 'ftp'
|
|
11
11
|
interactive = false
|
12
12
|
database = nil
|
13
13
|
|
14
|
+
|
14
15
|
option_parser = OptionParser.new do |opts|
|
15
|
-
opts.banner =
|
16
|
+
opts.banner = <<~TXT
|
17
|
+
NAME
|
18
|
+
pg_export - CLI for exporting/importing PostgreSQL dumps via FTP/SSH
|
19
|
+
|
20
|
+
SYNOPSIS (default mode)
|
21
|
+
pg_export DATABASE [options]
|
22
|
+
|
23
|
+
SYNOPSIS (interactive mode)
|
24
|
+
pg_export --interactive [DATABASE] [options]
|
25
|
+
|
26
|
+
ARGUMENTS
|
27
|
+
DATABASE - database name to export (when default mode)
|
28
|
+
- phrase to filter database dumps by (when interactive mode)
|
29
|
+
|
30
|
+
OPTIONS
|
31
|
+
TXT
|
16
32
|
|
17
|
-
opts.on('-g', '--gateway GATEWAY', String, '
|
33
|
+
opts.on('-g', '--gateway GATEWAY', String, 'ssh or ftp (default: ftp) - credentials need to be set via ENVs') do |g|
|
18
34
|
ENV['GATEWAY'] = g
|
19
35
|
end
|
20
36
|
|
21
|
-
opts.on('-
|
37
|
+
opts.on('-s', '--ssh', 'Same as "--gateway ssh"') do
|
38
|
+
ENV['GATEWAY'] = 'ssh'
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on('-f', '--ftp', 'Same as "--gateway ftp"') do
|
42
|
+
ENV['GATEWAY'] = 'ftp'
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on('-d', '--database DATABASE', String, 'Alternative way of specifying name of the database to export or phrase to filter by') do |d|
|
22
46
|
database = d
|
23
47
|
end
|
24
48
|
|
25
|
-
opts.on('-
|
49
|
+
opts.on('-e', '--encryption_key KEY', String, 'Dumps will be SSL(AES-128-CBC) encrypted using this key. Should have exactly 16 characters. Overwrites PG_EXPORT_ENCRYPTION_KEY env') do |key|
|
50
|
+
ENV['PG_EXPORT_ENCRYPTION_KEY'] = key
|
51
|
+
end
|
52
|
+
|
53
|
+
opts.on('-k', '--keep KEEP', String, "Number of dump files to keep on FTP (default: 10). Overwrites KEEP_DUMPS env") do |keep|
|
26
54
|
ENV['KEEP_DUMPS'] = keep
|
27
55
|
end
|
28
56
|
|
29
|
-
opts.on('-t', '--timestamped', '
|
57
|
+
opts.on('-t', '--timestamped', 'Enables log messages with timestamps') do
|
30
58
|
ENV['LOGGER_FORMAT'] = 'timestamped'
|
31
59
|
end
|
32
60
|
|
33
|
-
opts.on('-m', '--muted', '
|
61
|
+
opts.on('-m', '--muted', 'Mutes log messages (overrides -t option)') do
|
34
62
|
ENV['LOGGER_FORMAT'] = 'muted'
|
35
63
|
end
|
36
64
|
|
37
|
-
opts.on('-i', '--interactive', '
|
65
|
+
opts.on('-i', '--interactive', 'Interactive mode, for importing dumps') do
|
38
66
|
interactive = true
|
39
67
|
end
|
40
68
|
|
@@ -48,29 +76,44 @@ option_parser = OptionParser.new do |opts|
|
|
48
76
|
exit
|
49
77
|
end
|
50
78
|
|
51
|
-
opts.separator
|
79
|
+
opts.separator <<~TXT
|
80
|
+
|
81
|
+
ENV
|
82
|
+
PG_EXPORT_GATEWAY_HOST required
|
83
|
+
PG_EXPORT_GATEWAY_USER required
|
84
|
+
PG_EXPORT_GATEWAY_PASSWORD optional when eg. authorized key is added
|
85
|
+
PG_EXPORT_ENCRYPTION_KEY required or set by --encryption_key)
|
86
|
+
TXT
|
87
|
+
|
88
|
+
opts.separator "\nTEST RUN"
|
52
89
|
|
53
|
-
opts.on('-c', '--configuration', '
|
90
|
+
opts.on('-c', '--configuration', 'Print the configuration') do
|
54
91
|
require 'pg_export/container'
|
55
92
|
PgExport::Container.start(:config)
|
56
93
|
puts PgExport::Container['config'].to_h
|
57
94
|
exit
|
58
95
|
end
|
59
96
|
|
60
|
-
opts.on('-w', '--welcome', '
|
97
|
+
opts.on('-w', '--welcome', 'Try connecting to the gateway (FTP or SSH) to verify the connection') do
|
61
98
|
require 'pg_export/container'
|
62
99
|
PgExport::Container.start(ENV['GATEWAY'].to_sym)
|
63
100
|
gateway = PgExport::Container['factories.gateway_factory'].gateway
|
64
101
|
puts gateway.welcome
|
65
102
|
exit
|
66
103
|
end
|
104
|
+
|
105
|
+
if ARGV.empty?
|
106
|
+
puts opts
|
107
|
+
exit
|
108
|
+
end
|
67
109
|
end
|
68
110
|
|
69
111
|
begin
|
70
112
|
option_parser.parse!
|
113
|
+
database = ARGV.first unless ARGV.empty?
|
71
114
|
rescue OptionParser::ParseError => e
|
72
115
|
warn e.message.capitalize
|
73
|
-
warn 'Type "pg_export
|
116
|
+
warn 'Type "pg_export" for available options'
|
74
117
|
exit
|
75
118
|
end
|
76
119
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# auto_register: false
|
4
4
|
|
5
|
+
require 'ed25519'
|
5
6
|
require 'net/ssh'
|
6
7
|
require 'net/scp'
|
7
8
|
|
@@ -30,11 +31,18 @@ class PgExport
|
|
30
31
|
@ssh&.close
|
31
32
|
end
|
32
33
|
|
33
|
-
def list(
|
34
|
+
def list(name)
|
35
|
+
grep =
|
36
|
+
if name.nil? || name.empty?
|
37
|
+
''
|
38
|
+
else
|
39
|
+
" | grep #{name}"
|
40
|
+
end
|
41
|
+
|
34
42
|
ssh
|
35
|
-
.exec!("ls -l
|
36
|
-
.split("\n")
|
37
|
-
.
|
43
|
+
.exec!("ls -l#{grep}")
|
44
|
+
.split("\n").map { |row| extract_meaningful_attributes(row) }
|
45
|
+
.reject { |item| item[:name].nil? }
|
38
46
|
.sort_by { |item| item[:name] }
|
39
47
|
.reverse
|
40
48
|
end
|
@@ -9,7 +9,7 @@ class PgExport
|
|
9
9
|
module Repositories
|
10
10
|
class GatewayDumpRepository
|
11
11
|
def all(database_name:, gateway:)
|
12
|
-
gateway.list(
|
12
|
+
gateway.list(database_name).map do |item|
|
13
13
|
begin
|
14
14
|
dump(item[:name], database_name, item[:size])
|
15
15
|
rescue Dry::Types::ConstraintError
|
@@ -19,7 +19,7 @@ class PgExport
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def by_database_name(database_name:, gateway:, offset:)
|
22
|
-
gateway.list(database_name
|
22
|
+
gateway.list(database_name).drop(offset).map do |item|
|
23
23
|
begin
|
24
24
|
dump(item[:name], database_name, item[:size])
|
25
25
|
rescue Dry::Types::ConstraintError
|
data/lib/pg_export/version.rb
CHANGED
data/pg_export.gemspec
CHANGED
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.authors = ['Krzysztof Maicher']
|
11
11
|
spec.email = ['krzysztof.maicher@gmail.com']
|
12
12
|
|
13
|
-
spec.summary = 'CLI for
|
14
|
-
spec.description = "CLI for
|
13
|
+
spec.summary = 'CLI for exporting/importing PostgreSQL dumps via FTP/SSH.'
|
14
|
+
spec.description = "CLI for exporting/importing PostgreSQL dumps via FTP/SSH.\
|
15
15
|
Can be used for backups or synchronizing databases between production and development environments."
|
16
16
|
spec.homepage = 'https://github.com/maicher/pg_export'
|
17
17
|
spec.license = 'MIT'
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'dry-struct', '~> 1.0'
|
27
27
|
spec.add_dependency 'dry-system', '~> 0.18'
|
28
28
|
spec.add_dependency 'dry-transaction', '~> 0.13'
|
29
|
+
spec.add_dependency 'ed25519'
|
29
30
|
spec.add_dependency 'net-ssh'
|
30
31
|
spec.add_dependency 'net-scp'
|
31
32
|
spec.add_dependency 'tty-prompt'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_export
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Maicher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-initializer
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.13'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: ed25519
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: net-ssh
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,7 +234,7 @@ dependencies:
|
|
220
234
|
- - "~>"
|
221
235
|
- !ruby/object:Gem::Version
|
222
236
|
version: 0.59.2
|
223
|
-
description: CLI for
|
237
|
+
description: CLI for exporting/importing PostgreSQL dumps via FTP/SSH. Can
|
224
238
|
be used for backups or synchronizing databases between production and development
|
225
239
|
environments.
|
226
240
|
email:
|
@@ -319,5 +333,5 @@ requirements: []
|
|
319
333
|
rubygems_version: 3.2.3
|
320
334
|
signing_key:
|
321
335
|
specification_version: 4
|
322
|
-
summary: CLI for
|
336
|
+
summary: CLI for exporting/importing PostgreSQL dumps via FTP/SSH.
|
323
337
|
test_files: []
|