right_aws 2.0.0 → 2.1.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.
Files changed (50) hide show
  1. data/History.txt +22 -1
  2. data/Manifest.txt +11 -1
  3. data/README.txt +0 -4
  4. data/Rakefile +19 -25
  5. data/lib/acf/right_acf_interface.rb +199 -135
  6. data/lib/acf/right_acf_invalidations.rb +144 -0
  7. data/lib/acf/right_acf_origin_access_identities.rb +4 -4
  8. data/lib/acf/right_acf_streaming_interface.rb +19 -26
  9. data/lib/acw/right_acw_interface.rb +1 -2
  10. data/lib/as/right_as_interface.rb +6 -7
  11. data/lib/awsbase/right_awsbase.rb +287 -91
  12. data/lib/awsbase/support.rb +2 -82
  13. data/lib/awsbase/version.rb +9 -0
  14. data/lib/ec2/right_ec2.rb +101 -38
  15. data/lib/ec2/right_ec2_ebs.rb +71 -58
  16. data/lib/ec2/right_ec2_images.rb +82 -42
  17. data/lib/ec2/right_ec2_instances.rb +74 -44
  18. data/lib/ec2/right_ec2_placement_groups.rb +108 -0
  19. data/lib/ec2/right_ec2_reserved_instances.rb +50 -46
  20. data/lib/ec2/right_ec2_security_groups.rb +148 -32
  21. data/lib/ec2/right_ec2_spot_instances.rb +53 -27
  22. data/lib/ec2/right_ec2_tags.rb +139 -0
  23. data/lib/ec2/right_ec2_vpc.rb +151 -139
  24. data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
  25. data/lib/elb/right_elb_interface.rb +93 -18
  26. data/lib/iam/right_iam_access_keys.rb +71 -0
  27. data/lib/iam/right_iam_groups.rb +195 -0
  28. data/lib/iam/right_iam_interface.rb +341 -0
  29. data/lib/iam/right_iam_mfa_devices.rb +67 -0
  30. data/lib/iam/right_iam_users.rb +251 -0
  31. data/lib/rds/right_rds_interface.rb +513 -202
  32. data/lib/right_aws.rb +12 -12
  33. data/lib/route_53/right_route_53_interface.rb +630 -0
  34. data/lib/s3/right_s3.rb +9 -12
  35. data/lib/s3/right_s3_interface.rb +10 -11
  36. data/lib/sdb/active_sdb.rb +18 -33
  37. data/lib/sdb/right_sdb_interface.rb +36 -4
  38. data/lib/sqs/right_sqs.rb +1 -2
  39. data/lib/sqs/right_sqs_gen2.rb +0 -1
  40. data/lib/sqs/right_sqs_gen2_interface.rb +4 -5
  41. data/lib/sqs/right_sqs_interface.rb +6 -7
  42. data/right_aws.gemspec +91 -0
  43. data/test/awsbase/test_helper.rb +2 -0
  44. data/test/awsbase/test_right_awsbase.rb +12 -0
  45. data/test/s3/test_right_s3.rb +1 -1
  46. data/test/sdb/test_active_sdb.rb +1 -1
  47. data/test/sdb/test_batch_put_attributes.rb +54 -0
  48. data/test/sqs/test_right_sqs.rb +0 -6
  49. data/test/sqs/test_right_sqs_gen2.rb +1 -1
  50. metadata +109 -58
@@ -281,4 +281,25 @@ the source key.
281
281
  RightAws::Ec2#create_snapshot,
282
282
  RightAws::Ec2#try_create_snapshot
283
283
  - :created_time in:
284
- RightAws::ElbInterface#describe_load_balancers
284
+ RightAws::ElbInterface#describe_load_balancers
285
+
286
+ === 2.1.0
287
+ Release Notes:
288
+ - Added:
289
+ - Route 53: API '2010-10-01'
290
+ - ACF: API '2010-11-01'
291
+ - EC2:
292
+ - API '2010-08-31'
293
+ - Port based group permissions support
294
+ - HPC Support
295
+ - Tags Suport
296
+ - ClientToken support added on instance launch
297
+ - RDS: API "2010-07-28"
298
+ - ELB: API '2010-07-01' (SSL support)
299
+ - IAM: API '2010-05-08' (AWS Identity and Access Management interface)
300
+ - 301 Redirect support added
301
+ - Removed:
302
+ - ActiveSupport dependency
303
+ - SDB: uuid gem dependency
304
+ - this gem requires right_http_connection 0bc3343232133bdb38c237d8285525d74495d3f5 or later
305
+ - "Raise On Timeout On Action" feature added to avoid duplicate resources creation if a timeout error occures and a retry is performed
@@ -2,9 +2,9 @@ History.txt
2
2
  Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
+ lib/awsbase/support.rb
5
6
  lib/awsbase/benchmark_fix.rb
6
7
  lib/awsbase/right_awsbase.rb
7
- lib/awsbase/support.rb
8
8
  lib/ec2/right_ec2.rb
9
9
  lib/ec2/right_ec2_images.rb
10
10
  lib/ec2/right_ec2_instances.rb
@@ -14,6 +14,9 @@ lib/ec2/right_ec2_ebs.rb
14
14
  lib/ec2/right_ec2_reserved_instances.rb
15
15
  lib/ec2/right_ec2_vpc.rb
16
16
  lib/ec2/right_ec2_monitoring.rb
17
+ lib/ec2/right_ec2_placement_groups.rb
18
+ lib/ec2/right_ec2_windows_mobility.rb
19
+ lib/ec2/right_ec2_tags.rb
17
20
  lib/right_aws.rb
18
21
  lib/s3/right_s3.rb
19
22
  lib/acw/right_acw_interface.rb
@@ -29,7 +32,14 @@ lib/sqs/right_sqs_interface.rb
29
32
  lib/acf/right_acf_interface.rb
30
33
  lib/acf/right_acf_streaming_interface.rb
31
34
  lib/acf/right_acf_origin_access_identities.rb
35
+ lib/acf/right_acf_invalidations.rb
32
36
  lib/rds/right_rds_interface.rb
37
+ lib/iam/right_iam_interface.rb
38
+ lib/iam/right_iam_groups.rb
39
+ lib/iam/right_iam_users.rb
40
+ lib/iam/right_iam_access_keys.rb
41
+ lib/iam/right_iam_mfa_devices.rb
42
+ lib/route_53/right_route_53_interface.rb
33
43
  test/ec2/test_helper.rb
34
44
  test/ec2/test_right_ec2.rb
35
45
  test/http_connection.rb
data/README.txt CHANGED
@@ -68,10 +68,6 @@ concurrent requests to AWS. The way this plays out in practice is:
68
68
  Note that due to limitations in the I/O of the Ruby interpreter you
69
69
  may not get the degree of parallelism you may expect with the multi-threaded setting.
70
70
 
71
- By default, EC2/S3/SQS/SDB/ACF interface instances are created in single-threaded mode. Set
72
- "params[:multi_thread]" to "true" in the initialization arguments to use
73
- multithreaded mode.
74
-
75
71
  == GETTING STARTED:
76
72
 
77
73
  * For EC2 read RightAws::Ec2 and consult the Amazon EC2 API documentation at
data/Rakefile CHANGED
@@ -1,45 +1,39 @@
1
1
  # -*- ruby -*-
2
2
 
3
3
  require 'rubygems'
4
- require 'hoe'
5
4
  require "rake/testtask"
6
5
  require 'rcov/rcovtask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/clean'
7
8
  $: << File.dirname(__FILE__)
8
- require 'lib/right_aws.rb'
9
-
10
9
  testglobs = ["test/ts_right_aws.rb"]
11
10
 
12
-
13
- # Suppress Hoe's self-inclusion as a dependency for our Gem. This also keeps
14
- # Rake & rubyforge out of the dependency list. Users must manually install
15
- # these gems to run tests, etc.
16
- class Hoe
17
- def extra_deps
18
- @extra_deps.reject do |x|
19
- Array(x).first == 'hoe'
20
- end
21
- end
11
+ begin
12
+ require 'bundler'
13
+ rescue LoadError => e
14
+ STDERR.puts("Bundler is not available, some rake tasks will not be defined: #{e.message}")
15
+ else
16
+ Bundler::GemHelper.install_tasks
22
17
  end
23
18
 
24
- Hoe.new('right_aws', RightAws::VERSION::STRING) do |p|
25
- p.rubyforge_name = 'rightaws'
26
- p.author = 'RightScale, Inc.'
27
- p.email = 'support@rightscale.com'
28
- p.summary = 'Interface classes for the Amazon EC2, SQS, and S3 Web Services'
29
- p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
30
- p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
31
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
32
- p.remote_rdoc_dir = "/right_aws_gem_doc"
33
- p.extra_deps = [['right_http_connection','>= 1.2.1']]
34
- p.test_globs = testglobs
19
+ # == Gem == #
20
+
21
+ gemtask = Rake::GemPackageTask.new(Gem::Specification.load("right_aws.gemspec")) do |package|
22
+ package.package_dir = ENV['PACKAGE_DIR'] || 'pkg'
23
+ package.need_zip = true
24
+ package.need_tar = true
35
25
  end
36
26
 
27
+ directory gemtask.package_dir
28
+
29
+ CLEAN.include(gemtask.package_dir)
30
+
37
31
  desc "Analyze code coverage of the unit tests."
38
32
  Rcov::RcovTask.new do |t|
39
33
  t.test_files = FileList[testglobs]
40
34
  #t.verbose = true # uncomment to see the executed command
41
35
  end
42
-
36
+
43
37
  desc "Test just the SQS interface"
44
38
  task :testsqs do
45
39
  require 'test/test_credentials'
@@ -38,7 +38,7 @@ module RightAws
38
38
  # [{:status => "Deployed",
39
39
  # :domain_name => "d74zzrxmpmygb.6hops.net",
40
40
  # :aws_id => "E4U91HCJHGXVC",
41
- # :origin => "my-bucket.s3.amazonaws.com",
41
+ # :s3_origin => {:dns_name=>"bucket-for-konstantin-00.s3.amazonaws.com"},
42
42
  # :cnames => ["x1.my-awesome-site.net", "x1.my-awesome-site.net"]
43
43
  # :comment => "My comments",
44
44
  # :last_modified_time => "2008-09-10T17:00:04.000Z" }, ..., {...} ]
@@ -46,16 +46,17 @@ module RightAws
46
46
  # distibution = list.first
47
47
  #
48
48
  # info = acf.get_distribution(distibution[:aws_id]) #=>
49
- # {:enabled => true,
50
- # :caller_reference => "200809102100536497863003",
51
- # :e_tag => "E39OHHU1ON65SI",
52
- # :status => "Deployed",
53
- # :domain_name => "d3dxv71tbbt6cd.6hops.net",
54
- # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
55
- # :aws_id => "E2REJM3VUN5RSI",
56
- # :comment => "Woo-Hoo!",
57
- # :origin => "my-bucket.s3.amazonaws.com",
58
- # :last_modified_time => "2008-09-10T17:00:54.000Z" }
49
+ # {:last_modified_time=>"2010-05-19T18:54:38.242Z",
50
+ # :status=>"Deployed",
51
+ # :domain_name=>"dpzl38cuix402.cloudfront.net",
52
+ # :caller_reference=>"201005181943052207677116",
53
+ # :e_tag=>"EJSXFGM5JL8ER",
54
+ # :s3_origin=>
55
+ # {:dns_name=>"bucket-for-konstantin-eu.s3.amazonaws.com",
56
+ # :origin_access_identity=>
57
+ # "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"},
58
+ # :aws_id=>"E5P8HQ3ZAZIXD",
59
+ # :enabled=>false}
59
60
  #
60
61
  # config = acf.get_distribution_config(distibution[:aws_id]) #=>
61
62
  # {:enabled => true,
@@ -63,7 +64,7 @@ module RightAws
63
64
  # :e_tag => "E39OHHU1ON65SI",
64
65
  # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
65
66
  # :comment => "Woo-Hoo!",
66
- # :origin => "my-bucket.s3.amazonaws.com"}
67
+ # :s3_origin => {:dns_name => "my-bucket.s3.amazonaws.com"}}
67
68
  #
68
69
  # config[:comment] = 'Olah-lah!'
69
70
  # config[:enabled] = false
@@ -75,7 +76,7 @@ module RightAws
75
76
 
76
77
  include RightAwsBaseInterface
77
78
 
78
- API_VERSION = "2010-03-01"
79
+ API_VERSION = "2010-11-01"
79
80
  DEFAULT_HOST = 'cloudfront.amazonaws.com'
80
81
  DEFAULT_PORT = 443
81
82
  DEFAULT_PROTOCOL = 'https'
@@ -96,7 +97,6 @@ module RightAws
96
97
  # * <tt>:server</tt>: CloudFront service host, default: DEFAULT_HOST
97
98
  # * <tt>:port</tt>: CloudFront service port, default: DEFAULT_PORT
98
99
  # * <tt>:protocol</tt>: 'http' or 'https', default: DEFAULT_PROTOCOL
99
- # * <tt>:multi_thread</tt>: true=HTTP connection per thread, false=per process
100
100
  # * <tt>:logger</tt>: for log messages, default: RAILS_DEFAULT_LOGGER else STDOUT
101
101
  #
102
102
  # acf = RightAws::AcfInterface.new('1E3GDYEOGFJPIT7XXXXXX','hgTHt68JY07JKUY08ftHYtERkjgtfERn57XXXXXX',
@@ -121,8 +121,8 @@ module RightAws
121
121
  # Generates request hash for REST API.
122
122
  def generate_request(method, path, params={}, body=nil, headers={}) # :nodoc:
123
123
  # Params
124
- params.delete_if{ |key, val| val.blank? }
125
- unless params.blank?
124
+ params.delete_if{ |key, val| val.right_blank? }
125
+ unless params.right_blank?
126
126
  path += "?" + params.to_a.collect{ |key,val| "#{AwsUtils::amz_escape(key)}=#{AwsUtils::amz_escape(val.to_s)}" }.join("&")
127
127
  end
128
128
  # Headers
@@ -133,7 +133,7 @@ module RightAws
133
133
  headers['Authorization'] = "AWS #{@aws_access_key_id}:#{signature}"
134
134
  # Request
135
135
  path = "#{@params[:service]}#{@params[:api_version]}/#{path}"
136
- request = "Net::HTTP::#{method.capitalize}".constantize.new(path)
136
+ request = "Net::HTTP::#{method.capitalize}".right_constantize.new(path)
137
137
  request.body = body if body
138
138
  # Set request headers
139
139
  headers.each { |key, value| request[key.to_s] = value }
@@ -154,14 +154,6 @@ module RightAws
154
154
  # Helpers:
155
155
  #-----------------------------------------------------------------
156
156
 
