bucket_list 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/bucket_list ADDED
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'bucket_list'
5
+ rescue LoadError
6
+ # Cucumber seems to need this
7
+ $:.unshift "#{File.dirname(__FILE__)}/../lib/"
8
+ $:.unshift "#{File.dirname(__FILE__)}/../lib/bucket_list/"
9
+ require 'bucket_list'
10
+ end
11
+
12
+ require 'optparse'
13
+ options = {}
14
+
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
+ opts.accept(Hash) do |string|
20
+ hash = {}
21
+ string.split(',').each do |pair|
22
+ key,value = pair.split(/:/)
23
+ hash[key] = value
24
+ end
25
+ hash
26
+ end
27
+
28
+ opts.on("-c ", "--create-bucket BUCKET_NAME", "Create a new bucket") do |bucket_name|
29
+ options[:create_bucket] = bucket_name.to_s
30
+ end
31
+
32
+ opts.on("-d ", "--delete-bucket BUCKET_NAME", "Delete an existing bucket") do |bucket_name|
33
+ options[:delete_bucket] = bucket_name.to_s
34
+ end
35
+
36
+ opts.on('-u', '--upload BUCKET_NAME:FILE',Hash, 'Upload FILE to BUCKET_NAME') do |hash|
37
+ options[:upload] = hash
38
+ end
39
+
40
+ opts.on("-o ", "--objects BUCKET_NAME", "Show contents of BUCKET_NAME") do |bucket_name|
41
+ options[:show_contents] = bucket_name.to_s
42
+ end
43
+
44
+ opts.on("-l", "--list-buckets", "Display a list of buckets") do
45
+ options[:list] = true
46
+ end
47
+
48
+ opts.on("-v", "--version", "Display bucket_list version") do
49
+ options[:version] = true
50
+ end
51
+
52
+ opts.on("-h", "--help", "Display bucket_list command usage") do
53
+ puts opts
54
+ end
55
+ end
56
+
57
+ option_parser.parse!
58
+
59
+ bucket_list = BucketList.new
60
+
61
+ if options[:create_bucket]
62
+ puts "[INFO] About to create a new S3 bucket named '#{options[:create_bucket]}'"
63
+ bucket_list.create_bucket(options[:create_bucket])
64
+ end
65
+
66
+ if options[:delete_bucket]
67
+ puts "[INFO] About to delete the '#{options[:delete_bucket]}' bucket"
68
+ bucket_list.delete_bucket(options[:delete_bucket])
69
+ end
70
+
71
+ if options[:list]
72
+ if bucket_list.get_number_of_buckets > 0
73
+ bucket_list.get_list_of_bucket_names.each do |bucket_name|
74
+ puts bucket_name
75
+ end
76
+ else
77
+ puts "[INFO] You do not currently have any AWS S3 buckets"
78
+ end
79
+ end
80
+
81
+ if options[:show_contents]
82
+ puts "[INFO] Listing contents of the '#{options[:show_contents]}' bucket"
83
+ bucket_objects = bucket_list.get_bucket_contents(options[:show_contents])
84
+ if !bucket_objects.empty?
85
+ bucket_objects.each do |object|
86
+ puts object
87
+ end
88
+ end
89
+ end
90
+
91
+ if options[:upload]
92
+ options[:upload].each_pair do |bucket_name, file|
93
+ puts "[INFO] Uploading '#{file}' to the '#{bucket_name}' bucket"
94
+ bucket_list.upload_file_to_bucket(bucket_name, file)
95
+ end
96
+ end
97
+
98
+ if options[:version]
99
+ puts "[INFO] bucket_list version: #{bucket_list.settings['version']}"
100
+ end
@@ -0,0 +1,2 @@
1
+ access_key_id: <%= ENV['BUCKET_LIST_ACCESS_KEY'] %>
2
+ secret_access_key: <%= ENV['BUCKET_LIST_SECRET_KEY'] %>
data/config/config.yml ADDED
@@ -0,0 +1,3 @@
1
+ # bucket_list config file
2
+
3
+ version: 0.1.0
@@ -0,0 +1,134 @@
1
+ require 'aws-sdk'
2
+ require 'erb'
3
+ require 'yaml'
4
+
5
+ class BucketList
6
+ attr_accessor :s3, :settings
7
+
8
+ def initialize
9
+ if keys_available?
10
+ aws_config_file = "#{File.dirname(__FILE__)}/../../config/aws_config.yml"
11
+ aws_config = YAML.load(ERB.new(File.read(aws_config_file)).result)
12
+ AWS.config(aws_config)
13
+ @s3 = AWS::S3.new
14
+
15
+ config_file = "#{File.dirname(__FILE__)}/../../config/config.yml"
16
+ config = YAML.load(File.read(config_file))
17
+ @settings = config
18
+ else
19
+ puts "[ERROR] AWS access keys must be available through 'BUCKET_LIST_ACCESS_KEY' and 'BUCKET_LIST_SECRET_KEY' environment variables"
20
+ exit 1
21
+ end
22
+ end
23
+
24
+ def bucket_exists?(bucket_name)
25
+ @s3.buckets[bucket_name].exists?
26
+ end
27
+
28
+ def bucket_contains_object?(bucket_name, object_name)
29
+ bucket_contents = Array.new
30
+ bucket = s3.buckets[bucket_name]
31
+ bucket.objects['key']
32
+ bucket.objects.each do |obj|
33
+ bucket_contents << obj.key
34
+ end
35
+ bucket_contents.include?(object_name)
36
+ end
37
+
38
+ def create_bucket(bucket_name)
39
+ if !bucket_exists?(bucket_name)
40
+ @s3.buckets.create(bucket_name)
41
+ wait_for_bucket(bucket_name, true)
42
+ puts "[INFO] Bucket created"
43
+ else
44
+ puts "[ERROR] Sorry, a bucket named '#{bucket_name}' already exists"
45
+ end
46
+ end
47
+
48
+ def keys_available?
49
+ x = ENV['BUCKET_LIST_ACCESS_KEY']
50
+ y = ENV['BUCKET_LIST_SECRET_KEY']
51
+ !x.nil? && !y.nil?
52
+ end
53
+
54
+ def delete_bucket(bucket_name)
55
+ if bucket_exists?(bucket_name)
56
+ bucket = s3.buckets[bucket_name]
57
+ bucket.delete!
58
+ wait_for_bucket(bucket_name, false)
59
+ puts "[INFO] The bucket '#{bucket_name}' has been deleted"
60
+ else
61
+ puts "[ERROR] Sorry, a bucket named '#{bucket_name}' does not exist"
62
+ end
63
+ end
64
+
65
+ def get_bucket_contents(bucket_name)
66
+ bucket_contents = Array.new
67
+ if bucket_exists?(bucket_name)
68
+ if get_number_of_bucket_contents(bucket_name) > 0
69
+ bucket = s3.buckets[bucket_name]
70
+ bucket.objects['key']
71
+ bucket.objects.each do |obj|
72
+ bucket_contents << obj.key
73
+ end
74
+ bucket_contents
75
+ else
76
+ puts "[INFO] The bucket '#{bucket_name}' does not have any contents"
77
+ end
78
+ else
79
+ puts "[ERROR] Sorry, a bucket named '#{bucket_name}' does not exist"
80
+ end
81
+ bucket_contents
82
+ end
83
+
84
+ def get_number_of_buckets
85
+ @s3.buckets.count
86
+ end
87
+
88
+ def get_number_of_bucket_contents(bucket_name)
89
+ if bucket_exists?(bucket_name)
90
+ bucket = s3.buckets[bucket_name]
91
+ bucket.objects.count
92
+ else
93
+ puts "[ERROR] Sorry, a bucket named '#{bucket_name}' does not exist"
94
+ end
95
+ end
96
+
97
+ def get_list_of_bucket_names
98
+ my_buckets = Array.new
99
+ @s3.buckets.each do |bucket|
100
+ my_buckets << bucket.name
101
+ end
102
+ my_buckets
103
+ end
104
+
105
+ def upload_file_to_bucket(bucket_name, file)
106
+ if bucket_exists?(bucket_name)
107
+ bucket = s3.buckets[bucket_name]
108
+
109
+ basename = File.basename(file)
110
+ o = bucket.objects[basename]
111
+ o.write(:file => file)
112
+
113
+ until bucket_contains_object?(bucket_name, basename) do
114
+ sleep 1
115
+ end
116
+ puts "[INFO] Uploaded '#{file}' to the '#{bucket_name}' bucket"
117
+ puts "[INFO] Access file at '#{o.url_for(:read)}'"
118
+ else
119
+ puts "[ERROR] Sorry, a bucket named '#{bucket_name}' does not exist"
120
+ end
121
+ end
122
+
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
+ end
@@ -0,0 +1 @@
1
+ require 'bucket_list/app'
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bucket_list
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ed King
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-sdk
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: cucumber
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.2.1
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.11
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.11
62
+ description: bucket_list is a simple command line tool that can be used to manage
63
+ and upload files to AWS S3 buckets.
64
+ email: ed@victavision.co.uk
65
+ executables:
66
+ - bucket_list
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - lib/bucket_list.rb
71
+ - lib/bucket_list/app.rb
72
+ - config/config.yml
73
+ - config/aws_config.yml
74
+ - bin/bucket_list
75
+ homepage: http://ed.victavision.co.uk/blog/post/27-8-2012-bucket-list
76
+ licenses: []
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 1.8.24
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Command line app for talking to AWS S3
99
+ test_files: []
100
+ has_rdoc: