bucket_list 0.1.0 → 0.2.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 +20 -8
- data/config/config.yml +1 -1
- data/lib/bucket_list/app.rb +35 -21
- metadata +2 -3
data/bin/bucket_list
CHANGED
@@ -13,14 +13,17 @@ require 'optparse'
|
|
13
13
|
options = {}
|
14
14
|
|
15
15
|
option_parser = OptionParser.new do |opts|
|
16
|
-
|
17
|
-
# Allow app to take a comma-separated list of hashes
|
18
|
-
# E.g. bucket:file,bucket:file
|
19
16
|
opts.accept(Hash) do |string|
|
20
17
|
hash = {}
|
21
18
|
string.split(',').each do |pair|
|
22
19
|
key,value = pair.split(/:/)
|
23
|
-
hash
|
20
|
+
if hash.key?(key)
|
21
|
+
orig_value = hash[key]
|
22
|
+
new_value = [hash[key], value]
|
23
|
+
hash[key] = new_value
|
24
|
+
else
|
25
|
+
hash[key] = value
|
26
|
+
end
|
24
27
|
end
|
25
28
|
hash
|
26
29
|
end
|
@@ -33,7 +36,7 @@ option_parser = OptionParser.new do |opts|
|
|
33
36
|
options[:delete_bucket] = bucket_name.to_s
|
34
37
|
end
|
35
38
|
|
36
|
-
opts.on('-u', '--upload BUCKET_NAME:FILE',Hash, 'Upload FILE to BUCKET_NAME') do |hash|
|
39
|
+
opts.on('-u', '--upload BUCKET_NAME:FILE', Hash, 'Upload FILE to BUCKET_NAME') do |hash|
|
37
40
|
options[:upload] = hash
|
38
41
|
end
|
39
42
|
|
@@ -56,7 +59,9 @@ end
|
|
56
59
|
|
57
60
|
option_parser.parse!
|
58
61
|
|
59
|
-
|
62
|
+
unless options[:help]
|
63
|
+
bucket_list = BucketList.new
|
64
|
+
end
|
60
65
|
|
61
66
|
if options[:create_bucket]
|
62
67
|
puts "[INFO] About to create a new S3 bucket named '#{options[:create_bucket]}'"
|
@@ -90,8 +95,15 @@ end
|
|
90
95
|
|
91
96
|
if options[:upload]
|
92
97
|
options[:upload].each_pair do |bucket_name, file|
|
93
|
-
|
94
|
-
|
98
|
+
if file.class.eql?(Array)
|
99
|
+
file.each do |f|
|
100
|
+
puts "[INFO] Uploading '#{f}' to the '#{bucket_name}' bucket"
|
101
|
+
bucket_list.upload_file_to_bucket(bucket_name, f)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
puts "[INFO] Uploading '#{file}' to the '#{bucket_name}' bucket"
|
105
|
+
bucket_list.upload_file_to_bucket(bucket_name, file)
|
106
|
+
end
|
95
107
|
end
|
96
108
|
end
|
97
109
|
|
data/config/config.yml
CHANGED
data/lib/bucket_list/app.rb
CHANGED
@@ -21,7 +21,20 @@ class BucketList
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def bucket_exists?(bucket_name)
|
24
|
+
def bucket_exists?(bucket_name, bucket_should_exist=true)
|
25
|
+
timeout = 10
|
26
|
+
polling_interval = 0.5
|
27
|
+
time_limit = Time.now + timeout
|
28
|
+
|
29
|
+
while Time.now < time_limit
|
30
|
+
if bucket_should_exist
|
31
|
+
break if @s3.buckets[bucket_name].exists?
|
32
|
+
else
|
33
|
+
break if !@s3.buckets[bucket_name].exists?
|
34
|
+
end
|
35
|
+
sleep polling_interval
|
36
|
+
end
|
37
|
+
|
25
38
|
@s3.buckets[bucket_name].exists?
|
26
39
|
end
|
27
40
|
|
@@ -36,9 +49,8 @@ class BucketList
|
|
36
49
|
end
|
37
50
|
|
38
51
|
def create_bucket(bucket_name)
|
39
|
-
if !bucket_exists?(bucket_name)
|
52
|
+
if !bucket_exists?(bucket_name, false)
|
40
53
|
@s3.buckets.create(bucket_name)
|
41
|
-
wait_for_bucket(bucket_name, true)
|
42
54
|
puts "[INFO] Bucket created"
|
43
55
|
else
|
44
56
|
puts "[ERROR] Sorry, a bucket named '#{bucket_name}' already exists"
|
@@ -52,13 +64,26 @@ class BucketList
|
|
52
64
|
end
|
53
65
|
|
54
66
|
def delete_bucket(bucket_name)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
67
|
+
bucket = s3.buckets[bucket_name]
|
68
|
+
bucket_deleted = false
|
69
|
+
timeout = false
|
70
|
+
attempts = 0
|
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
|
62
87
|
end
|
63
88
|
end
|
64
89
|
|
@@ -120,15 +145,4 @@ class BucketList
|
|
120
145
|
end
|
121
146
|
end
|
122
147
|
|
123
|
-
def wait_for_bucket(bucket_name, exist_bool)
|
124
|
-
if exist_bool
|
125
|
-
until bucket_exists?(bucket_name) do
|
126
|
-
sleep 1
|
127
|
-
end
|
128
|
-
else
|
129
|
-
until !bucket_exists?(bucket_name) do
|
130
|
-
sleep 1
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
148
|
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.2.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-
|
12
|
+
date: 2012-09-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
@@ -97,4 +97,3 @@ signing_key:
|
|
97
97
|
specification_version: 3
|
98
98
|
summary: Command line app for talking to AWS S3
|
99
99
|
test_files: []
|
100
|
-
has_rdoc:
|