157
- def self.escape(text) # :nodoc:
158
- REXML::Text::normalize(text)
159
- end
160
-
161
- def self.unescape(text) # :nodoc:
162
- REXML::Text::unnormalize(text)
163
- end
164
-
165
157
  def generate_call_reference # :nodoc:
166
158
  result = Time.now.strftime('%Y%m%d%H%M%S')
167
159
  10.times{ result << rand(10).to_s }
@@ -175,31 +167,30 @@ module RightAws
175
167
  end
176
168
 
177
169
  def distribution_config_to_xml(config, xml_wrapper='DistributionConfig') # :nodoc:
178
- cnames = ''
179
- logging = ''
180
- origin_access_identity = ''
181
- trusted_signers = ''
170
+ cnames = logging = trusted_signers = s3_origin = custom_origin = default_root_object = ''
182
171
  # CNAMES
183
- unless config[:cnames].blank?
172
+ unless config[:cnames].right_blank?
184
173
  Array(config[:cnames]).each { |cname| cnames += " <CNAME>#{cname}</CNAME>\n" }
185
174
  end
186
175
  # Logging
187
- unless config[:logging].blank?
176
+ unless config[:logging].right_blank?
188
177
  logging = " <Logging>\n" +
189
178
  " <Bucket>#{config[:logging][:bucket]}</Bucket>\n" +
190
179
  " <Prefix>#{config[:logging][:prefix]}</Prefix>\n" +
191
180
  " </Logging>\n"
192
181
  end
193
- # Origin Access Identity
194
- unless config[:origin_access_identity].blank?
195
- origin_access_identity = config[:origin_access_identity]
196
- unless origin_access_identity[%r{^origin-access-identity}]
197
- origin_access_identity = "origin-access-identity/cloudfront/#{origin_access_identity}"
198
- end
199
- origin_access_identity = " <OriginAccessIdentity>#{origin_access_identity}</OriginAccessIdentity>\n"
182
+ unless config[:required_protocols].right_blank?
183
+ required_protocols = " <RequiredProtocols>\n" +
184
+ " <Protocol>#{config[:required_protocols]}</Protocol>\n" +
185
+ " </RequiredProtocols>\n"
186
+ else required_protocols = ""
187
+ end
188
+ # Default Root Object
189
+ unless config[:default_root_object].right_blank?
190
+ default_root_object = " <DefaultRootObject>#{config[:default_root_object]}</DefaultRootObject>\n" unless config[:default_root_object].right_blank?
200
191
  end
201
192
  # Trusted Signers
202
- unless config[:trusted_signers].blank?
193
+ unless config[:trusted_signers].right_blank?
203
194
  trusted_signers = " <TrustedSigners>\n"
204
195
  Array(config[:trusted_signers]).each do |trusted_signer|
205
196
  trusted_signers += if trusted_signer.to_s[/self/i]
@@ -210,18 +201,48 @@ module RightAws
210
201
  end
211
202
  trusted_signers += " </TrustedSigners>\n"
212
203
  end
213
-
204
+ # S3Origin
205
+ unless config[:s3_origin].right_blank?
206
+ origin_access_identity = ''
207
+ # Origin Access Identity
208
+ unless config[:s3_origin][:origin_access_identity].right_blank?
209
+ origin_access_identity = config[:s3_origin][:origin_access_identity]
210
+ unless origin_access_identity[%r{^origin-access-identity}]
211
+ origin_access_identity = "origin-access-identity/cloudfront/#{origin_access_identity}"
212
+ end
213
+ origin_access_identity = " <OriginAccessIdentity>#{origin_access_identity}</OriginAccessIdentity>\n"
214
+ end
215
+ s3_origin = " <S3Origin>\n" +
216
+ " <DNSName>#{config[:s3_origin][:dns_name]}</DNSName>\n" +
217
+ "#{origin_access_identity}" +
218
+ " </S3Origin>\n"
219
+ end
220
+ # Custom Origin
221
+ unless config[:custom_origin].right_blank?
222
+ http_port = https_port = origin_protocol_policy = ''
223
+ http_port = " <HTTPPort>#{config[:custom_origin][:http_port]}</HTTPPort>\n" unless config[:custom_origin][:http_port].right_blank?
224
+ https_port = " <HTTPSPort>#{config[:custom_origin][:https_port]}</HTTPSPort>" unless config[:custom_origin][:https_port].right_blank?
225
+ origin_protocol_policy = " <OriginProtocolPolicy>#{config[:custom_origin][:origin_protocol_policy]}</OriginProtocolPolicy>\n" unless config[:custom_origin][:origin_protocol_policy].right_blank?
226
+ custom_origin = " <CustomOrigin>\n" +
227
+ " <DNSName>#{config[:custom_origin][:dns_name]}</DNSName>\n" +
228
+ "#{http_port}" +
229
+ "#{https_port}" +
230
+ "#{origin_protocol_policy}" +
231
+ " </CustomOrigin>\n"
232
+ end
214
233
  # XML
215
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
234
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
216
235
  "<#{xml_wrapper} xmlns=\"http://#{@params[:server]}/doc/#{API_VERSION}/\">\n" +
