right_aws 1.7.1 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -89,104 +89,84 @@ Initial release.
89
89
  (The Ec2 functions are being cached: describe_images, describe_instances,
90
90
  describe_security_groups and describe_key_pairs)
91
91
 
92
- == 1.4.5
93
- == 1.4.6
94
- *r 2619, konstantin, 01-17-08 16:18:36 +0300
92
+ == 1.4.5 - 1.4.6
93
+ * r 2619, konstantin, 01-17-08 16:18:36 +0300
95
94
  * S3 Location constraints support added.
96
95
  * Fixed bug with trailing '/' in the bucket name for 'EU' located buckets
97
96
  * Added: S3Interface#bucket_location, S3::Bucket#location
98
97
 
99
98
  == 1.4.7
100
- *r 2622, konstantin, 01-18-08 13:52:20 +0300
99
+ * r 2622, konstantin, 01-18-08 13:52:20 +0300
101
100
  * Virtual domains doc added
102
101
  * S3 Query API fixed to support virtual domains.
103
102
 
104
103
  == 1.4.8
105
- *r 2650, konstantin, 01-24-08 11:12:00 +0300
104
+ * r 2650, konstantin, 01-24-08 11:12:00 +0300
106
105
  * net_fix.rb moved to right_http_connection
107
106
 
108
107
  == 1.5.0
109
- *r 2688, konstantin, 02-30-08 15:42:00 +0300
108
+ * r 2688, konstantin, 02-30-08 15:42:00 +0300
110
109
  * SDB support added.
111
110
  * RightAws::S3::bucket and RightAws::S3::Bucket.create methods behaviour
112
111
  changed: param +create+ is set to +false+ by default.
113
112
 
114
113
  == 1.6.0
115
114
 
116
- r2780 | todd | 2008-02-11 11:41:07 -0800 (Mon, 11 Feb 2008) | 4 lines
117
- Some doc updates & tweaks: we now support ultra-large PUTs to S3, small SDB
118
- cleanups, add SDB to the list of interfaces in RightAws, update some copyrights,
119
- warn about loading attachment_fu AFTER right_aws (big no-no).
115
+ * r2780, todd, 2008-02-11 11:41:07 -0800 (Mon, 11 Feb 2008), 4 lines
116
+ * Some doc updates & tweaks: we now support ultra-large PUTs to S3, small SDB
117
+ cleanups, add SDB to the list of interfaces in RightAws, update some copyrights,
118
+ warn about loading attachment_fu AFTER right_aws (big no-no).
120
119
 
121
- r2784 | todd | 2008-02-11 13:46:47 -0800 (Mon, 11 Feb 2008) | 2 lines
122
- One final clarification: you may get a Net::HTTP bad monkey patch exception
120
+ * r2784, todd, 2008-02-11 13:46:47 -0800 (Mon, 11 Feb 2008), 2 lines
121
+ * One final clarification: you may get a Net::HTTP bad monkey patch exception
123
122
 
124
- r2880 | todd | 2008-02-25 18:06:22 -0800 (Mon, 25 Feb 2008) | 2 lines
125
- Add SQS 'Gen 2' interface implementation
123
+ * r2880, todd, 2008-02-25 18:06:22 -0800 (Mon, 25 Feb 2008), 2 lines
124
+ * Add SQS 'Gen 2' interface implementation
126
125
 
127
- r2913 | todd | 2008-02-29 16:57:07 -0800 (Fri, 29 Feb 2008) | 3 lines
128
- SqsGen2 (object interface), unit tests for both interfaces, documentation
129
- updates.
126
+ * r2913, todd, 2008-02-29 16:57:07 -0800 (Fri, 29 Feb 2008), 3 lines
127
+ * SqsGen2 (object interface), unit tests for both interfaces, documentation updates.
130
128
 
131
- r2922 | todd | 2008-03-03 15:26:42 -0800 (Mon, 03 Mar 2008) | 2 lines
132
- couple of documentation tweaks in prep for 1.6.0
129
+ * r2922, todd, 2008-03-03 15:26:42 -0800 (Mon, 03 Mar 2008), 2 lines
130
+ * couple of documentation tweaks in prep for 1.6.0
133
131
 
134
- == 1.6.1 2008-03-14
132
+ == 1.6.1
135
133
 
136
- ------------------------------------------------------------------------
137
- r2963 | todd | 2008-03-06 19:10:23 -0800 (Thu, 06 Mar 2008) | 3 lines
138
-
139
- (#950) Many minor fixes in incrementally_list_bucket to prevent a death loop
140
- in
141
- certain rare conditions
134
+ * r2963, todd, 2008-03-06 19:10:23 -0800 (Thu, 06 Mar 2008), 3 lines
135
+ * (#950) Many minor fixes in incrementally_list_bucket to prevent a death loop
136
+ in certain rare conditions
142
137
 
143
138
  == 1.7.0
144
139
 
145
- r3051 | konstantin | 2008-03-14 21:26:12 +0300 (Fri, 14 Mar 2008) | 1 line
146
- #897, ActiveSdb alpha release
147
-
148
- <<<<<<< .mine
149
- #897, ActiveSdb alpha release
150
-
151
- ------------------------------------------------------------------------
152
- r3204 | todd | 2008-03-26 17:50:45 -0700 (Wed, 26 Mar 2008) | 4 lines
153
-
154
- Do not autoload right_sdb with the rest of the modules; it requires uuidtools.
155
- We want the user to explicly request ActiveSdb, at least as long as it is
156
- alpha/beta.
157
-
158
- ------------------------------------------------------------------------
159
- r3220 | konstantin | 2008-03-26 23:03:51 -0700 (Wed, 26 Mar 2008) | 1 line
160
-
161
- mark ActiveSdb release as alpha,(port to 1.7.0)
162
- ------------------------------------------------------------------------
163
- r3229 | konstantin | 2008-03-27 03:43:17 -0700 (Thu, 27 Mar 2008) | 1 line
140
+ * r3051, konstantin, 2008-03-14 21:26:12 +0300 (Fri, 14 Mar 2008), 1 line
141
+ * #897, ActiveSdb alpha release
164
142
 
165
- aws pcode fix (release 2.5)
166
- ------------------------------------------------------------------------
167
- r3243 | todd | 2008-03-27 12:10:49 -0700 (Thu, 27 Mar 2008) | 1 line
143
+ == 1.7.1
168
144
 
169
- (#991) Bring SqsGen2::Queue.pop fix into 1.7.0. Also bring removal of
170
- uuidtools dependency.
171
- ------------------------------------------------------------------------
172
- r3249 | todd | 2008-03-27 17:59:14 -0700 (Thu, 27 Mar 2008) | 1 line
145
+ Do not autoload right_sdb with the rest of the modules; it requires uuidtools.
146
+ We want the user to explicly request ActiveSdb, at least as long as it is
147
+ alpha/beta.
173
148
 
174
- (#991) Print an informational message if the require of uuidtools fails for
175
- ActiveSdb. Update RDoc to show how to include ActiveSdb class. Update README
176
- to point to ActiveSdb RDoc.
177
- ------------------------------------------------------------------------
178
- r3250 | todd | 2008-03-27 18:03:09 -0700 (Thu, 27 Mar 2008) | 2 lines
149
+ Fix escaping problem in SqsGen2Interface: POST bodies did not properly escape the '&' character
179
150
 
180
- (#991) Change manifest entry from right_sdb to active_sdb
151
+ == 1.7.2
181
152
 
182
- ------------------------------------------------------------------------
183
- r3251 | todd | 2008-03-27 18:03:33 -0700 (Thu, 27 Mar 2008) | 1 line
153
+ Release Notes:
154
+
155
+ RightAws includes some new features, including:
156
+ - Support in RightAws::S3 and RightAws::S3Interface for S3 key copy, move, and rename
157
+ - Support for signature version 0 request authentication to EC2, SQS, and SDB
158
+ - Enhanced S3 object meta-header read and update
159
+ - Interoperability with clouds running Eucalyptus (http://eucalyptus.cs.ucsb.edu)
160
+ [ Contributed by the Eucalyptus group ]
161
+ - Support for c1.medium and c1.xlarge instance types
184
162
 
185
- (#991) Rename file from right_sdb to active_sdb.
186
- ------------------------------------------------------------------------
187
- r3286 | konstantin | 2008-03-31 06:45:19 -0700 (Mon, 31 Mar 2008) | 4 lines
163
+ Bug fixes include:
164
+ - Corrected the failure, under certain conditions, of retries of streaming PUTs to S3.
165
+ We now reset the seek pointer of the streaming IO object to its initial position.
166
+ - Removal of an accidental dependency on ActiveSupport in RightAws::S3Interface.get_link().
167
+ - Monkey-patch of the Ruby File class on Windows platforms to correct a problem in lstat.
168
+ The lstat bug was causing failure of very large file uploads on Windows [ Contributed by Benjamin Allfree ]
169
+ - Fixed parsing of the ETag field for S3 objects
170
+
188
171
 
189
- right_aws 1.7.0
190
- 1. remove code duplication on the methods being cached
191
- 2. add describe_availability_zones to cached methods
192
172
 
data/Manifest.txt CHANGED
@@ -3,6 +3,7 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  lib/awsbase/benchmark_fix.rb
6
+ lib/awsbase/file_fix.rb
6
7
  lib/awsbase/right_awsbase.rb
7
8
  lib/awsbase/support.rb
8
9
  lib/ec2/right_ec2.rb
data/README.txt CHANGED
@@ -34,6 +34,8 @@ The RightScale AWS gems have been designed to provide a robust, fast, and secure
34
34
  AWS accounts.
35
35
  - Support for both first- and second-generation SQS (API versions 2007-05-01
36
36
  and 2008-01-01). These versions of SQS are not compatible.
37
+ - Support for signature versions 0 and 1 on SQS, SDB, and EC2.
38
+ - Interoperability with any cloud running Eucalyptus (http://eucalyptus.cs.ucsb.edu)
37
39
  - Test suite (requires AWS account to do "live" testing).
38
40
 
39
41
  == THREADING:
@@ -82,6 +84,11 @@ multithreaded mode.
82
84
 
83
85
  == KNOWN ISSUES:
84
86
 
87
+ - Attempting to use the Gibberish plugin (used by the Beast forum app)
88
+ will break right_aws as well as lots of other code. Gibberish
89
+ changes the semantics of core Ruby (specifically, the String class) and thus presents a reliability
90
+ problem for most Ruby programs.
91
+
85
92
  - 2/11/08: If you use RightAws in conjunction with attachment_fu, the
86
93
  right_aws gem must be included (using the require statement) AFTER
87
94
  attachment_fu. If right_aws is loaded before attachment_fu, you'll
@@ -113,7 +120,7 @@ REXML parsing.
113
120
 
114
121
  == INSTALL:
115
122
 
116
- sudo gem install
123
+ sudo gem install right_aws
117
124
 
118
125
  == LICENSE:
119
126
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2007 RightScale Inc
2
+ # Copyright (c) 2007-2008 RightScale Inc
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -0,0 +1,33 @@
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
+
25
+ # File.lstat.size doesn't report large sizes correctly in Ruby 1.8 (Windows).
26
+ if RUBY_PLATFORM[/mswin|mingw|bccwin|wince/i]
27
+ require 'win32/file'
28
+ class File
29
+ def lstat
30
+ self.stat
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2007 RightScale Inc
2
+ # Copyright (c) 2007-2008 RightScale Inc
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -26,8 +26,9 @@ module RightAws
26
26
  require 'md5'
27
27
 
28
28
  class AwsUtils #:nodoc:
29
+ @@digest = OpenSSL::Digest::Digest.new("sha1")
29
30
  def self.sign(aws_secret_access_key, auth_string)
30
- Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha1"), aws_secret_access_key, auth_string)).strip
31
+ Base64.encode64(OpenSSL::HMAC.digest(@@digest, aws_secret_access_key, auth_string)).strip
31
32
  end
32
33
 
33
34
  # From Amazon's SQS Dev Guide, a brief description of how to escape:
@@ -92,6 +93,8 @@ module RightAws
92
93
  end
93
94
 
94
95
  module RightAwsBaseInterface
96
+ DEFAULT_SIGNATURE_VERSION = '1'
97
+
95
98
  @@caching = false
96
99
  def self.caching
97
100
  @@caching
@@ -118,6 +121,8 @@ module RightAws
118
121
  attr_reader :connection
119
122
  # Cache
120
123
  attr_reader :cache
124
+ # Signature version (all services except s3)
125
+ attr_reader :signature_version
121
126
 
122
127
  def init(service_info, aws_access_key_id, aws_secret_access_key, params={}) #:nodoc:
123
128
  @params = params
@@ -127,6 +132,7 @@ module RightAws
127
132
  @aws_secret_access_key = aws_secret_access_key
128
133
  @params[:server] ||= service_info[:default_host]
129
134
  @params[:port] ||= service_info[:default_port]
135
+ @params[:service] ||= service_info[:default_service]
130
136
  @params[:protocol] ||= service_info[:default_protocol]
131
137
  @params[:multi_thread] ||= defined?(AWS_DAEMON)
132
138
  @logger = @params[:logger]
@@ -135,6 +141,7 @@ module RightAws
135
141
  @logger.info "New #{self.class.name} using #{@params[:multi_thread] ? 'multi' : 'single'}-threaded mode"
136
142
  @error_handler = nil
137
143
  @cache = {}
144
+ @signature_version = (params[:signature_version] || DEFAULT_SIGNATURE_VERSION).to_s
138
145
  end
139
146
 
140
147
  # Returns +true+ if the describe_xxx responses are being cached
@@ -451,6 +458,17 @@ module RightAws
451
458
  @aws.logger.warn("##### Retry ##{@retries} is being performed. Sleeping for #{@reiteration_delay} sec. Whole time: #{Time.now-@started_at} sec ####")
452
459
  sleep @reiteration_delay
453
460
  @reiteration_delay *= 2
461
+
462
+ # Always make sure that the fp is set to point to the beginning(?)
463
+ # of the File/IO. TODO: it assumes that offset is 0, which is bad.
464
+ if(request[:request].body_stream && request[:request].body_stream.respond_to?(:pos))
465
+ begin
466
+ request[:request].body_stream.pos = 0
467
+ rescue Exception => e
468
+ @logger.warn("Retry may fail due to unable to reset the file pointer" +
469
+ " -- #{self.class.name} : #{e.inspect}")
470
+ end
471
+ end
454
472
  else
455
473
  @aws.logger.info("##### Retry ##{@retries} is being performed due to a redirect. ####")
456
474
  end
@@ -463,7 +481,7 @@ module RightAws
463
481
  # Is this a 5xx error ?
464
482
  if @aws.last_response.code.to_s[/^5\d\d$/]
465
483
  @aws.connection.finish "#{self.class.name}: code: #{@aws.last_response.code}: '#{@aws.last_response.message}'"
466
- # Is this a 4xxx error ?
484
+ # Is this a 4xx error ?
467
485
  elsif @aws.last_response.code.to_s[/^4\d\d$/] && @close_on_4xx_probability > rand(100)
468
486
  @aws.connection.finish "#{self.class.name}: code: #{@aws.last_response.code}: '#{@aws.last_response.message}', " +
469
487
  "probability: #{@close_on_4xx_probability}%"
@@ -537,7 +555,7 @@ module RightAws
537
555
  tagend(name)
538
556
  end
539
557
  def text(text)
540
- @text = text
558
+ @text += text
541
559
  tagtext(text)
542
560
  end
543
561
  # Parser method.
@@ -639,3 +657,4 @@ module RightAws
639
657
  end
640
658
 
641
659
  end
660
+
data/lib/ec2/right_ec2.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2007 RightScale Inc
2
+ # Copyright (c) 2007-2008 RightScale Inc
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -66,10 +66,10 @@ module RightAws
66
66
  class Ec2 < RightAwsBase
67
67
  include RightAwsBaseInterface
68
68
 
69
- SIGNATURE_VERSION = "1"
70
69
  # Amazon EC2 API version being used
71
70
  API_VERSION = "2008-02-01"
72
71
  DEFAULT_HOST = "ec2.amazonaws.com"
72
+ DEFAULT_PATH = '/'
73
73
  DEFAULT_PROTOCOL = 'https'
74
74
  DEFAULT_PORT = 443
75
75
 
@@ -77,9 +77,10 @@ module RightAws
77
77
  DEFAULT_ADDRESSING_TYPE = 'public'
78
78
  DNS_ADDRESSING_SET = ['public','direct']
79
79
 
80
+ # Amazon EC2 Instance Types : http://www.amazon.com/b?ie=UTF8&node=370375011
80
81
  # Default EC2 instance type (platform)
81
82
  DEFAULT_INSTANCE_TYPE = 'm1.small'
82
- INSTANCE_TYPES = ['m1.small','m1.large','m1.xlarge']
83
+ INSTANCE_TYPES = ['m1.small','c1.medium','m1.large','m1.xlarge','c1.xlarge']
83
84
 
84
85
  @@bench = AwsBenchmarkingBlock.new
85
86
  def self.bench_xml
@@ -103,11 +104,13 @@ module RightAws
103
104
  # * <tt>:protocol</tt>: 'http' or 'https', default: DEFAULT_PROTOCOL
104
105
  # * <tt>:multi_thread</tt>: true=HTTP connection per thread, false=per process
105
106
  # * <tt>:logger</tt>: for log messages, default: RAILS_DEFAULT_LOGGER else STDOUT
107
+ # * <tt>:signature_version</tt>: The signature version : '0' or '1'(default)
106
108
  #
107
109
  def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
108
110
  init({ :name => 'EC2',
109
111
  :default_host => ENV['EC2_URL'] ? URI.parse(ENV['EC2_URL']).host : DEFAULT_HOST,
110
- :default_port => ENV['EC2_URL'] ? URI.parse(ENV['EC2_URL']).port : DEFAULT_PORT,
112
+ :default_port => ENV['EC2_URL'] ? URI.parse(ENV['EC2_URL']).port : DEFAULT_PORT,
113
+ :default_service => ENV['EC2_URL'] ? URI.parse(ENV['EC2_URL']).path : DEFAULT_PATH,
111
114
  :default_protocol => ENV['EC2_URL'] ? URI.parse(ENV['EC2_URL']).scheme : DEFAULT_PROTOCOL },
112
115
  aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'] ,
113
116
  aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
@@ -115,18 +118,21 @@ module RightAws
115
118
  end
116
119
 
117
120
 
118
- def generate_request(action, param={}) #:nodoc:
119
- timestamp = ( Time::now ).utc.strftime("%Y-%m-%dT%H:%M:%S.000Z")
120
- request_hash = {"Action" => action,
121
+ def generate_request(action, params={}) #:nodoc:
122
+ service_hash = {"Action" => action,
121
123
  "AWSAccessKeyId" => @aws_access_key_id,
122
124
  "Version" => @@api,
123
- "Timestamp" => timestamp,
124
- "SignatureVersion" => SIGNATURE_VERSION }
125
- request_hash.update(param)
126
- request_data = request_hash.sort{|a,b| (a[0].to_s.downcase)<=>(b[0].to_s.downcase)}.to_s
127
- request_hash.update('Signature' => AwsUtils::sign(@aws_secret_access_key, request_data))
128
- request_params = request_hash.to_a.collect{|key,val| key + "=" + CGI::escape(val) }.join("&")
129
- request = Net::HTTP::Get.new("/?#{request_params}")
125
+ "Timestamp" => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.000Z"),
126
+ "SignatureVersion" => signature_version }
127
+ service_hash.update(params)
128
+ # prepare string to sight
129
+ string_to_sign = case signature_version
130
+ when '0' then service_hash["Action"] + service_hash["Timestamp"]
131
+ when '1' then service_hash.sort{|a,b| (a[0].to_s.downcase)<=>(b[0].to_s.downcase)}.to_s
132
+ end
133
+ service_hash.update('Signature' => AwsUtils::sign(@aws_secret_access_key, string_to_sign))
134
+ request_params = service_hash.to_a.collect{|key,val| key + "=" + CGI::escape(val) }.join("&")
135
+ request = Net::HTTP::Get.new("#{@params[:service]}?#{request_params}")
130
136
  # prepare output hash
131
137
  { :request => request,
132
138
  :server => @params[:server],
@@ -157,7 +163,7 @@ module RightAws
157
163
  update_cache(method.to_sym, :parsed => result) if use_cache
158
164
  result
159
165
  end
160
-
166
+
161
167
  def hash_params(prefix, list) #:nodoc:
162
168
  groups = {}
163
169
  list.each_index{|i| groups.update("#{prefix}.#{i+1}"=>list[i])} if list
@@ -165,7 +171,7 @@ module RightAws
165
171
  end
166
172
 
167
173
  #-----------------------------------------------------------------
168
- #-----------------------------------------------------------------
174
+ # Images
169
175
  #-----------------------------------------------------------------
170
176
 
171
177
  def ec2_describe_images(list, list_by='ImageId', image_type=nil) #:nodoc:
@@ -345,6 +351,10 @@ module RightAws
345
351
  modify_image_attribute(image_id, 'productCodes', nil, :product_code => product_code.to_a)
346
352
  end
347
353
 
354
+ #-----------------------------------------------------------------
355
+ # Instances
356
+ #-----------------------------------------------------------------
357
+
348
358
  def get_desc_instances(instances) # :nodoc:
349
359
  result = []
350
360
  instances.each do |reservation|
@@ -562,6 +572,10 @@ module RightAws
562
572
  rescue Exception
563
573
  on_exception
564
574
  end
575
+
576
+ #-----------------------------------------------------------------
577
+ # Security groups
578
+ #-----------------------------------------------------------------
565
579
 
566
580
  # Retrieve Security Group information. If +list+ is omitted the returns the whole list of groups.
567
581
  #
@@ -706,6 +720,10 @@ module RightAws
706
720
  on_exception
707
721
  end
708
722
 
723
+ #-----------------------------------------------------------------
724
+ # Keys
725
+ #-----------------------------------------------------------------
726
+
709
727
  # Retrieve a list of SSH keys. Returns an array of keys or an exception. Each key is
710
728
  # represented as a two-element hash.
711
729
  #
@@ -840,19 +858,18 @@ module RightAws
840
858
  rescue Exception
841
859
  on_exception
842
860
  end
843
-
844
- #- Internal stuff from here on down...
845
-
846
861
 
862
+
863
+
847
864
  #-----------------------------------------------------------------
848
865
  # PARSERS: Boolean Response Parser
849
866
  #-----------------------------------------------------------------
850
867
 
851
- class RightBoolResponseParser < RightAWSParser #:nodoc:
852
- def tagend(name)
853
- @result = @text=='true' ? true : false if name == 'return'
868
+ class RightBoolResponseParser < RightAWSParser #:nodoc:
869
+ def tagend(name)
870
+ @result = @text=='true' ? true : false if name == 'return'
871
+ end
854
872
  end
855
- end
856
873
 
857
874
  #-----------------------------------------------------------------
858
875
  # PARSERS: Key Pair
@@ -864,9 +881,9 @@ module RightAws
864
881
  end
865
882
  def tagend(name)
866
883
  case name
867
- when 'keyName' : @item[:aws_key_name] = @text
868
- when 'keyFingerprint': @item[:aws_fingerprint] = @text
869
- when 'item' : @result << @item
884
+ when 'keyName' then @item[:aws_key_name] = @text
885
+ when 'keyFingerprint' then @item[:aws_fingerprint] = @text
886
+ when 'item' then @result << @item
870
887
  end
871
888
  end
872
889
  def reset
@@ -880,9 +897,9 @@ module RightAws
880
897
  end
881
898
  def tagend(name)
882
899
  case name
883
- when 'keyName' : @result[:aws_key_name] = @text
884
- when 'keyFingerprint': @result[:aws_fingerprint] = @text
885
- when 'keyMaterial' : @result[:aws_material] = @text
900
+ when 'keyName' then @result[:aws_key_name] = @text
901
+ when 'keyFingerprint' then @result[:aws_fingerprint] = @text
902
+ when 'keyMaterial' then @result[:aws_material] = @text
886
903
  end
887
904
  end
888
905
  end
@@ -930,19 +947,19 @@ module RightAws
930
947
  end
931
948
  def tagend(name)
932
949
  case name
933
- when 'ownerId' ; @group.ownerId = @text
934
- when 'groupDescription' ; @group.groupDescription = @text
950
+ when 'ownerId' then @group.ownerId = @text
951
+ when 'groupDescription' then @group.groupDescription = @text
935
952
  when 'groupName'
936
953
  if @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item'
937
954
  @group.groupName = @text
938
955
  elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions/item/groups/item'
939
956
  @sgroup.groupName = @text
940
957
  end
941
- when 'ipProtocol' ; @perm.ipProtocol = @text
942
- when 'fromPort' ; @perm.fromPort = @text
943
- when 'toPort' ; @perm.toPort = @text
944
- when 'userId' ; @sgroup.userId = @text
945
- when 'cidrIp' ; @perm.ipRanges << @text
958
+ when 'ipProtocol' then @perm.ipProtocol = @text
959
+ when 'fromPort' then @perm.fromPort = @text
960
+ when 'toPort' then @perm.toPort = @text
961
+ when 'userId' then @sgroup.userId = @text
962
+ when 'cidrIp' then @perm.ipRanges << @text
946
963
  when 'item'
947
964
  if @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions/item/groups'
948
965
  @perm.groups << @sgroup
@@ -970,17 +987,17 @@ module RightAws
970
987
  end
971
988
  def tagend(name)
972
989
  case name
973
- when 'imageId' ; @image[:aws_id] = @text
974
- when 'imageLocation' ; @image[:aws_location] = @text
975
- when 'imageState' ; @image[:aws_state] = @text
976
- when 'imageOwnerId' ; @image[:aws_owner] = @text
977
- when 'isPublic' ; @image[:aws_is_public]= @text == 'true' ? true : false
978
- when 'productCode' ;(@image[:aws_product_codes] ||= []) << @text
979
- when 'architecture' ; @image[:aws_architecture] = @text
980
- when 'imageType' ; @image[:aws_image_type] = @text
981
- when 'kernelId' ; @image[:aws_kernel_id] = @text
982
- when 'ramdiskId' ; @image[:aws_ramdisk_id] = @text
983
- when 'item' ; @result << @image if @xmlpath[%r{.*/imagesSet$}]
990
+ when 'imageId' then @image[:aws_id] = @text
991
+ when 'imageLocation' then @image[:aws_location] = @text
992
+ when 'imageState' then @image[:aws_state] = @text
993
+ when 'imageOwnerId' then @image[:aws_owner] = @text
994
+ when 'isPublic' then @image[:aws_is_public]= @text == 'true' ? true : false
995
+ when 'productCode' then (@image[:aws_product_codes] ||= []) << @text
996
+ when 'architecture' then @image[:aws_architecture] = @text
997
+ when 'imageType' then @image[:aws_image_type] = @text
998
+ when 'kernelId' then @image[:aws_kernel_id] = @text
999
+ when 'ramdiskId' then @image[:aws_ramdisk_id] = @text
1000
+ when 'item' then @result << @image if @xmlpath[%r{.*/imagesSet$}]
984
1001
  end
985
1002
  end
986
1003
  def reset
@@ -1013,13 +1030,13 @@ module RightAws
1013
1030
  # But nobody know what will they xml later as attribute. That is why we
1014
1031
  # check for 'group' and 'userId' inside of 'launchPermission/item'
1015
1032
  case name
1016
- when 'imageId' : @result[:aws_id] = @text
1017
- when 'group' : @result[:groups] << @text if @xmlpath == 'DescribeImageAttributeResponse/launchPermission/item'
1018
- when 'userId' : @result[:users] << @text if @xmlpath == 'DescribeImageAttributeResponse/launchPermission/item'
1019
- when 'productCode' : @result[:aws_product_codes] << @text
1020
- when 'kernel' : @result[:aws_kernel] = @text
1021
- when 'ramdisk' : @result[:aws_ramdisk] = @text
1022
- when 'blockDeviceMapping' : @result[:block_device_mapping] = @text
1033
+ when 'imageId' then @result[:aws_id] = @text
1034
+ when 'group' then @result[:groups] << @text if @xmlpath == 'DescribeImageAttributeResponse/launchPermission/item'
1035
+ when 'userId' then @result[:users] << @text if @xmlpath == 'DescribeImageAttributeResponse/launchPermission/item'
1036
+ when 'productCode' then @result[:aws_product_codes] << @text
1037
+ when 'kernel' then @result[:aws_kernel] = @text
1038
+ when 'ramdisk' then @result[:aws_ramdisk] = @text
1039
+ when 'blockDeviceMapping' then @result[:block_device_mapping] = @text
1023
1040
  end
1024
1041
  end
1025
1042
  def reset
@@ -1046,37 +1063,37 @@ module RightAws
1046
1063
  # RunInstances property
1047
1064
  @xmlpath=='RunInstancesResponse/instancesSet' )
1048
1065
  # the optional params (sometimes are missing and we dont want them to be nil)
1049
- @instance = { :aws_reason => '',
1050
- :dns_name => '',
1051
- :private_dns_name => '',
1052
- :ami_launch_index => '',
1053
- :ssh_key_name => '',
1054
- :aws_state => '',
1066
+ @instance = { :aws_reason => '',
1067
+ :dns_name => '',
1068
+ :private_dns_name => '',
1069
+ :ami_launch_index => '',
1070
+ :ssh_key_name => '',
1071
+ :aws_state => '',
1055
1072
  :aws_product_codes => [] }
1056
1073
  end
1057
1074
  end
1058
1075
  def tagend(name)
1059
1076
  case name
1060
1077
  # reservation
1061
- when 'reservationId' : @reservation[:aws_reservation_id] = @text
1062
- when 'ownerId' : @reservation[:aws_owner] = @text
1063
- when 'groupId' : @reservation[:aws_groups] << @text
1078
+ when 'reservationId' then @reservation[:aws_reservation_id] = @text
1079
+ when 'ownerId' then @reservation[:aws_owner] = @text
1080
+ when 'groupId' then @reservation[:aws_groups] << @text
1064
1081
  # instance
1065
- when 'instanceId' : @instance[:aws_instance_id] = @text
1066
- when 'imageId' : @instance[:aws_image_id] = @text
1067
- when 'dnsName' : @instance[:dns_name] = @text
1068
- when 'privateDnsName' : @instance[:private_dns_name] = @text
1069
- when 'reason' : @instance[:aws_reason] = @text
1070
- when 'keyName' : @instance[:ssh_key_name] = @text
1071
- when 'amiLaunchIndex' : @instance[:ami_launch_index] = @text
1072
- when 'code' : @instance[:aws_state_code] = @text
1073
- when 'name' : @instance[:aws_state] = @text
1074
- when 'productCode' : @instance[:aws_product_codes] << @text
1075
- when 'instanceType' : @instance[:aws_instance_type] = @text
1076
- when 'launchTime' : @instance[:aws_launch_time] = @text
1077
- when 'kernelId' : @instance[:aws_kernel_id] = @text
1078
- when 'ramdiskId' : @instance[:aws_ramdisk_id] = @text
1079
- when 'availabilityZone': @instance[:aws_availability_zone] = @text
1082
+ when 'instanceId' then @instance[:aws_instance_id] = @text
1083
+ when 'imageId' then @instance[:aws_image_id] = @text
1084
+ when 'dnsName' then @instance[:dns_name] = @text
1085
+ when 'privateDnsName' then @instance[:private_dns_name] = @text
1086
+ when 'reason' then @instance[:aws_reason] = @text
1087
+ when 'keyName' then @instance[:ssh_key_name] = @text
1088
+ when 'amiLaunchIndex' then @instance[:ami_launch_index] = @text
1089
+ when 'code' then @instance[:aws_state_code] = @text
1090
+ when 'name' then @instance[:aws_state] = @text
1091
+ when 'productCode' then @instance[:aws_product_codes] << @text
1092
+ when 'instanceType' then @instance[:aws_instance_type] = @text
1093
+ when 'launchTime' then @instance[:aws_launch_time] = @text
1094
+ when 'kernelId' then @instance[:aws_kernel_id] = @text
1095
+ when 'ramdiskId' then @instance[:aws_ramdisk_id] = @text
1096
+ when 'availabilityZone' then @instance[:aws_availability_zone] = @text
1080
1097
  when 'item'
1081
1098
  if @xmlpath == 'DescribeInstancesResponse/reservationSet/item/instancesSet' || # DescribeInstances property
1082
1099
  @xmlpath == 'RunInstancesResponse/instancesSet' # RunInstances property
@@ -1084,7 +1101,7 @@ module RightAws
1084
1101
  elsif @xmlpath=='DescribeInstancesResponse/reservationSet' # DescribeInstances property
1085
1102
  @result << @reservation
1086
1103
  end
1087
- when 'RunInstancesResponse': @result << @reservation # RunInstances property
1104
+ when 'RunInstancesResponse' then @result << @reservation # RunInstances property
1088
1105
  end
1089
1106
  end
1090
1107
  def reset
@@ -1104,7 +1121,7 @@ module RightAws
1104
1121
  end
1105
1122
  def tagend(name)
1106
1123
  case name
1107
- when 'instanceId' : @instance[:aws_instance_id] = @text
1124
+ when 'instanceId' then @instance[:aws_instance_id] = @text
1108
1125
  when 'code'
1109
1126
  if @xmlpath == 'TerminateInstancesResponse/instancesSet/item/shutdownState'
1110
1127
  @instance[:aws_shutdown_state_code] = @text.to_i
@@ -1113,7 +1130,7 @@ module RightAws
1113
1130
  if @xmlpath == 'TerminateInstancesResponse/instancesSet/item/shutdownState'
1114
1131
  @instance[:aws_shutdown_state] = @text
1115
1132
  else @instance[:aws_prev_state] = @text end
1116
- when 'item' : @result << @instance
1133
+ when 'item' then @result << @instance
1117
1134
  end
1118
1135
  end
1119
1136
  def reset
@@ -1125,14 +1142,13 @@ module RightAws
1125
1142
  # PARSERS: Console
1126
1143
  #-----------------------------------------------------------------
1127
1144
 
1128
-
1129
1145
  class QEc2GetConsoleOutputParser < RightAWSParser #:nodoc:
1130
1146
  def tagend(name)
1131
1147
  case name
1132
- when 'instanceId' : @result[:aws_instance_id] = @text
1133
- when 'timestamp' : @result[:aws_timestamp] = @text
1134
- @result[:timestamp] = (Time.parse(@text)).utc
1135
- when 'output' : @result[:aws_output] = Base64.decode64(@text)
1148
+ when 'instanceId' then @result[:aws_instance_id] = @text
1149
+ when 'timestamp' then @result[:aws_timestamp] = @text
1150
+ @result[:timestamp] = (Time.parse(@text)).utc
1151
+ when 'output' then @result[:aws_output] = Base64.decode64(@text)
1136
1152
  end
1137
1153
  end
1138
1154
  def reset
@@ -1140,8 +1156,6 @@ module RightAws
1140
1156
  end
1141
1157
  end
1142
1158
 
1143
- end
1144
-
1145
1159
  #-----------------------------------------------------------------
1146
1160
  # PARSERS: Fake
1147
1161
  #-----------------------------------------------------------------
@@ -1171,9 +1185,9 @@ module RightAws
1171
1185
  end
1172
1186
  def tagend(name)
1173
1187
  case name
1174
- when 'instanceId' ; @address[:instance_id] = @text.blank? ? nil : @text
1175
- when 'publicIp' ; @address[:public_ip] = @text
1176
- when 'item' ; @result << @address
1188
+ when 'instanceId' then @address[:instance_id] = @text.blank? ? nil : @text
1189
+ when 'publicIp' then @address[:public_ip] = @text
1190
+ when 'item' then @result << @address
1177
1191
  end
1178
1192
  end
1179
1193
  def reset
@@ -1191,14 +1205,18 @@ module RightAws
1191
1205
  end
1192
1206
  def tagend(name)
1193
1207
  case name
1194
- when 'zoneName' ; @zone[:zone_name] = @text
1195
- when 'zoneState' ; @zone[:zone_state] = @text
1196
- when 'item' ; @result << @zone
1208
+ when 'zoneName' then @zone[:zone_name] = @text
1209
+ when 'zoneState' then @zone[:zone_state] = @text
1210
+ when 'item' then @result << @zone
1197
1211
  end
1198
1212
  end
1199
1213
  def reset
1200
1214
  @result = []
1201
1215
  end
1202
1216
  end
1217
+
1218
+
1203
1219
 
1220
+ end
1221
+
1204
1222
  end