astrails-safe 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +8 -4
- data/VERSION.yml +1 -1
- data/examples/integration/archive_integration_example.rb +4 -1
- data/examples/unit/archive_example.rb +1 -1
- data/examples/unit/config_example.rb +29 -0
- data/examples/unit/local_example.rb +3 -3
- data/examples/unit/s3_example.rb +5 -5
- data/lib/astrails/safe/archive.rb +1 -1
- data/lib/astrails/safe/config/node.rb +16 -6
- data/templates/script.rb +10 -2
- metadata +2 -2
data/README.markdown
CHANGED
@@ -148,8 +148,8 @@ Example configuration
|
|
148
148
|
end
|
149
149
|
|
150
150
|
keep do
|
151
|
-
local
|
152
|
-
s3
|
151
|
+
local 20
|
152
|
+
s3 30
|
153
153
|
end
|
154
154
|
|
155
155
|
mysqldump do
|
@@ -162,7 +162,10 @@ Example configuration
|
|
162
162
|
database :blog
|
163
163
|
database :servershape
|
164
164
|
database :astrails_com
|
165
|
-
database :secret_project_com
|
165
|
+
database :secret_project_com do
|
166
|
+
skip_tables "foo"
|
167
|
+
skip_tables ["bar", "baz"]
|
168
|
+
end
|
166
169
|
|
167
170
|
end
|
168
171
|
|
@@ -189,7 +192,8 @@ Example configuration
|
|
189
192
|
|
190
193
|
archive "blog-astrails-com" do
|
191
194
|
files "/var/www/blog.astrails.com/"
|
192
|
-
exclude
|
195
|
+
exclude "/var/www/blog.astrails.com/log"
|
196
|
+
exclude "/var/www/blog.astrails.com/tmp"
|
193
197
|
end
|
194
198
|
|
195
199
|
archive "astrails-com" do
|
data/VERSION.yml
CHANGED
@@ -42,6 +42,7 @@ describe "tar backup" do
|
|
42
42
|
archive :test1 do
|
43
43
|
files src
|
44
44
|
exclude "#{src}/q/w"
|
45
|
+
exclude "#{src}/q/w/e"
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -74,6 +75,8 @@ describe "tar backup" do
|
|
74
75
|
it "should only include qwe 1 and 2 (no 3)" do
|
75
76
|
File.exists?("#{@test}/qwe1").should be_true
|
76
77
|
File.exists?("#{@test}/q/qwe2").should be_true
|
78
|
+
File.exists?("#{@test}/q/w/qwe3").should be_false
|
79
|
+
File.exists?("#{@test}/q/w/e/qwe4").should be_false
|
77
80
|
end
|
78
81
|
|
79
82
|
it "should preserve file content" do
|
@@ -83,4 +86,4 @@ describe "tar backup" do
|
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
|
-
end
|
89
|
+
end
|
@@ -181,4 +181,33 @@ describe Astrails::Safe::Config do
|
|
181
181
|
|
182
182
|
config.to_hash.should == expected
|
183
183
|
end
|
184
|
+
|
185
|
+
it "should make an array from multivalues" do
|
186
|
+
config = Astrails::Safe::Config::Node.new do
|
187
|
+
skip_tables "a"
|
188
|
+
skip_tables "b"
|
189
|
+
files "/foo"
|
190
|
+
files "/bar"
|
191
|
+
exclude "/foo/bar"
|
192
|
+
exclude "/foo/bar/baz"
|
193
|
+
end
|
194
|
+
|
195
|
+
expected = {
|
196
|
+
"skip_tables" => ["a", "b"],
|
197
|
+
"files" => ["/foo", "/bar"],
|
198
|
+
"exclude" => ["/foo/bar", "/foo/bar/baz"],
|
199
|
+
}
|
200
|
+
|
201
|
+
config.to_hash.should == expected
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should raise error on key duplication" do
|
205
|
+
proc do
|
206
|
+
Astrails::Safe::Config::Node.new do
|
207
|
+
path "foo"
|
208
|
+
path "bar"
|
209
|
+
end
|
210
|
+
end.should raise_error(ArgumentError, "duplicate value for 'path'")
|
211
|
+
end
|
212
|
+
|
184
213
|
end
|
@@ -87,21 +87,21 @@ describe Astrails::Safe::Local do
|
|
87
87
|
|
88
88
|
describe :cleanup do
|
89
89
|
before(:each) do
|
90
|
-
@local = local
|
91
90
|
@files = [4,1,3,2].to_a.map { |i| "/mysqldump~blog~NoW/qweqwe.#{i}" }
|
92
|
-
stub(Dir).[]("/mysqldump~blog~NoW/qweqwe.*") {@files}
|
93
91
|
stub(File).file?(anything) {true}
|
94
92
|
stub(File).size(anything) {1}
|
95
93
|
stub(File).unlink
|
96
94
|
end
|
97
95
|
|
98
96
|
it "should check [:keep, :local]" do
|
99
|
-
@local.
|
97
|
+
@local = local(def_config.merge(:keep => {}))
|
100
98
|
dont_allow(Dir).[]
|
101
99
|
@local.send :cleanup
|
102
100
|
end
|
103
101
|
|
104
102
|
it "should delete extra files" do
|
103
|
+
@local = local
|
104
|
+
mock(Dir).[]("/mysqldump~blog~NoW/qweqwe.*") {@files}
|
105
105
|
mock(File).unlink("/mysqldump~blog~NoW/qweqwe.1")
|
106
106
|
mock(File).unlink("/mysqldump~blog~NoW/qweqwe.2")
|
107
107
|
@local.send :cleanup
|
data/examples/unit/s3_example.rb
CHANGED
@@ -44,7 +44,7 @@ describe Astrails::Safe::S3 do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should check [:keep, :s3]" do
|
47
|
-
@s3.config[:keep][
|
47
|
+
@s3.config[:keep].data["s3"] = nil
|
48
48
|
dont_allow(@s3.backup).filename
|
49
49
|
@s3.send :cleanup
|
50
50
|
end
|
@@ -67,17 +67,17 @@ describe Astrails::Safe::S3 do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should be false if bucket is missing" do
|
70
|
-
@s3.config[:s3][
|
70
|
+
@s3.config[:s3].data["bucket"] = nil
|
71
71
|
@s3.should_not be_active
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should be false if key is missing" do
|
75
|
-
@s3.config[:s3][
|
75
|
+
@s3.config[:s3].data["key"] = nil
|
76
76
|
@s3.should_not be_active
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should be false if secret is missing" do
|
80
|
-
@s3.config[:s3][
|
80
|
+
@s3.config[:s3].data["secret"] = nil
|
81
81
|
@s3.should_not be_active
|
82
82
|
end
|
83
83
|
end
|
@@ -87,7 +87,7 @@ describe Astrails::Safe::S3 do
|
|
87
87
|
@s3 = s3
|
88
88
|
end
|
89
89
|
it "should use s3/path 1st" do
|
90
|
-
@s3.config[:s3][
|
90
|
+
@s3.config[:s3].data["path"] = "s3_path"
|
91
91
|
@s3.config[:local] = {:path => "local_path"}
|
92
92
|
@s3.send(:path).should == "s3_path"
|
93
93
|
end
|
@@ -4,6 +4,7 @@ module Astrails
|
|
4
4
|
module Config
|
5
5
|
class Node
|
6
6
|
attr_reader :parent
|
7
|
+
attr_reader :data
|
7
8
|
def initialize(parent = nil, data = {}, &block)
|
8
9
|
@parent, @data = parent, {}
|
9
10
|
data.each { |k, v| self[k] = v }
|
@@ -26,14 +27,23 @@ module Astrails
|
|
26
27
|
end
|
27
28
|
alias :[] :find
|
28
29
|
|
30
|
+
MULTIVALUES = %w/skip_tables exclude files/
|
29
31
|
def set(key, value, &block)
|
30
|
-
@data[key.to_s]
|
31
|
-
if value.is_a?(Hash)
|
32
|
-
|
32
|
+
if @data[key.to_s]
|
33
|
+
raise(ArgumentError, "duplicate value for '#{key}'") if value.is_a?(Hash) || !MULTIVALUES.include?(key.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
if value.is_a?(Hash)
|
37
|
+
@data[key.to_s] = Node.new(self, value, &block)
|
38
|
+
else
|
39
|
+
raise(ArgumentError, "#{key}: no block supported for simple values") if block
|
40
|
+
if @data[key.to_s]
|
41
|
+
@data[key.to_s] = @data[key.to_s].to_a + value.to_a
|
33
42
|
else
|
34
|
-
|
35
|
-
value
|
43
|
+
@data[key.to_s] = value
|
36
44
|
end
|
45
|
+
value
|
46
|
+
end
|
37
47
|
end
|
38
48
|
alias :[]= :set
|
39
49
|
|
@@ -63,4 +73,4 @@ module Astrails
|
|
63
73
|
end
|
64
74
|
end
|
65
75
|
end
|
66
|
-
end
|
76
|
+
end
|
data/templates/script.rb
CHANGED
@@ -74,8 +74,12 @@ safe do
|
|
74
74
|
# gpg do
|
75
75
|
# password "custom-production-pass"
|
76
76
|
# end
|
77
|
-
|
78
|
-
#
|
77
|
+
# # skip those tables during backup
|
78
|
+
# # you can pass an array
|
79
|
+
# skip_tables [:logger_exceptions, :request_logs]
|
80
|
+
# # or pass them all separately
|
81
|
+
# skip_tables :test1
|
82
|
+
# skip_tables :test2
|
79
83
|
# end
|
80
84
|
|
81
85
|
end
|
@@ -99,12 +103,16 @@ safe do
|
|
99
103
|
# archive "git-repositories" do
|
100
104
|
# # files and directories to backup
|
101
105
|
# files "/home/git/repositories"
|
106
|
+
# # can have more then one 'files' lines or/and use an array
|
107
|
+
# files ["/home/dev/work/foo", "/home/dev/work/bar"]
|
102
108
|
# end
|
103
109
|
|
104
110
|
# archive "etc-files" do
|
105
111
|
# files "/etc"
|
106
112
|
# # exlude those files/directories
|
107
113
|
# exclude "/etc/puppet/other"
|
114
|
+
# # can have multiple 'exclude' lines or/and use an array
|
115
|
+
# exclude ["/etc/tmp/a", "/etc/tmp/b"]
|
108
116
|
# end
|
109
117
|
|
110
118
|
# archive "dot-configs" do
|
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.2.
|
4
|
+
version: 0.2.5
|
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-10-
|
13
|
+
date: 2009-10-20 00:00:00 +02:00
|
14
14
|
default_executable: astrails-safe
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|