217
- " <Origin>#{config[:origin]}</Origin>\n" +
218
- " <CallerReference>#{config[:caller_reference]}</CallerReference>\n" +
219
- " <Comment>#{AcfInterface::escape(config[:comment].to_s)}</Comment>\n" +
236
+ " <CallerReference>#{config[:caller_reference]}</CallerReference>\n" +
237
+ " <Comment>#{AwsUtils::xml_escape(config[:comment].to_s)}</Comment>\n" +
220
238
  " <Enabled>#{config[:enabled]}</Enabled>\n" +
221
- cnames +
222
- logging +
223
- origin_access_identity +
224
- trusted_signers +
239
+ s3_origin +
240
+ custom_origin +
241
+ default_root_object +
242
+ cnames +
243
+ logging +
244
+ required_protocols +
245
+ trusted_signers +
225
246
  "</#{xml_wrapper}>"
226
247
  end
227
248
 
@@ -233,13 +254,13 @@ module RightAws
233
254
  # Returns an array of distributions or RightAws::AwsError exception.
234
255
  #
235
256
  # acf.list_distributions #=>
236
- # [{:status => "Deployed",
237
- # :domain_name => "d74zzrxmpmygb.6hops.net",
238
- # :aws_id => "E4U91HCJHGXVC",
239
- # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
240
- # :origin => "my-bucket.s3.amazonaws.com",
241
- # :comment => "My comments",
242
- # :last_modified_time => Wed Sep 10 17:00:04 UTC 2008 }, ..., {...} ]
257
+ # [{:status=>"Deployed",
258
+ # :domain_name=>"dgmde.6os.net",
259
+ # :comment=>"ONE LINE OF COMMENT",
260
+ # :last_modified_time=>"2009-06-16T16:10:02.210Z",
261
+ # :s3_origin=>{:dns_name=>"example.s3.amazonaws.com"},
262
+ # :aws_id=>"12Q05OOMFN7SYL",
263
+ # :enabled=>true}, ... ]
243
264
  #
244
265
  def list_distributions
245
266
  result = []
@@ -259,7 +280,7 @@ module RightAws
259
280
  # {:distributions=>
260
281
  # [{:status=>"Deployed",
261
282
  # :aws_id=>"E2Q0AOOMFNPSYL",
262
- # :origin=>"my-bucket.s3.amazonaws.com",
283
+ # :s3_origin=>{:dns_name=>"example.s3.amazonaws.com"},
263
284
  # :domain_name=>"d1s5gmdtmafnre.6hops.net",
264
285
  # :comment=>"ONE LINE OF COMMENT",
265
286
  # :last_modified_time=>"2008-10-22T19:31:23.000Z",
@@ -288,7 +309,7 @@ module RightAws
288
309
  link = generate_request('GET', 'distribution', opts)
289
310
  last_response = request_info(link, AcfDistributionListParser.new(:logger => @logger))
290
311
  opts['Marker'] = last_response[:next_marker]
291
- break unless block && block.call(last_response) && !last_response[:next_marker].blank?
312
+ break unless block && block.call(last_response) && !last_response[:next_marker].right_blank?
292
313
  end
293
314
  last_response
294
315
  end
@@ -296,51 +317,80 @@ module RightAws
296
317
  # Create a new distribution.
297
318
  # Returns the just created distribution or RightAws::AwsError exception.
298
319
  #
299
- # acf.create_distribution('my-bucket.s3.amazonaws.com', 'Woo-Hoo!', true, ['web1.my-awesome-site.net'], nil,
300
- # { :prefix=>"log/", :bucket=>"my-logs.s3.amazonaws.com" } ) #=>
301
- # {:comment => "Woo-Hoo!",
302
- # :enabled => true,
303
- # :location => "https://cloudfront.amazonaws.com/2008-06-30/distribution/E2REJM3VUN5RSI",
304
- # :status => "InProgress",
305
- # :aws_id => "E2REJM3VUN5RSI",
306
- # :domain_name => "d3dxv71tbbt6cd.6hops.net",
307
- # :origin => "my-bucket.s3.amazonaws.com",
308
- # :cnames => ["web1.my-awesome-site.net"],
309
- # :logging => { :prefix => "log/",
310
- # :bucket => "my-logs.s3.amazonaws.com"},
311
- # :last_modified_time => "2008-10-22T19:31:23.000Z",
312
- # :caller_reference => "200809102100536497863003"}
320
+ # # S3 Origin
313
321
  #
