astrails-safe 0.1.9 → 0.1.10
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.
- data/Rakefile +1 -1
- data/VERSION.yml +1 -1
- data/examples/unit/local_example.rb +27 -5
- data/examples/unit/s3_example.rb +43 -13
- data/lib/astrails/safe/local.rb +6 -8
- data/lib/astrails/safe/s3.rb +6 -7
- data/lib/astrails/safe/sink.rb +7 -3
- data/templates/script.rb +1 -1
- metadata +18 -15
data/Rakefile
CHANGED
data/VERSION.yml
CHANGED
@@ -5,6 +5,9 @@ describe Astrails::Safe::Local do
|
|
5
5
|
{
|
6
6
|
:local => {
|
7
7
|
:path => "/:kind~:id~:timestamp"
|
8
|
+
},
|
9
|
+
:keep => {
|
10
|
+
:local => 2
|
8
11
|
}
|
9
12
|
}
|
10
13
|
end
|
@@ -34,15 +37,15 @@ describe Astrails::Safe::Local do
|
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
|
-
describe :
|
40
|
+
describe :path do
|
38
41
|
it "should raise RuntimeError when no path" do
|
39
42
|
lambda {
|
40
|
-
local({}).send :
|
43
|
+
local({}).send :path
|
41
44
|
}.should raise_error(RuntimeError, "missing :local/:path")
|
42
45
|
end
|
43
46
|
|
44
47
|
it "should use local/path" do
|
45
|
-
local.send(:
|
48
|
+
local.send(:path).should == "/mysqldump~blog~NoW"
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
@@ -50,7 +53,7 @@ describe Astrails::Safe::Local do
|
|
50
53
|
before(:each) do
|
51
54
|
@local = local
|
52
55
|
stub(@local).system
|
53
|
-
stub(@local).
|
56
|
+
stub(@local).full_path {"file-path"}
|
54
57
|
stub(FileUtils).mkdir_p
|
55
58
|
end
|
56
59
|
|
@@ -77,6 +80,25 @@ describe Astrails::Safe::Local do
|
|
77
80
|
end
|
78
81
|
|
79
82
|
describe :cleanup do
|
80
|
-
|
83
|
+
before(:each) do
|
84
|
+
@local = local
|
85
|
+
@files = [4,1,3,2].to_a.map { |i| "aaaaa#{i}" }
|
86
|
+
stub(Dir).[](anything) {@files}
|
87
|
+
stub(File).file?(anything) {true}
|
88
|
+
stub(File).size(anything) {1}
|
89
|
+
stub(File).unlink
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should check [:keep, :local]" do
|
93
|
+
@local.config[:keep][:local] = nil
|
94
|
+
dont_allow(Dir).[]
|
95
|
+
@local.send :cleanup
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should delete extra files" do
|
99
|
+
mock(File).unlink("aaaaa1")
|
100
|
+
mock(File).unlink("aaaaa2")
|
101
|
+
@local.send :cleanup
|
102
|
+
end
|
81
103
|
end
|
82
104
|
end
|
data/examples/unit/s3_example.rb
CHANGED
@@ -8,7 +8,6 @@ describe Astrails::Safe::S3 do
|
|
8
8
|
:bucket => "_bucket",
|
9
9
|
:key => "_key",
|
10
10
|
:secret => "_secret",
|
11
|
-
:path => "s3_path"
|
12
11
|
},
|
13
12
|
:keep => {
|
14
13
|
:s3 => 2
|
@@ -40,12 +39,12 @@ describe Astrails::Safe::S3 do
|
|
40
39
|
|
41
40
|
@files = [4,1,3,2].to_a.map { |i| stub(o = {}).key {"aaaaa#{i}"}; o }
|
42
41
|
|
43
|
-
stub(AWS::S3::Bucket).objects("_bucket", :prefix => "
|
42
|
+
stub(AWS::S3::Bucket).objects("_bucket", :prefix => "_kind/_id/_kind-_id", :max_keys => 4) {@files}
|
44
43
|
stub(AWS::S3::Bucket).find("_bucket").stub![anything].stub!.delete
|
45
44
|
end
|
46
45
|
|
47
46
|
it "should check [:keep, :s3]" do
|
48
|
-
|
47
|
+
@s3.config[:keep][:s3] = nil
|
49
48
|
dont_allow(@s3.backup).filename
|
50
49
|
@s3.send :cleanup
|
51
50
|
end
|
@@ -56,21 +55,52 @@ describe Astrails::Safe::S3 do
|
|
56
55
|
@s3.send :cleanup
|
57
56
|
end
|
58
57
|
|
59
|
-
it "should have more tests"
|
60
|
-
|
61
58
|
end
|
62
59
|
|
63
60
|
describe :active do
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
61
|
+
before(:each) do
|
62
|
+
@s3 = s3
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should be true when all params are set" do
|
66
|
+
@s3.should be_active
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should be false if bucket is missing" do
|
70
|
+
@s3.config[:s3][:bucket] = nil
|
71
|
+
@s3.should_not be_active
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should be false if key is missing" do
|
75
|
+
@s3.config[:s3][:key] = nil
|
76
|
+
@s3.should_not be_active
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should be false if secret is missing" do
|
80
|
+
@s3.config[:s3][:secret] = nil
|
81
|
+
@s3.should_not be_active
|
82
|
+
end
|
68
83
|
end
|
69
84
|
|
70
|
-
describe :
|
71
|
-
|
72
|
-
|
73
|
-
|
85
|
+
describe :path do
|
86
|
+
before(:each) do
|
87
|
+
@s3 = s3
|
88
|
+
end
|
89
|
+
it "should use s3/path 1st" do
|
90
|
+
@s3.config[:s3][:path] = "s3_path"
|
91
|
+
@s3.config[:local] = {:path => "local_path"}
|
92
|
+
@s3.send(:path).should == "s3_path"
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should use local/path 2nd" do
|
96
|
+
@s3.config[:local] = {:path => "local_path"}
|
97
|
+
@s3.send(:path).should == "local_path"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should use constant 3rd" do
|
101
|
+
@s3.send(:path).should == "_kind/_id"
|
102
|
+
end
|
103
|
+
|
74
104
|
end
|
75
105
|
|
76
106
|
describe :save do
|
data/lib/astrails/safe/local.rb
CHANGED
@@ -10,16 +10,16 @@ module Astrails
|
|
10
10
|
true
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
@
|
13
|
+
def path
|
14
|
+
@path ||= File.expand_path(expand(@config[:local, :path] || raise(RuntimeError, "missing :local/:path")))
|
15
15
|
end
|
16
16
|
|
17
17
|
def save
|
18
18
|
puts "command: #{@backup.command}" if $_VERBOSE
|
19
19
|
|
20
20
|
unless $DRY_RUN
|
21
|
-
FileUtils.mkdir_p(
|
22
|
-
system "#{@backup.command}>#{@backup.path =
|
21
|
+
FileUtils.mkdir_p(path) unless File.directory?(path)
|
22
|
+
system "#{@backup.command}>#{@backup.path = full_path}"
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
@@ -27,11 +27,9 @@ module Astrails
|
|
27
27
|
def cleanup
|
28
28
|
return unless keep = @config[:keep, :local]
|
29
29
|
|
30
|
-
base
|
30
|
+
puts "listing files #{base}" if $_VERBOSE
|
31
31
|
|
32
|
-
|
33
|
-
puts "listing files #{pattern.inspect}" if $_VERBOSE
|
34
|
-
files = Dir[pattern] .
|
32
|
+
files = Dir["#{base}*"] .
|
35
33
|
select{|f| File.file?(f) && File.size(f) > 0} .
|
36
34
|
sort
|
37
35
|
|
data/lib/astrails/safe/s3.rb
CHANGED
@@ -8,8 +8,8 @@ module Astrails
|
|
8
8
|
bucket && key && secret
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
@
|
11
|
+
def path
|
12
|
+
@path ||= expand(config[:s3, :path] || config[:local, :path] || ":kind/:id")
|
13
13
|
end
|
14
14
|
|
15
15
|
def save
|
@@ -18,11 +18,11 @@ module Astrails
|
|
18
18
|
# needed in cleanup even on dry run
|
19
19
|
AWS::S3::Base.establish_connection!(:access_key_id => key, :secret_access_key => secret, :use_ssl => true) unless $LOCAL
|
20
20
|
|
21
|
-
puts "Uploading #{bucket}:#{
|
21
|
+
puts "Uploading #{bucket}:#{full_path}" if $_VERBOSE || $DRY_RUN
|
22
22
|
unless $DRY_RUN || $LOCAL
|
23
23
|
AWS::S3::Bucket.create(bucket)
|
24
24
|
File.open(@backup.path) do |file|
|
25
|
-
AWS::S3::S3Object.store(
|
25
|
+
AWS::S3::S3Object.store(full_path, file, bucket)
|
26
26
|
end
|
27
27
|
puts "...done" if $_VERBOSE
|
28
28
|
end
|
@@ -33,10 +33,9 @@ module Astrails
|
|
33
33
|
|
34
34
|
return unless keep = @config[:keep, :s3]
|
35
35
|
|
36
|
-
base = File.basename(@backup.filename).split(".").first
|
37
36
|
|
38
|
-
puts "listing files in #{bucket}:#{
|
39
|
-
files = AWS::S3::Bucket.objects(bucket, :prefix =>
|
37
|
+
puts "listing files in #{bucket}:#{base}" if $_VERBOSE
|
38
|
+
files = AWS::S3::Bucket.objects(bucket, :prefix => base, :max_keys => keep * 2)
|
40
39
|
puts files.collect {|x| x.key} if $_VERBOSE
|
41
40
|
|
42
41
|
files = files.
|
data/lib/astrails/safe/sink.rb
CHANGED
@@ -11,9 +11,13 @@ module Astrails
|
|
11
11
|
|
12
12
|
protected
|
13
13
|
|
14
|
-
#
|
15
|
-
def
|
16
|
-
@
|
14
|
+
# path is defined in subclass
|
15
|
+
def base
|
16
|
+
@base ||= File.join(path, File.basename(@backup.filename).split(".").first)
|
17
|
+
end
|
18
|
+
|
19
|
+
def full_path
|
20
|
+
@full_path ||= File.join(path, @backup.filename) + @backup.extension
|
17
21
|
end
|
18
22
|
|
19
23
|
# call block on files to be removed (all except for the LAST 'limit' files
|
data/templates/script.rb
CHANGED
@@ -7,7 +7,7 @@ safe do
|
|
7
7
|
# :timestamp -> current run timestamp (same for all the backups in the same 'run')
|
8
8
|
# you can set separate :path for all backups (or once globally here)
|
9
9
|
local do
|
10
|
-
path "/backup/:kind
|
10
|
+
path "/backup/:kind"
|
11
11
|
end
|
12
12
|
|
13
13
|
## uncomment to enable uploads to Amazon S3
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: astrails-safe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Astrails Ltd.
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-05-
|
13
|
+
date: 2009-05-27 00:00:00 -07:00
|
14
14
|
default_executable: astrails-safe
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -30,16 +30,16 @@ executables:
|
|
30
30
|
extensions: []
|
31
31
|
|
32
32
|
extra_rdoc_files:
|
33
|
-
- README.markdown
|
34
33
|
- LICENSE
|
34
|
+
- README.markdown
|
35
35
|
files:
|
36
|
+
- LICENSE
|
36
37
|
- README.markdown
|
38
|
+
- Rakefile
|
37
39
|
- VERSION.yml
|
38
40
|
- bin/astrails-safe
|
39
41
|
- examples/example_helper.rb
|
40
|
-
- examples/integration
|
41
42
|
- examples/integration/archive_integration_example.rb
|
42
|
-
- examples/unit
|
43
43
|
- examples/unit/archive_example.rb
|
44
44
|
- examples/unit/config_example.rb
|
45
45
|
- examples/unit/gpg_example.rb
|
@@ -49,11 +49,9 @@ files:
|
|
49
49
|
- examples/unit/pgdump_example.rb
|
50
50
|
- examples/unit/s3_example.rb
|
51
51
|
- examples/unit/svndump_example.rb
|
52
|
-
- lib/astrails
|
53
|
-
- lib/astrails/safe
|
52
|
+
- lib/astrails/safe.rb
|
54
53
|
- lib/astrails/safe/archive.rb
|
55
54
|
- lib/astrails/safe/backup.rb
|
56
|
-
- lib/astrails/safe/config
|
57
55
|
- lib/astrails/safe/config/builder.rb
|
58
56
|
- lib/astrails/safe/config/node.rb
|
59
57
|
- lib/astrails/safe/gpg.rb
|
@@ -68,17 +66,12 @@ files:
|
|
68
66
|
- lib/astrails/safe/stream.rb
|
69
67
|
- lib/astrails/safe/svndump.rb
|
70
68
|
- lib/astrails/safe/tmp_file.rb
|
71
|
-
- lib/astrails/safe.rb
|
72
|
-
- lib/extensions
|
73
69
|
- lib/extensions/mktmpdir.rb
|
74
70
|
- templates/script.rb
|
75
|
-
- Rakefile
|
76
|
-
- LICENSE
|
77
71
|
has_rdoc: true
|
78
72
|
homepage: http://github.com/astrails/safe
|
79
73
|
post_install_message:
|
80
74
|
rdoc_options:
|
81
|
-
- --inline-source
|
82
75
|
- --charset=UTF-8
|
83
76
|
require_paths:
|
84
77
|
- lib
|
@@ -101,5 +94,15 @@ rubygems_version: 1.2.0
|
|
101
94
|
signing_key:
|
102
95
|
specification_version: 2
|
103
96
|
summary: Backup filesystem and databases (MySQL and PostgreSQL) to Amazon S3 (with encryption)
|
104
|
-
test_files:
|
105
|
-
|
97
|
+
test_files:
|
98
|
+
- examples/example_helper.rb
|
99
|
+
- examples/integration/archive_integration_example.rb
|
100
|
+
- examples/unit/archive_example.rb
|
101
|
+
- examples/unit/config_example.rb
|
102
|
+
- examples/unit/gpg_example.rb
|
103
|
+
- examples/unit/gzip_example.rb
|
104
|
+
- examples/unit/local_example.rb
|
105
|
+
- examples/unit/mysqldump_example.rb
|
106
|
+
- examples/unit/pgdump_example.rb
|
107
|
+
- examples/unit/s3_example.rb
|
108
|
+
- examples/unit/svndump_example.rb
|