right_aws 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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