314
- def create_distribution(origin, comment='', enabled=true, cnames=[], caller_reference=nil, logging={})
315
- config = { :origin => origin,
316
- :comment => comment,
317
- :enabled => enabled,
318
- :cnames => Array(cnames),
319
- :caller_reference => caller_reference }
320
- config[:logging] = logging unless logging.blank?
321
- create_distribution_by_config(config)
322
- end
323
-
324
- def create_distribution_by_config(config)
322
+ # config = { :comment => "kd: delete me please",
323
+ # :s3_origin => { :dns_name => "devs-us-east.s3.amazonaws.com",
324
+ # :origin_access_identity => "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"},
325
+ # :enabled => true,
326
+ # :logging => { :prefix => "kd/log/",
327
+ # :bucket => "devs-us-west.s3.amazonaws.com"}}
328
+ # acf.create_distribution(config) #=>
329
+ # { :status=>"InProgress",
330
+ # :enabled=>true,
331
+ # :caller_reference=>"201012071910051044304704",
332
+ # :logging=>{:prefix=>"kd/log/", :bucket=>"devs-us-west.s3.amazonaws.com"},
333
+ # :e_tag=>"ESCTG5WJCFWJK",
334
+ # :location=> "https://cloudfront.amazonaws.com/2010-11-01/distribution/E3KUBANZ7N1B2",
335
+ # :comment=>"kd: delete me please",
336
+ # :domain_name=>"d3stykk6upgs20.cloudfront.net",
337
+ # :aws_id=>"E3KUBANZ7N1B2",
338
+ # :s3_origin=>
339
+ # {:origin_access_identity=>"origin-access-identity/cloudfront/E3JPJZ80ZBX24G",
340
+ # :dns_name=>"devs-us-east.s3.amazonaws.com"},
341
+ # :last_modified_time=>"2010-12-07T16:10:07.087Z",
342
+ # :in_progress_invalidation_batches=>0}
343
+ #
344
+ # # Custom Origin
345
+ #
346
+ # custom_config = { :comment => "kd: delete me please",
347
+ # :custom_origin => { :dns_name => "custom_origin.my-site.com",
348
+ # :http_port => 80,
349
+ # :https_port => 443,
350
+ # :origin_protocol_policy => 'match-viewer' },
351
+ # :enabled => true,
352
+ # :logging => { :prefix => "kd/log/",
353
+ # :bucket => "my-bucket.s3.amazonaws.com"}} #=>
354
+ # { :last_modified_time=>"2010-12-08T14:23:43.522Z",
355
+ # :status=>"InProgress",
356
+ # :custom_origin=>
357
+ # {:http_port=>"80",
358
+ # :https_port=>"443",
359
+ # :origin_protocol_policy=>"match-viewer",
360
+ # :dns_name=>"custom_origin.my-site.com"},
361
+ # :enabled=>true,
362
+ # :caller_reference=>"201012081723428499167245",
363
+ # :in_progress_invalidation_batches=>0,
364
+ # :e_tag=>"E1ZCJ8N5E52KO6",
365
+ # :location=>
366
+ # "https://cloudfront.amazonaws.com/2010-11-01/distribution/EK0AJ4RMNIF2P",
367
+ # :logging=>{:prefix=>"kd/log/", :bucket=>"my-bucket.s3.amazonaws.com"},
368
+ # :domain_name=>"do36k7s2wxklg.cloudfront.net",
369
+ # :comment=>"kd: delete me please",
370
+ # :aws_id=>"EK0AJ4RMNIF2P"}
371
+ #
372
+ def create_distribution(config)
325
373
  config[:caller_reference] ||= generate_call_reference
326
374
  link = generate_request('POST', 'distribution', {}, distribution_config_to_xml(config))
327
375
  merge_headers(request_info(link, AcfDistributionListParser.new(:logger => @logger))[:distributions].first)
328
376
  end
377
+ alias_method :create_distribution_by_config, :create_distribution
329
378
 
330
379
  # Get a distribution's information.
331
380
  # Returns a distribution's information or RightAws::AwsError exception.
332
381
  #
333
382
  # acf.get_distribution('E2REJM3VUN5RSI') #=>
334
- # {:enabled => true,
335
- # :caller_reference => "200809102100536497863003",
336
- # :e_tag => "E39OHHU1ON65SI",
337
- # :status => "Deployed",
338
- # :domain_name => "d3dxv71tbbt6cd.6hops.net",
339
- # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
340
- # :aws_id => "E2REJM3VUN5RSI",
341
- # :comment => "Woo-Hoo!",
342
- # :origin => "my-bucket.s3.amazonaws.com",
343
- # :last_modified_time => "2008-09-10T17:00:54.000Z" }
383
+ # {:last_modified_time=>"2010-05-19T18:54:38.242Z",
384
+ # :status=>"Deployed",
385
+ # :domain_name=>"dpzl38cuix402.cloudfront.net",
386
+ # :caller_reference=>"201005181943052207677116",
387
+ # :e_tag=>"EJSXFGM5JL8ER",
388
+ # :s3_origin=>
389
+ # {:dns_name=>"bucket-for-konstantin-eu.s3.amazonaws.com",
390
+ # :origin_access_identity=>
391
+ # "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"},
392
+ # :aws_id=>"E5P8HQ3ZAZIXD",
393
+ # :enabled=>false}
344
394
  #
345
395
  # acf.get_distribution('E2FNSBHNVVF11E') #=>
346
396
  # {:e_tag=>"E1Q2DJEPTQOLJD",
@@ -357,9 +407,11 @@ module RightAws
357
407
  # {:aws_account_number=>"648772220000"}],
