astrails-safe 0.2.5 → 0.2.6
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/README.markdown +2 -0
- data/VERSION.yml +1 -1
- data/examples/unit/s3_example.rb +54 -6
- data/lib/astrails/safe/s3.rb +5 -0
- data/lib/astrails/safe/sftp.rb +10 -1
- data/templates/script.rb +4 -1
- metadata +2 -2
data/README.markdown
CHANGED
@@ -136,6 +136,7 @@ Example configuration
|
|
136
136
|
sftp do
|
137
137
|
host "sftp.astrails.com"
|
138
138
|
user "astrails"
|
139
|
+
# port 8023
|
139
140
|
password "ssh password for sftp"
|
140
141
|
end
|
141
142
|
|
@@ -186,6 +187,7 @@ Example configuration
|
|
186
187
|
end
|
187
188
|
|
188
189
|
tar do
|
190
|
+
options "-h" # dereference symlinks
|
189
191
|
archive "git-repositories", :files => "/home/git/repositories"
|
190
192
|
archive "dot-configs", :files => "/home/*/.[^.]*"
|
191
193
|
archive "etc", :files => "/etc", :exclude => "/etc/puppet/other"
|
data/VERSION.yml
CHANGED
data/examples/unit/s3_example.rb
CHANGED
@@ -15,14 +15,14 @@ describe Astrails::Safe::S3 do
|
|
15
15
|
}
|
16
16
|
end
|
17
17
|
|
18
|
-
def def_backup
|
18
|
+
def def_backup(extra = {})
|
19
19
|
{
|
20
20
|
:kind => "_kind",
|
21
21
|
:filename => "/backup/somewhere/_kind-_id.NOW.bar",
|
22
22
|
:extension => ".bar",
|
23
23
|
:id => "_id",
|
24
24
|
:timestamp => "NOW"
|
25
|
-
}
|
25
|
+
}.merge(extra)
|
26
26
|
end
|
27
27
|
|
28
28
|
def s3(config = def_config, backup = def_backup)
|
@@ -104,9 +104,57 @@ describe Astrails::Safe::S3 do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
describe :save do
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
def add_stubs(*stubs)
|
108
|
+
stubs.each do |s|
|
109
|
+
case s
|
110
|
+
when :connection
|
111
|
+
stub(AWS::S3::Base).establish_connection!(:access_key_id => "_key", :secret_access_key => "_secret", :use_ssl => true)
|
112
|
+
when :stat
|
113
|
+
stub(File).stat("foo").stub!.size {123}
|
114
|
+
when :create_bucket
|
115
|
+
stub(AWS::S3::Bucket).create
|
116
|
+
when :file_open
|
117
|
+
stub(File).open("foo") {|f, block| block.call(:opened_file)}
|
118
|
+
when :s3_store
|
119
|
+
stub(AWS::S3::S3Object).store(@full_path, :opened_file, "_bucket")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
before(:each) do
|
125
|
+
@s3 = s3(def_config, def_backup(:path => "foo"))
|
126
|
+
@full_path = "_kind/_id/backup/somewhere/_kind-_id.NOW.bar.bar"
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should fail if no backup.file is set" do
|
130
|
+
@s3.backup.path = nil
|
131
|
+
proc {@s3.send(:save)}.should raise_error(RuntimeError)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should establish s3 connection" do
|
135
|
+
mock(AWS::S3::Base).establish_connection!(:access_key_id => "_key", :secret_access_key => "_secret", :use_ssl => true)
|
136
|
+
add_stubs(:stat, :create_bucket, :file_open, :s3_store)
|
137
|
+
@s3.send(:save)
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should open local file" do
|
141
|
+
add_stubs(:connection, :stat, :create_bucket)
|
142
|
+
mock(File).open("foo")
|
143
|
+
@s3.send(:save)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should upload file" do
|
147
|
+
add_stubs(:connection, :stat, :create_bucket, :file_open)
|
148
|
+
mock(AWS::S3::S3Object).store(@full_path, :opened_file, "_bucket")
|
149
|
+
@s3.send(:save)
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should fail on files bigger then 5G" do
|
153
|
+
add_stubs(:connection)
|
154
|
+
mock(File).stat("foo").stub!.size {5*1024*1024*1024+1}
|
155
|
+
mock(STDERR).puts(anything)
|
156
|
+
dont_allow(Benchmark).realtime
|
157
|
+
@s3.send(:save)
|
158
|
+
end
|
111
159
|
end
|
112
160
|
end
|
data/lib/astrails/safe/s3.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Astrails
|
2
2
|
module Safe
|
3
3
|
class S3 < Sink
|
4
|
+
MAX_S3_FILE_SIZE = 5368709120
|
4
5
|
|
5
6
|
protected
|
6
7
|
|
@@ -20,6 +21,10 @@ module Astrails
|
|
20
21
|
|
21
22
|
puts "Uploading #{bucket}:#{full_path}" if $_VERBOSE || $DRY_RUN
|
22
23
|
unless $DRY_RUN || $LOCAL
|
24
|
+
if File.stat(@backup.path).size > MAX_S3_FILE_SIZE
|
25
|
+
STDERR.puts "ERROR: File size exceeds maximum allowed for upload to S3 (#{MAX_S3_FILE_SIZE}): #{@backup.path}"
|
26
|
+
return
|
27
|
+
end
|
23
28
|
benchmark = Benchmark.realtime do
|
24
29
|
AWS::S3::Bucket.create(bucket)
|
25
30
|
File.open(@backup.path) do |file|
|
data/lib/astrails/safe/sftp.rb
CHANGED
@@ -20,6 +20,7 @@ module Astrails
|
|
20
20
|
unless $DRY_RUN || $LOCAL
|
21
21
|
opts = {}
|
22
22
|
opts[:password] = password if password
|
23
|
+
opts[:port] = port if port
|
23
24
|
Net::SFTP.start(host, user, opts) do |sftp|
|
24
25
|
puts "Sending #{@backup.path} to #{full_path}" if $_VERBOSE
|
25
26
|
begin
|
@@ -46,7 +47,10 @@ module Astrails
|
|
46
47
|
return unless keep = @config[:keep, :sftp]
|
47
48
|
|
48
49
|
puts "listing files: #{host}:#{base}*" if $_VERBOSE
|
49
|
-
|
50
|
+
opts = {}
|
51
|
+
opts[:password] = password if password
|
52
|
+
opts[:port] = port if port
|
53
|
+
Net::SFTP.start(host, user, opts) do |sftp|
|
50
54
|
files = sftp.dir.glob(path, File.basename("#{base}*"))
|
51
55
|
|
52
56
|
puts files.collect {|x| x.name } if $_VERBOSE
|
@@ -74,6 +78,11 @@ module Astrails
|
|
74
78
|
def password
|
75
79
|
@config[:sftp, :password]
|
76
80
|
end
|
81
|
+
|
82
|
+
def port
|
83
|
+
@config[:sftp, :port]
|
84
|
+
end
|
85
|
+
|
77
86
|
end
|
78
87
|
end
|
79
88
|
end
|
data/templates/script.rb
CHANGED
@@ -28,6 +28,7 @@ safe do
|
|
28
28
|
# sftp do
|
29
29
|
# host "YOUR_REMOTE_HOSTNAME"
|
30
30
|
# user "YOUR_REMOTE_USERNAME"
|
31
|
+
# # port "NON STANDARD SSH PORT"
|
31
32
|
# password "YOUR_REMOTE_PASSWORD"
|
32
33
|
# path ":kind/:id" # this is the default
|
33
34
|
# end
|
@@ -87,7 +88,7 @@ safe do
|
|
87
88
|
# # uncomment to enable
|
88
89
|
# # backup PostgreSQL databases with pg_dump
|
89
90
|
# pgdump do
|
90
|
-
#
|
91
|
+
# options "-i -x -O"
|
91
92
|
#
|
92
93
|
# user "markmansour"
|
93
94
|
# # password "" - leave this out if you have ident setup
|
@@ -99,6 +100,8 @@ safe do
|
|
99
100
|
# end
|
100
101
|
|
101
102
|
tar do
|
103
|
+
# options "-h" # uncomment this to dereference symbolic links
|
104
|
+
|
102
105
|
# 'archive' is a collection item, just like 'database'
|
103
106
|
# archive "git-repositories" do
|
104
107
|
# # files and directories to backup
|
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.6
|
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-
|
13
|
+
date: 2009-12-21 00:00:00 +02:00
|
14
14
|
default_executable: astrails-safe
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|