bucket_list 0.2.0 → 0.3.0
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/bin/bucket_list +2 -2
- data/config/config.yml +1 -1
- data/lib/bucket_list/app.rb +36 -41
- data/lib/bucket_list/aws_helper.rb +34 -0
- metadata +3 -2
data/bin/bucket_list
CHANGED
@@ -98,11 +98,11 @@ if options[:upload]
|
|
98
98
|
if file.class.eql?(Array)
|
99
99
|
file.each do |f|
|
100
100
|
puts "[INFO] Uploading '#{f}' to the '#{bucket_name}' bucket"
|
101
|
-
bucket_list.
|
101
|
+
bucket_list.upload(bucket_name, f)
|
102
102
|
end
|
103
103
|
else
|
104
104
|
puts "[INFO] Uploading '#{file}' to the '#{bucket_name}' bucket"
|
105
|
-
bucket_list.
|
105
|
+
bucket_list.upload(bucket_name, file)
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
data/config/config.yml
CHANGED
data/lib/bucket_list/app.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'aws-sdk'
|
2
2
|
require 'erb'
|
3
3
|
require 'yaml'
|
4
|
+
require 'aws_helper'
|
4
5
|
|
5
6
|
class BucketList
|
6
7
|
attr_accessor :s3, :settings
|
8
|
+
include AwsHelper
|
7
9
|
|
8
10
|
def initialize
|
9
11
|
if keys_available?
|
@@ -40,7 +42,7 @@ class BucketList
|
|
40
42
|
|
41
43
|
def bucket_contains_object?(bucket_name, object_name)
|
42
44
|
bucket_contents = Array.new
|
43
|
-
bucket = s3.buckets[bucket_name]
|
45
|
+
bucket = @s3.buckets[bucket_name]
|
44
46
|
bucket.objects['key']
|
45
47
|
bucket.objects.each do |obj|
|
46
48
|
bucket_contents << obj.key
|
@@ -49,12 +51,9 @@ class BucketList
|
|
49
51
|
end
|
50
52
|
|
51
53
|
def create_bucket(bucket_name)
|
52
|
-
|
54
|
+
make_request {
|
53
55
|
@s3.buckets.create(bucket_name)
|
54
|
-
|
55
|
-
else
|
56
|
-
puts "[ERROR] Sorry, a bucket named '#{bucket_name}' already exists"
|
57
|
-
end
|
56
|
+
}
|
58
57
|
end
|
59
58
|
|
60
59
|
def keys_available?
|
@@ -64,34 +63,17 @@ class BucketList
|
|
64
63
|
end
|
65
64
|
|
66
65
|
def delete_bucket(bucket_name)
|
67
|
-
bucket = s3.buckets[bucket_name]
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
max_attempts = 10
|
72
|
-
until bucket_deleted || (attempts >= max_attempts)
|
73
|
-
begin
|
74
|
-
bucket.delete!
|
75
|
-
bucket_deleted = true
|
76
|
-
puts "[INFO] The bucket '#{bucket_name}' has been deleted"
|
77
|
-
rescue AWS::S3::Errors::NoSuchBucket => error
|
78
|
-
puts "[ERROR] #{error}"
|
79
|
-
puts "[INFO] Trying again... (#{attempts.to_i + 1}/#{max_attempts} remaining)"
|
80
|
-
attempts = attempts + 1
|
81
|
-
sleep 1
|
82
|
-
next
|
83
|
-
rescue AWS::S3::Errors::AccessDenied => error
|
84
|
-
puts "[ERROR] #{error}"
|
85
|
-
exit 1
|
86
|
-
end
|
87
|
-
end
|
66
|
+
bucket = @s3.buckets[bucket_name]
|
67
|
+
make_request {
|
68
|
+
bucket.delete!
|
69
|
+
}
|
88
70
|
end
|
89
71
|
|
90
72
|
def get_bucket_contents(bucket_name)
|
91
73
|
bucket_contents = Array.new
|
92
74
|
if bucket_exists?(bucket_name)
|
93
75
|
if get_number_of_bucket_contents(bucket_name) > 0
|
94
|
-
bucket = s3.buckets[bucket_name]
|
76
|
+
bucket = @s3.buckets[bucket_name]
|
95
77
|
bucket.objects['key']
|
96
78
|
bucket.objects.each do |obj|
|
97
79
|
bucket_contents << obj.key
|
@@ -112,7 +94,7 @@ class BucketList
|
|
112
94
|
|
113
95
|
def get_number_of_bucket_contents(bucket_name)
|
114
96
|
if bucket_exists?(bucket_name)
|
115
|
-
bucket = s3.buckets[bucket_name]
|
97
|
+
bucket = @s3.buckets[bucket_name]
|
116
98
|
bucket.objects.count
|
117
99
|
else
|
118
100
|
puts "[ERROR] Sorry, a bucket named '#{bucket_name}' does not exist"
|
@@ -127,22 +109,35 @@ class BucketList
|
|
127
109
|
my_buckets
|
128
110
|
end
|
129
111
|
|
130
|
-
def
|
131
|
-
|
132
|
-
bucket = s3.buckets[bucket_name]
|
133
|
-
|
134
|
-
basename = File.basename(file)
|
135
|
-
o = bucket.objects[basename]
|
136
|
-
o.write(:file => file)
|
112
|
+
def upload(bucket_name, file)
|
113
|
+
bucket = @s3.buckets[bucket_name]
|
137
114
|
|
138
|
-
|
139
|
-
|
115
|
+
if File.directory?(file)
|
116
|
+
Dir["#{file}/*"].each do |file|
|
117
|
+
if !File.directory?(file) # No support for sub dirs (yet)
|
118
|
+
puts file
|
119
|
+
upload_file(bucket, file)
|
120
|
+
end
|
140
121
|
end
|
141
|
-
puts "[INFO] Uploaded '#{file}' to the '#{bucket_name}' bucket"
|
142
|
-
puts "[INFO] Access file at '#{o.url_for(:read)}'"
|
143
122
|
else
|
144
|
-
|
123
|
+
upload_file(bucket, file)
|
145
124
|
end
|
146
125
|
end
|
147
126
|
|
127
|
+
def upload_file(bucket, file)
|
128
|
+
basename = File.basename(file)
|
129
|
+
o = bucket.objects[basename]
|
130
|
+
|
131
|
+
make_request {
|
132
|
+
o.write(:file => file, :content_type => 'text/plain')
|
133
|
+
|
134
|
+
until bucket_contains_object?(bucket.name, basename) do
|
135
|
+
sleep 1
|
136
|
+
end
|
137
|
+
}
|
138
|
+
|
139
|
+
puts "[INFO] Uploaded '#{file}' to the '#{bucket.name}' bucket"
|
140
|
+
puts "[INFO] Access file at '#{o.url_for(:read)}'"
|
141
|
+
end
|
142
|
+
|
148
143
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module AwsHelper
|
2
|
+
def make_request
|
3
|
+
done = false
|
4
|
+
attempts = 0
|
5
|
+
max_attempts = 10
|
6
|
+
|
7
|
+
until done || (attempts >= max_attempts)
|
8
|
+
begin
|
9
|
+
yield
|
10
|
+
done = true
|
11
|
+
puts "[INFO] Done"
|
12
|
+
rescue AWS::S3::Errors::NoSuchBucket => error
|
13
|
+
if attempts == 0
|
14
|
+
puts "[ERROR] #{error}"
|
15
|
+
end
|
16
|
+
puts "[INFO] Trying again... (#{attempts.to_i + 1}/#{max_attempts})"
|
17
|
+
attempts = attempts + 1
|
18
|
+
sleep 1
|
19
|
+
next
|
20
|
+
rescue AWS::S3::Errors::BucketAlreadyExists => error
|
21
|
+
puts "[ERROR] #{error}"
|
22
|
+
exit 1
|
23
|
+
rescue AWS::S3::Errors::AccessDenied => error
|
24
|
+
puts "[ERROR] #{error}"
|
25
|
+
exit 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if attempts >= max_attempts
|
30
|
+
puts "[ERROR] Max number of attempts reached"
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bucket_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
@@ -69,6 +69,7 @@ extra_rdoc_files: []
|
|
69
69
|
files:
|
70
70
|
- lib/bucket_list.rb
|
71
71
|
- lib/bucket_list/app.rb
|
72
|
+
- lib/bucket_list/aws_helper.rb
|
72
73
|
- config/config.yml
|
73
74
|
- config/aws_config.yml
|
74
75
|
- bin/bucket_list
|