358
408
  # :caller_reference=>"201004171154450740700072",
359
409
  # :domain_name=>"d1f6lpevremt5m.cloudfront.net",
360
- # :origin_access_identity=>"origin-access-identity/cloudfront/E3JPJZ80ZBX24G",
361
- # :trusted_signers=>["self", "648772220000", "120288270000"],
362
- # :origin=>"my-bucket.s3.amazonaws.com"}
410
+ # :s3_origin=>
411
+ # {:dns_name=>"bucket-for-konstantin-eu.s3.amazonaws.com",
412
+ # :origin_access_identity=>
413
+ # "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"},
414
+ # :trusted_signers=>["self", "648772220000", "120288270000"]}
363
415
  #
364
416
  def get_distribution(aws_id)
365
417
  link = generate_request('GET', "distribution/#{aws_id}")
@@ -370,21 +422,24 @@ module RightAws
370
422
  # Returns a distribution's configuration or RightAws::AwsError exception.
371
423
  #
372
424
  # acf.get_distribution_config('E2REJM3VUN5RSI') #=>
373
- # {:enabled => true,
374
- # :caller_reference => "200809102100536497863003",
375
- # :e_tag => "E39OHHU1ON65SI",
376
- # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
377
- # :comment => "Woo-Hoo!",
378
- # :origin => "my-bucket.s3.amazonaws.com"}
425
+ # {:caller_reference=>"201005181943052207677116",
426
+ # :e_tag=>"EJSXFGM5JL8ER",
427
+ # :s3_origin=>
428
+ # {:dns_name=>"bucket-for-konstantin-eu.s3.amazonaws.com",
429
+ # :origin_access_identity=>
430
+ # "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"},
431
+ # :enabled=>false}
379
432
  #
380
433
  # acf.get_distribution_config('E2FNSBHNVVF11E') #=>
381
434
  # {:e_tag=>"E1Q2DJEPTQOLJD",
382
435
  # :logging=>{:prefix=>"xlog/", :bucket=>"my-bucket.s3.amazonaws.com"},
383
436
  # :enabled=>true,
384
437
  # :caller_reference=>"201004171154450740700072",
385
- # :origin_access_identity=>"origin-access-identity/cloudfront/E3JPJZ80ZBX24G",
386
438
  # :trusted_signers=>["self", "648772220000", "120288270000"],
387
- # :origin=>"my-bucket.s3.amazonaws.com"}
439
+ # :s3_origin=>
440
+ # {:dns_name=>"bucket-for-konstantin-eu.s3.amazonaws.com",
441
+ # :origin_access_identity=>
442
+ # "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"}}
388
443
  #
389
444
  def get_distribution_config(aws_id)
390
445
  link = generate_request('GET', "distribution/#{aws_id}/config")
@@ -392,7 +447,6 @@ module RightAws
392
447
  end
393
448
 
394
449
  # Set a distribution's configuration
395
- # (the :origin and the :caller_reference cannot be changed).
396
450
  # Returns +true+ on success or RightAws::AwsError exception.
397
451
  #
398
452
  # config = acf.get_distribution_config('E2REJM3VUN5RSI') #=>
@@ -401,13 +455,13 @@ module RightAws
401
455
  # :e_tag => "E39OHHU1ON65SI",
402
456
  # :cnames => ["web1.my-awesome-site.net", "web2.my-awesome-site.net"]
403
457
  # :comment => "Woo-Hoo!",
404
- # :origin => "my-bucket.s3.amazonaws.com"}
458
+ # :s3_origin => { :dns_name => "my-bucket.s3.amazonaws.com"}}
405
459
  #
406
460
  # config[:comment] = 'Olah-lah!'
407
461
  # config[:enabled] = false
408
- # config[:origin_access_identity] = "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"
462
+ # config[:s3_origin][:origin_access_identity] = "origin-access-identity/cloudfront/E3JPJZ80ZBX24G"
409
463
  # # or just
410
- # # config[:origin_access_identity] = "E3JPJZ80ZBX24G"
464
+ # # config[:s3_origin][:origin_access_identity] = "E3JPJZ80ZBX24G"
411
465
  # config[:trusted_signers] = ['self', '648772220000', '120288270000']
412
466
  # config[:logging] = { :bucket => 'my-bucket.s3.amazonaws.com', :prefix => 'xlog/' }
413
467
  #
@@ -446,38 +500,48 @@ module RightAws
446
500
  %r{^(Streaming)?Distribution$},
447
501
  %r{^(Streaming)?DistributionConfig$}
448
502
  @distribution = { }
503
+ when %r{/S3Origin$} then @distribution[:s3_origin] = {}
504
+ when %r{/CustomOrigin$} then @distribution[:custom_origin] = {}
449
505
  end
450
506
  end
451
507
  def tagend(name)
452
508
  case name
