gotime_aws 2.5.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/iam/iam.rb ADDED
@@ -0,0 +1,126 @@
1
+ module Aws
2
+
3
+ require 'xmlsimple'
4
+
5
+ class Iam < AwsBase
6
+
7
+ include AwsBaseInterface
8
+
9
+ API_VERSION = "2010-05-08"
10
+ DEFAULT_HOST = "iam.amazonaws.com"
11
+ DEFAULT_PATH = '/'
12
+ DEFAULT_PROTOCOL = 'https'
13
+ DEFAULT_PORT = 443
14
+
15
+ def self.connection_name
16
+ :iam_connection
17
+ end
18
+
19
+ @@bench = AwsBenchmarkingBlock.new
20
+
21
+ def self.bench
22
+ @@bench
23
+ end
24
+
25
+ def self.bench_xml
26
+ @@bench.xml
27
+ end
28
+
29
+ def self.bench_ec2
30
+ @@bench.service
31
+ end
32
+
33
+ # Current API version (sometimes we have to check it outside the GEM).
34
+ @@api = ENV['IAM_API_VERSION'] || API_VERSION
35
+
36
+ def self.api
37
+ @@api
38
+ end
39
+
40
+
41
+ def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
42
+ init({:name => 'IAM',
43
+ :default_host => ENV['IAM_URL'] ? URI.parse(ENV['IAM_URL']).host : DEFAULT_HOST,
44
+ :default_port => ENV['IAM_URL'] ? URI.parse(ENV['IAM_URL']).port : DEFAULT_PORT,
45
+ :default_service => ENV['IAM_URL'] ? URI.parse(ENV['IAM_URL']).path : DEFAULT_PATH,
46
+ :default_protocol => ENV['IAM_URL'] ? URI.parse(ENV['IAM_URL']).scheme : DEFAULT_PROTOCOL,
47
+ :api_version => API_VERSION},
48
+ aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'],
49
+ aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
50
+ params)
51
+ end
52
+
53
+ def do_request(action, params, options={})
54
+ link = generate_request(action, params)
55
+ p link[:request]
56
+ resp = request_info_xml_simple(:iam_connection, @params, link, @logger,
57
+ :group_tags =>{"LoadBalancersDescriptions"=>"LoadBalancersDescription",
58
+ "DBParameterGroups" =>"DBParameterGroup",
59
+ "DBSecurityGroups" =>"DBSecurityGroup",
60
+ "EC2SecurityGroups" =>"EC2SecurityGroup",
61
+ "IPRanges" =>"IPRange"},
62
+ :force_array =>["DBInstances",
63
+ "DBParameterGroups",
64
+ "DBSecurityGroups",
65
+ "EC2SecurityGroups",
66
+ "IPRanges"],
67
+ :pull_out_array =>options[:pull_out_array],
68
+ :pull_out_single=>options[:pull_out_single],
69
+ :wrapper =>options[:wrapper])
70
+ end
71
+
72
+
73
+ #-----------------------------------------------------------------
74
+ # REQUESTS
75
+ #-----------------------------------------------------------------
76
+
77
+
78
+ # options:
79
+ # :marker => value received from previous response if IsTruncated = true
80
+ # :max_items => number of items you want returned
81
+ # :path_previx => for filtering results, default is /
82
+ def list_server_certificates(options={})
83
+ @logger.info("Listing server certificates...")
84
+
85
+ params = {}
86
+ params['Marker'] = options[:marker] if options[:marker]
87
+ params['MaxItems'] = options[:max_items] if options[:max_items]
88
+ params['PathPrefix'] = options[:path_prefix] if options[:path_prefix]
89
+
90
+ resp = do_request("ListServerCertificates", params, :pull_out_array=>[:list_server_certificates_result, :server_certificate_metadata_list])
91
+
92
+
93
+ rescue Exception
94
+ on_exception
95
+ end
96
+
97
+ #
98
+ # name: name of certificate
99
+ # public_key: public key certificate in PEM-encoded format
100
+ # private_key: private key in PEM-encoded format
101
+ # options:
102
+ # :path => specify a path you want it stored in
103
+ # :certificate_chain => contents of certificate chain
104
+ def upload_server_certificate(name, public_key, private_key, options={})
105
+ params = {}
106
+ params['ServerCertificateName'] = name
107
+ params['PrivateKey'] = private_key
108
+ params['CertificateBody'] = public_key
109
+
110
+ params['CertificateChain'] = options[:certificate_chain] if options[:certificate_chain]
111
+ params['Path'] = options[:path] if options[:path]
112
+
113
+ p params
114
+
115
+ resp = do_request("UploadServerCertificate", params, :pull_out_array=>[:list_server_certificates_result, :server_certificate_metadata_list])
116
+
117
+
118
+ rescue Exception
119
+ on_exception
120
+ end
121
+
122
+
123
+ end
124
+
125
+
126
+ end
data/lib/rds/rds.rb ADDED
@@ -0,0 +1,222 @@
1
+ module Aws
2
+ require 'xmlsimple'
3
+
4
+ # API Reference: http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/
5
+ class Rds < AwsBase
6
+ include AwsBaseInterface
7
+
8
+
9
+ # Amazon API version being used
10
+ API_VERSION = nil
11
+ DEFAULT_HOST = "rds.amazonaws.com"
12
+ DEFAULT_PATH = '/'
13
+ DEFAULT_PROTOCOL = 'https'
14
+ DEFAULT_PORT = 443
15
+
16
+ @@api = ENV['RDS_API_VERSION'] || API_VERSION
17
+
18
+
19
+ def self.connection_name
20
+ :rds_connection
21
+ end
22
+
23
+ def self.api
24
+ @@api
25
+ end
26
+
27
+
28
+ @@bench = AwsBenchmarkingBlock.new
29
+
30
+ def self.bench
31
+ @@bench
32
+ end
33
+
34
+ def self.bench_xml
35
+ @@bench.xml
36
+ end
37
+
38
+
39
+ def self.bench_ec2
40
+ @@bench.service
41
+ end
42
+
43
+
44
+ def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
45
+ uri = ENV['RDS_URL'] ? URI.parse(ENV['RDS_URL']) : nil
46
+ init({:name => 'RDS',
47
+ :default_host => uri ? uri.host : DEFAULT_HOST,
48
+ :default_port => uri ? uri.port : DEFAULT_PORT,
49
+ :default_service => uri ? uri.path : DEFAULT_PATH,
50
+ :default_protocol => uri ? uri.scheme : DEFAULT_PROTOCOL,
51
+ :api_version => API_VERSION},
52
+ aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'],
53
+ aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
54
+ params)
55
+ end
56
+
57
+
58
+ def do_request(action, params, options={})
59
+ link = generate_request(action, params)
60
+ resp = request_info_xml_simple(self.class.connection_name, @params, link, @logger,
61
+ :group_tags =>{"DBInstances" =>"DBInstance",
62
+ "DBParameterGroups"=>"DBParameterGroup",
63
+ "DBSecurityGroups" =>"DBSecurityGroup",
64
+ "EC2SecurityGroups"=>"EC2SecurityGroup",
65
+ "IPRanges" =>"IPRange"},
66
+ :force_array =>["DBInstances",
67
+ "DBParameterGroups",
68
+ "DBSecurityGroups",
69
+ "EC2SecurityGroups",
70
+ "IPRanges"],
71
+ :pull_out_array =>options[:pull_out_array],
72
+ :pull_out_single=>options[:pull_out_single],
73
+ :wrapper =>options[:wrapper])
74
+ end
75
+
76
+
77
+ #-----------------------------------------------------------------
78
+ # REQUESTS
79
+ #-----------------------------------------------------------------
80
+
81
+ #
82
+ # identifier: db instance identifier. Must be unique per account per zone.
83
+ # instance_class: db.m1.small | db.m1.large | db.m1.xlarge | db.m2.2xlarge | db.m2.4xlarge
84
+ # See this for other values: http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/
85
+ #
86
+ # options:
87
+ # db_name: if you want a database created at the same time as the instance, specify :db_name option.
88
+ # availability_zone: default is random zone.
89
+ def create_db_instance(identifier, instance_class, allocated_storage, master_username, master_password, options={})
90
+ params = {}
91
+ params['DBInstanceIdentifier'] = identifier
92
+ params['DBInstanceClass'] = instance_class
93
+ params['AllocatedStorage'] = allocated_storage
94
+ params['MasterUsername'] = master_username
95
+ params['MasterUserPassword'] = master_password
96
+
97
+ params['Engine'] = options[:engine] || "MySQL5.1"
98
+ params['DBName'] = options[:db_name] if options[:db_name]
99
+ params['AvailabilityZone'] = options[:availability_zone] if options[:availability_zone]
100
+ params['PreferredMaintenanceWindow'] = options[:preferred_maintenance_window] if options[:preferred_maintenance_window]
101
+ params['BackupRetentionPeriod'] = options[:preferred_retention_period] if options[:preferred_retention_period]
102
+ params['PreferredBackupWindow'] = options[:preferred_backup_window] if options[:preferred_backup_window]
103
+
104
+ @logger.info("Creating DB Instance called #{identifier}")
105
+
106
+ link = do_request("CreateDBInstance", params, :pull_out_single=>[:create_db_instance_result, :db_instance])
107
+
108
+ rescue Exception
109
+ on_exception
110
+ end
111
+
112
+
113
+ # options:
114
+ # DBInstanceIdentifier
115
+ # MaxRecords
116
+ # Marker
117
+ #
118
+ # Returns array of instances as hashes.
119
+ # Response metadata can be retreived by calling array.response_metadata on the returned array.
120
+ def describe_db_instances(options={})
121
+ params = {}
122
+ params['DBInstanceIdentifier'] = options[:db_instance_identifier] if options[:db_instance_identifier]
123
+ params['MaxRecords'] = options[:max_records] if options[:max_records]
124
+ params['Marker'] = options[:marker] if options[:marker]
125
+
126
+ resp = do_request("DescribeDBInstances", params, :pull_out_array=>[:describe_db_instances_result, :db_instances])
127
+
128
+ rescue Exception
129
+ on_exception
130
+ end
131
+
132
+
133
+ # identifier: identifier of db instance to delete.
134
+ # final_snapshot_identifier: if specified, RDS will crate a final snapshot before deleting so you can restore it later.
135
+ def delete_db_instance(identifier, final_snapshot_identifier=nil)
136
+ @logger.info("Deleting DB Instance - " + identifier.to_s)
137
+
138
+ params = {}
139
+ params['DBInstanceIdentifier'] = identifier
140
+ if final_snapshot_identifier
141
+ params['FinalDBSnapshotIdentifier'] = final_snapshot_identifier
142
+ else
143
+ params['SkipFinalSnapshot'] = true
144
+ end
145
+
146
+ link = do_request("DeleteDBInstance", params, :pull_out_single=>[:delete_db_instance_result, :db_instance])
147
+
148
+ rescue Exception
149
+ on_exception
150
+ end
151
+
152
+
153
+ def create_db_security_group(group_name, description, options={})
154
+ params = {}
155
+ params['DBSecurityGroupName'] = group_name
156
+ params['DBSecurityGroupDescription'] = description
157
+
158
+ link = do_request("CreateDBSecurityGroup", params, :pull_out_single => [:create_db_security_group_result, :db_security_group])
159
+
160
+ rescue Exception
161
+ on_exception
162
+ end
163
+
164
+
165
+ def delete_db_security_group(group_name, options={})
166
+ params = {}
167
+ params['DBSecurityGroupName'] = group_name
168
+
169
+ link = do_request("DeleteDBSecurityGroup", params)
170
+
171
+ rescue Exception
172
+ on_exception
173
+ end
174
+
175
+
176
+ def describe_db_security_groups(options={})
177
+ params = {}
178
+ params['DBSecurityGroupName'] = options[:DBSecurityGroupName] if options[:DBSecurityGroupName]
179
+ params['MaxRecords'] = options[:MaxRecords] if options[:MaxRecords]
180
+
181
+ link = do_request("DescribeDBSecurityGroups", params, :pull_out_array=>[:describe_db_security_groups_result, :db_security_groups], :wrapper=>:db_security_group)
182
+
183
+
184
+ rescue Exception
185
+ on_exception
186
+ end
187
+
188
+
189
+ def authorize_db_security_group_ingress_ec2group(group_name, ec2_group_name, ec2_group_owner_id, options={})
190
+ params = {}
191
+ params['DBSecurityGroupName'] = group_name
192
+ params['EC2SecurityGroupOwnerId'] = ec2_group_owner_id
193
+ params['EC2SecurityGroupName'] = ec2_group_name
194
+ link = do_request("AuthorizeDBSecurityGroupIngress", params)
195
+ rescue Exception
196
+ on_exception
197
+ end
198
+
199
+
200
+ def authorize_db_security_group_ingress_range(group_name, ip_range, options={})
201
+ params = {}
202
+ params['DBSecurityGroupName'] = group_name
203
+ params['CIDRIP'] = ip_range
204
+ link = do_request("AuthorizeDBSecurityGroupIngress", params)
205
+ rescue Exception
206
+ on_exception
207
+ end
208
+
209
+
210
+ def revoke_db_security_group_ingress(group_name, ip_range, options={})
211
+ params = {}
212
+ params['DBSecurityGroupName'] = group_name
213
+ params['CIDRIP'] = ip_range
214
+ link = do_request("RevokeDBSecurityGroupIngress", params)
215
+ rescue Exception
216
+ on_exception
217
+ end
218
+
219
+
220
+ end
221
+
222
+ end
data/lib/right_aws.rb ADDED
@@ -0,0 +1,57 @@
1
+ #
2
+ # Copyright (c) 2007-2008 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+
24
+ require 'benchmark'
25
+ require 'net/https'
26
+ require 'uri'
27
+ require 'time'
28
+ require "cgi"
29
+ require "base64"
30
+ require "rexml/document"
31
+ require "openssl"
32
+ require "digest/sha1"
33
+
34
+ require 'rubygems'
35
+ require 'right_http_connection'
36
+
37
+ $:.unshift(File.dirname(__FILE__))
38
+ require 'awsbase/benchmark_fix'
39
+ #require 'awsbase/support'
40
+ require 'awsbase/awsbase'
41
+ require 'ec2/ec2'
42
+ require 'ec2/mon_interface'
43
+ require 's3/s3_interface'
44
+ require 's3/s3'
45
+ require 'sqs/sqs_interface'
46
+ require 'sqs/sqs'
47
+ require 'sdb/sdb_interface'
48
+ require 'acf/acf_interface'
49
+ require 'elb/elb_interface'
50
+
51
+
52
+ # backwards compatible.
53
+ # @deprecated
54
+ module RightAws
55
+ include Aws
56
+ extend Aws
57
+ end
data/lib/s3/bucket.rb ADDED
@@ -0,0 +1,278 @@
1
+ module Aws
2
+
3
+
4
+ class S3::Bucket
5
+ attr_reader :s3, :name, :owner, :creation_date
6
+
7
+ # Create a Bucket instance.
8
+ # If the bucket does not exist and +create+ is set, a new bucket
9
+ # is created on S3. Launching this method with +create+=+true+ may
10
+ # affect on the bucket's ACL if the bucket already exists.
11
+ # Returns Bucket instance or +nil+ if the bucket does not exist
12
+ # and +create+ is not set.
13
+ #
14
+ # s3 = Aws::S3.new(aws_access_key_id, aws_secret_access_key)
15
+ # ...
16
+ # bucket1 = Aws::S3::Bucket.create(s3, 'my_awesome_bucket_1')
17
+ # bucket1.keys #=> exception here if the bucket does not exists
18
+ # ...
19
+ # bucket2 = Aws::S3::Bucket.create(s3, 'my_awesome_bucket_2', true)
20
+ # bucket2.keys #=> list of keys
21
+ # # create a bucket at the European location with public read access
22
+ # bucket3 = Aws::S3::Bucket.create(s3,'my-awesome-bucket-3', true, 'public-read', :location => :eu)
23
+ #
24
+ # see http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAccessPolicy.html
25
+ # (section: Canned Access Policies)
26
+ #
27
+ def self.create(s3, name, create=false, perms=nil, headers={})
28
+ s3.bucket(name, create, perms, headers)
29
+ end
30
+
31
+
32
+ # Create a bucket instance. In normal use this method should
33
+ # not be called directly.
34
+ # Use Aws::S3::Bucket.create or Aws::S3.bucket instead.
35
+ def initialize(s3, name, creation_date=nil, owner=nil)
36
+ @s3 = s3
37
+ @name = name
38
+ @owner = owner
39
+ @creation_date = creation_date
40
+ if @creation_date && !@creation_date.is_a?(Time)
41
+ @creation_date = Time.parse(@creation_date)
42
+ end
43
+ end
44
+
45
+ # Return bucket name as a String.
46
+ #
47
+ # bucket = Aws::S3.bucket('my_awesome_bucket')
48
+ # puts bucket #=> 'my_awesome_bucket'
49
+ #
50
+ def to_s
51
+ @name.to_s
52
+ end
53
+
54
+ alias_method :full_name, :to_s
55
+
56
+ # Return a public link to bucket.
57
+ #
58
+ # bucket.public_link #=> 'https://s3.amazonaws.com:443/my_awesome_bucket'
59
+ #
60
+ def public_link
61
+ params = @s3.interface.params
62
+ "#{params[:protocol]}://#{params[:server]}:#{params[:port]}/#{full_name}"
63
+ end
64
+
65
+ # Returns the bucket location
66
+ def location
67
+ @location ||= @s3.interface.bucket_location(@name)
68
+ end
69
+
70
+ # Retrieves the logging configuration for a bucket.
71
+ # Returns a hash of {:enabled, :targetbucket, :targetprefix}
72
+ #
73
+ # bucket.logging_info()
74
+ # => {:enabled=>true, :targetbucket=>"mylogbucket", :targetprefix=>"loggylogs/"}
75
+ def logging_info
76
+ @s3.interface.get_logging_parse(:bucket => @name)
77
+ end
78
+
79
+ # Enables S3 server access logging on a bucket. The target bucket must have been properly configured to receive server
80
+ # access logs.
81
+ # Params:
82
+ # :targetbucket - either the target bucket object or the name of the target bucket
83
+ # :targetprefix - the prefix under which all logs should be stored
84
+ #
85
+ # bucket.enable_logging(:targetbucket=>"mylogbucket", :targetprefix=>"loggylogs/")
86
+ # => true
87
+ def enable_logging(params)
88
+ Utils.mandatory_arguments([:targetbucket, :targetprefix], params)
89
+ Utils.allow_only([:targetbucket, :targetprefix], params)
90
+ xmldoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><BucketLoggingStatus xmlns=\"http://doc.s3.amazonaws.com/2006-03-01\"><LoggingEnabled><TargetBucket>#{params[:targetbucket]}</TargetBucket><TargetPrefix>#{params[:targetprefix]}</TargetPrefix></LoggingEnabled></BucketLoggingStatus>"
91
+ @s3.interface.put_logging(:bucket => @name, :xmldoc => xmldoc)
92
+ end
93
+
94
+ # Disables S3 server access logging on a bucket. Takes no arguments.
95
+ def disable_logging
96
+ xmldoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><BucketLoggingStatus xmlns=\"http://doc.s3.amazonaws.com/2006-03-01\"></BucketLoggingStatus>"
97
+ @s3.interface.put_logging(:bucket => @name, :xmldoc => xmldoc)
98
+ end
99
+
100
+ # Retrieve a group of keys from Amazon.
101
+ # +options+ is a hash: { 'prefix'=>'', 'marker'=>'', 'max-keys'=>5, 'delimiter'=>'' }).
102
+ # Retrieves meta-headers information if +head+ it +true+.
103
+ # Returns an array of Key instances.
104
+ #
105
+ # bucket.keys #=> # returns all keys from bucket
106
+ # bucket.keys('prefix' => 'logs') #=> # returns all keys that starts with 'logs'
107
+ #
108
+ def keys(options={}, head=false)
109
+ keys_and_service(options, head)[0]
110
+ end
111
+
112
+ # Same as +keys+ method but return an array of [keys, service_data].
113
+ # where +service_data+ is a hash with additional output information.
114
+ #
115
+ # keys, service = bucket.keys_and_service({'max-keys'=> 2, 'prefix' => 'logs'})
116
+ # p keys #=> # 2 keys array
117
+ # p service #=> {"max-keys"=>"2", "prefix"=>"logs", "name"=>"my_awesome_bucket", "marker"=>"", "is_truncated"=>true}
118
+ #
119
+ def keys_and_service(options={}, head=false)
120
+ opt = {}; options.each { |key, value| opt[key.to_s] = value }
121
+ service_data = {}
122
+ service_list = {}
123
+ list = []
124
+ @s3.interface.incrementally_list_bucket(@name, opt) do |thislist|
125
+ service_list = thislist
126
+ thislist[:contents].each do |entry|
127
+ owner = S3::Owner.new(entry[:owner_id], entry[:owner_display_name])
128
+ key = S3::Key.new(self, entry[:key], nil, {}, {}, entry[:last_modified], entry[:e_tag], entry[:size], entry[:storage_class], owner)
129
+ key.head if head
130
+ list << key
131
+ end
132
+ end
133
+ service_list.each_key do |key|
134
+ service_data[key] = service_list[key] unless (key == :contents || key == :common_prefixes)
135
+ end
136
+ [list, service_data]
137
+ end
138
+
139
+ # Retrieve key information from Amazon.
140
+ # The +key_name+ is a +String+ or Key instance.
141
+ # Retrieves meta-header information if +head+ is +true+.
142
+ # Returns new Key instance.
143
+ #
144
+ # key = bucket.key('logs/today/1.log', true) #=> #<Aws::S3::Key:0xb7b1e240 ... >
145
+ # # is the same as:
146
+ # key = Aws::S3::Key.create(bucket, 'logs/today/1.log')
147
+ # key.head
148
+ #
149
+ def key(key_name, head=false)
150
+ raise 'Key name can not be empty.' if Aws::Utils.blank?(key_name)
151
+ key_instance = nil
152
+ # if this key exists - find it ....
153
+ keys({'prefix'=>key_name}, head).each do |key|
154
+ if key.name == key_name.to_s
155
+ key_instance = key
156
+ break
157
+ end
158
+ end
159
+ # .... else this key is unknown
160
+ unless key_instance
161
+ key_instance = S3::Key.create(self, key_name.to_s)
162
+ end
163
+ key_instance
164
+ end
165
+
166
+ # Store object data.
167
+ # The +key+ is a +String+ or Key instance.
168
+ # Returns +true+.
169
+ #
170
+ # bucket.put('logs/today/1.log', 'Olala!') #=> true
171
+ #
172
+ def put(key, data=nil, meta_headers={}, perms=nil, headers={})
173
+ key = S3::Key.create(self, key.to_s, data, meta_headers) unless key.is_a?(S3::Key)
174
+ key.put(data, perms, headers)
175
+ end
176
+
177
+ # Retrieve object data from Amazon.
178
+ # The +key+ is a +String+ or Key.
179
+ # Returns data.
180
+ #
181
+ # data = bucket.get('logs/today/1.log') #=>
182
+ # puts data #=> 'sasfasfasdf'
183
+ #
184
+ def get(key, headers={})
185
+ key = S3::Key.create(self, key.to_s) unless key.is_a?(S3::Key)
186
+ key.get(headers)
187
+ end
188
+
189
+ # Retrieve object data from Amazon.
190
+ # The +key+ is a +String+ or Key.
191
+ # Returns Key instance.
192
+ #
193
+ # key = bucket.get('logs/today/1.log') #=>
194
+ # puts key.data #=> 'sasfasfasdf'
195
+ #
196
+ def get_key(key, headers={})
197
+ key = S3::Key.create(self, key.to_s, headers) unless key.is_a?(S3::Key)
198
+ return key
199
+ end
200
+
201
+ # Rename object. Returns Aws::S3::Key instance.
202
+ #
203
+ # new_key = bucket.rename_key('logs/today/1.log','logs/today/2.log') #=> #<Aws::S3::Key:0xb7b1e240 ... >
204
+ # puts key.name #=> 'logs/today/2.log'
205
+ # key.exists? #=> true
206
+ #
207
+ def rename_key(old_key_or_name, new_name)
208
+ old_key_or_name = S3::Key.create(self, old_key_or_name.to_s) unless old_key_or_name.is_a?(S3::Key)
209
+ old_key_or_name.rename(new_name)
210
+ old_key_or_name
211
+ end
212
+
213
+ # Create an object copy. Returns a destination Aws::S3::Key instance.
214
+ #
215
+ # new_key = bucket.copy_key('logs/today/1.log','logs/today/2.log') #=> #<Aws::S3::Key:0xb7b1e240 ... >
216
+ # puts key.name #=> 'logs/today/2.log'
217
+ # key.exists? #=> true
218
+ #
219
+ def copy_key(old_key_or_name, new_key_or_name)
220
+ old_key_or_name = S3::Key.create(self, old_key_or_name.to_s) unless old_key_or_name.is_a?(S3::Key)
221
+ old_key_or_name.copy(new_key_or_name)
222
+ end
223
+
224
+ # Move an object to other location. Returns a destination Aws::S3::Key instance.
225
+ #
226
+ # new_key = bucket.copy_key('logs/today/1.log','logs/today/2.log') #=> #<Aws::S3::Key:0xb7b1e240 ... >
227
+ # puts key.name #=> 'logs/today/2.log'
228
+ # key.exists? #=> true
229
+ #
230
+ def move_key(old_key_or_name, new_key_or_name)
231
+ old_key_or_name = S3::Key.create(self, old_key_or_name.to_s) unless old_key_or_name.is_a?(S3::Key)
232
+ old_key_or_name.move(new_key_or_name)
233
+ end
234
+
235
+ # Remove all keys from a bucket.
236
+ # Returns +true+.
237
+ #
238
+ # bucket.clear #=> true
239
+ #
240
+ def clear
241
+ @s3.interface.clear_bucket(@name)
242
+ end
243
+
244
+ # Delete all keys where the 'folder_key' can be interpreted
245
+ # as a 'folder' name.
246
+ # Returns an array of string keys that have been deleted.
247
+ #
248
+ # bucket.keys.map{|key| key.name}.join(', ') #=> 'test, test/2/34, test/3, test1, test1/logs'
249
+ # bucket.delete_folder('test') #=> ['test','test/2/34','test/3']
250
+ #
251
+ def delete_folder(folder, separator='/')
252
+ @s3.interface.delete_folder(@name, folder, separator)
253
+ end
254
+
255
+ # Delete a bucket. Bucket must be empty.
256
+ # If +force+ is set, clears and deletes the bucket.
257
+ # Returns +true+.
258
+ #
259
+ # bucket.delete(true) #=> true
260
+ #
261
+ def delete(force=false)
262
+ force ? @s3.interface.force_delete_bucket(@name) : @s3.interface.delete_bucket(@name)
263
+ end
264
+
265
+ # Deletes an object from s3 in this bucket.
266
+ def delete_key(key)
267
+ @s3.interface.delete(name, key)
268
+ end
269
+
270
+ # Return a list of grantees.
271
+ #
272
+ def grantees
273
+ S3::Grantee::grantees(self)
274
+ end
275
+
276
+ end
277
+
278
+ end