453
- when 'Marker' then @result[:marker] = @text
454
- when 'NextMarker' then @result[:next_marker] = @text
455
- when 'MaxItems' then @result[:max_items] = @text.to_i
456
- when 'IsTruncated' then @result[:is_truncated] = (@text == 'true')
457
- when 'Id' then @distribution[:aws_id] = @text
458
- when 'Status' then @distribution[:status] = @text
459
- when 'LastModifiedTime' then @distribution[:last_modified_time] = @text
460
- when 'DomainName' then @distribution[:domain_name] = @text
461
- when 'Origin' then @distribution[:origin] = @text
462
- when 'Comment' then @distribution[:comment] = AcfInterface::unescape(@text)
463
- when 'CallerReference' then @distribution[:caller_reference] = @text
464
- when 'CNAME' then (@distribution[:cnames] ||= []) << @text
465
- when 'Enabled' then @distribution[:enabled] = (@text == 'true')
466
- when 'Bucket' then (@distribution[:logging] ||= {})[:bucket] = @text
467
- when 'Prefix' then (@distribution[:logging] ||= {})[:prefix] = @text
468
- when 'OriginAccessIdentity' then @distribution[:origin_access_identity] = @text
469
- end
470
- case full_tag_name
471
- when %r{/TrustedSigners/Self$} then (@distribution[:trusted_signers] ||= []) << 'self'
472
- when %r{/TrustedSigners/AwsAccountNumber$} then (@distribution[:trusted_signers] ||= []) << @text
473
- when %r{/Signer/Self$} then @active_signer[:aws_account_number] = 'self'
474
- when %r{/Signer/AwsAccountNumber$} then @active_signer[:aws_account_number] = @text
475
- when %r{/Signer/KeyPairId$} then (@active_signer[:key_pair_ids] ||= []) << @text
476
- when %r{/Signer$} then (@distribution[:active_trusted_signers] ||= []) << @active_signer
477
- when %r{(Streaming)?DistributionSummary$},
478
- %r{^(Streaming)?Distribution$},
479
- %r{^(Streaming)?DistributionConfig$}
480
- @result[:distributions] << @distribution
509
+ when 'Marker' then @result[:marker] = @text
510
+ when 'NextMarker' then @result[:next_marker] = @text
511
+ when 'MaxItems' then @result[:max_items] = @text.to_i
512
+ when 'IsTruncated' then @result[:is_truncated] = (@text == 'true')
513
+ when 'Id' then @distribution[:aws_id] = @text
514
+ when 'Status' then @distribution[:status] = @text
515
+ when 'LastModifiedTime' then @distribution[:last_modified_time] = @text
516
+ when 'DomainName' then @distribution[:domain_name] = @text
517
+ when 'Comment' then @distribution[:comment] = AwsUtils::xml_unescape(@text)
518
+ when 'CallerReference' then @distribution[:caller_reference] = @text
519
+ when 'CNAME' then (@distribution[:cnames] ||= []) << @text
520
+ when 'Enabled' then @distribution[:enabled] = (@text == 'true')
521
+ when 'Bucket' then (@distribution[:logging] ||= {})[:bucket] = @text
522
+ when 'Prefix' then (@distribution[:logging] ||= {})[:prefix] = @text
523
+ when 'Protocol' then (@distribution[:required_protocols] ||= {})[:protocol] = @text
524
+ when 'InProgressInvalidationBatches' then @distribution[:in_progress_invalidation_batches] = @text.to_i
525
+ when 'DefaultRootObject' then @distribution[:default_root_object] = @text
526
+ else
527
+ case full_tag_name
528
+ when %r{/S3Origin/DNSName$} then @distribution[:s3_origin][:dns_name] = @text
529
+ when %r{/S3Origin/OriginAccessIdentity$} then @distribution[:s3_origin][:origin_access_identity] = @text
530
+ when %r{/CustomOrigin/DNSName$} then @distribution[:custom_origin][:dns_name] = @text
531
+ when %r{/CustomOrigin/HTTPPort} then @distribution[:custom_origin][:http_port] = @text
532
+ when %r{/CustomOrigin/HTTPSPort$} then @distribution[:custom_origin][:https_port] = @text
533
+ when %r{/CustomOrigin/OriginProtocolPolicy$} then @distribution[:custom_origin][:origin_protocol_policy] = @text
534
+ when %r{/TrustedSigners/Self$} then (@distribution[:trusted_signers] ||= []) << 'self'
535
+ when %r{/TrustedSigners/AwsAccountNumber$} then (@distribution[:trusted_signers] ||= []) << @text
536
+ when %r{/Signer/Self$} then @active_signer[:aws_account_number] = 'self'
537
+ when %r{/Signer/AwsAccountNumber$} then @active_signer[:aws_account_number] = @text
538
+ when %r{/Signer/KeyPairId$} then (@active_signer[:key_pair_ids] ||= []) << @text
539
+ when %r{/Signer$} then (@distribution[:active_trusted_signers] ||= []) << @active_signer
540
+ when %r{(Streaming)?DistributionSummary$},
541
+ %r{^(Streaming)?Distribution$},
542
+ %r{^(Streaming)?DistributionConfig$}
543
+ @result[:distributions] << @distribution
544
+ end
481
545
  end
482
546
  end
483
547
  end