awsum 0.5

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 (127) hide show
  1. data/.autotest +1 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +44 -0
  6. data/LICENSE +19 -0
  7. data/README.rdoc +42 -0
  8. data/Rakefile +75 -0
  9. data/awsum.gemspec +199 -0
  10. data/lib/awsum.rb +20 -0
  11. data/lib/awsum/ec2.rb +741 -0
  12. data/lib/awsum/ec2/address.rb +67 -0
  13. data/lib/awsum/ec2/availability_zone.rb +16 -0
  14. data/lib/awsum/ec2/image.rb +62 -0
  15. data/lib/awsum/ec2/instance.rb +57 -0
  16. data/lib/awsum/ec2/keypair.rb +16 -0
  17. data/lib/awsum/ec2/parsers/address_parser.rb +61 -0
  18. data/lib/awsum/ec2/parsers/availability_zone_parser.rb +57 -0
  19. data/lib/awsum/ec2/parsers/image_parser.rb +74 -0
  20. data/lib/awsum/ec2/parsers/instance_parser.rb +90 -0
  21. data/lib/awsum/ec2/parsers/keypair_parser.rb +64 -0
  22. data/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser.rb +34 -0
  23. data/lib/awsum/ec2/parsers/region_parser.rb +56 -0
  24. data/lib/awsum/ec2/parsers/register_image_parser.rb +34 -0
  25. data/lib/awsum/ec2/parsers/reserved_instance_parser.rb +64 -0
  26. data/lib/awsum/ec2/parsers/reserved_instances_offering_parser.rb +63 -0
  27. data/lib/awsum/ec2/parsers/security_group_parser.rb +106 -0
  28. data/lib/awsum/ec2/parsers/snapshot_parser.rb +64 -0
  29. data/lib/awsum/ec2/parsers/volume_parser.rb +77 -0
  30. data/lib/awsum/ec2/region.rb +54 -0
  31. data/lib/awsum/ec2/reserved_instance.rb +24 -0
  32. data/lib/awsum/ec2/reserved_instances_offering.rb +20 -0
  33. data/lib/awsum/ec2/security_group.rb +74 -0
  34. data/lib/awsum/ec2/snapshot.rb +23 -0
  35. data/lib/awsum/ec2/volume.rb +65 -0
  36. data/lib/awsum/error.rb +53 -0
  37. data/lib/awsum/net_fix.rb +100 -0
  38. data/lib/awsum/parser.rb +18 -0
  39. data/lib/awsum/requestable.rb +216 -0
  40. data/lib/awsum/s3.rb +220 -0
  41. data/lib/awsum/s3/bucket.rb +28 -0
  42. data/lib/awsum/s3/headers.rb +24 -0
  43. data/lib/awsum/s3/object.rb +138 -0
  44. data/lib/awsum/s3/parsers/bucket_parser.rb +43 -0
  45. data/lib/awsum/support.rb +94 -0
  46. data/spec/fixtures/ec2/addresses.xml +10 -0
  47. data/spec/fixtures/ec2/allocate_address.xml +5 -0
  48. data/spec/fixtures/ec2/associate_address.xml +5 -0
  49. data/spec/fixtures/ec2/attach_volume.xml +9 -0
  50. data/spec/fixtures/ec2/authorize_ip_access.xml +5 -0
  51. data/spec/fixtures/ec2/authorize_owner_group_access.xml +5 -0
  52. data/spec/fixtures/ec2/authorize_owner_group_access_error.xml +2 -0
  53. data/spec/fixtures/ec2/availability_zones.xml +16 -0
  54. data/spec/fixtures/ec2/available_volume.xml +14 -0
  55. data/spec/fixtures/ec2/create_key_pair.xml +29 -0
  56. data/spec/fixtures/ec2/create_security_group.xml +5 -0
  57. data/spec/fixtures/ec2/create_snapshot.xml +9 -0
  58. data/spec/fixtures/ec2/create_volume.xml +10 -0
  59. data/spec/fixtures/ec2/delete_key_pair.xml +5 -0
  60. data/spec/fixtures/ec2/delete_security_group.xml +5 -0
  61. data/spec/fixtures/ec2/delete_snapshot.xml +5 -0
  62. data/spec/fixtures/ec2/delete_volume.xml +5 -0
  63. data/spec/fixtures/ec2/deregister_image.xml +5 -0
  64. data/spec/fixtures/ec2/detach_volume.xml +9 -0
  65. data/spec/fixtures/ec2/disassociate_address.xml +5 -0
  66. data/spec/fixtures/ec2/image.xml +15 -0
  67. data/spec/fixtures/ec2/images.xml +77 -0
  68. data/spec/fixtures/ec2/instance.xml +36 -0
  69. data/spec/fixtures/ec2/instances.xml +88 -0
  70. data/spec/fixtures/ec2/internal_error.xml +2 -0
  71. data/spec/fixtures/ec2/invalid_amiid_error.xml +2 -0
  72. data/spec/fixtures/ec2/invalid_request_error.xml +2 -0
  73. data/spec/fixtures/ec2/key_pairs.xml +10 -0
  74. data/spec/fixtures/ec2/purchase_reserved_instances_offering.xml +5 -0
  75. data/spec/fixtures/ec2/purchase_reserved_instances_offerings.xml +6 -0
  76. data/spec/fixtures/ec2/regions.xml +14 -0
  77. data/spec/fixtures/ec2/register_image.xml +5 -0
  78. data/spec/fixtures/ec2/release_address.xml +5 -0
  79. data/spec/fixtures/ec2/reserved_instances.xml +18 -0
  80. data/spec/fixtures/ec2/reserved_instances_offering.xml +15 -0
  81. data/spec/fixtures/ec2/reserved_instances_offerings.xml +276 -0
  82. data/spec/fixtures/ec2/revoke_ip_access.xml +5 -0
  83. data/spec/fixtures/ec2/revoke_owner_group_access.xml +5 -0
  84. data/spec/fixtures/ec2/run_instances.xml +30 -0
  85. data/spec/fixtures/ec2/security_groups.xml +159 -0
  86. data/spec/fixtures/ec2/snapshots.xml +13 -0
  87. data/spec/fixtures/ec2/terminate_instances.xml +17 -0
  88. data/spec/fixtures/ec2/unassociated_address.xml +10 -0
  89. data/spec/fixtures/ec2/volumes.xml +23 -0
  90. data/spec/fixtures/errors/invalid_parameter_value.xml +2 -0
  91. data/spec/fixtures/s3/buckets.xml +2 -0
  92. data/spec/fixtures/s3/copy_failure.xml +23 -0
  93. data/spec/fixtures/s3/invalid_request_signature.xml +5 -0
  94. data/spec/fixtures/s3/keys.xml +2 -0
  95. data/spec/lib/awsum/ec2/address_spec.rb +149 -0
  96. data/spec/lib/awsum/ec2/availability_zones_spec.rb +21 -0
  97. data/spec/lib/awsum/ec2/image_spec.rb +92 -0
  98. data/spec/lib/awsum/ec2/instance_spec.rb +125 -0
  99. data/spec/lib/awsum/ec2/keypair_spec.rb +55 -0
  100. data/spec/lib/awsum/ec2/parsers/address_parser_spec.rb +51 -0
  101. data/spec/lib/awsum/ec2/parsers/availability_zone_parser_spec.rb +28 -0
  102. data/spec/lib/awsum/ec2/parsers/image_parser_spec.rb +66 -0
  103. data/spec/lib/awsum/ec2/parsers/instance_parser_spec.rb +75 -0
  104. data/spec/lib/awsum/ec2/parsers/keypair_parser_spec.rb +74 -0
  105. data/spec/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser_spec.rb +14 -0
  106. data/spec/lib/awsum/ec2/parsers/region_parser_spec.rb +27 -0
  107. data/spec/lib/awsum/ec2/parsers/register_image_parser_spec.rb +15 -0
  108. data/spec/lib/awsum/ec2/parsers/reserved_instance_parser_spec.rb +35 -0
  109. data/spec/lib/awsum/ec2/parsers/reserved_instances_offering_parser_spec.rb +32 -0
  110. data/spec/lib/awsum/ec2/parsers/security_group_parser_spec.rb +78 -0
  111. data/spec/lib/awsum/ec2/parsers/snapshot_parser_spec.rb +30 -0
  112. data/spec/lib/awsum/ec2/parsers/volume_parser_spec.rb +35 -0
  113. data/spec/lib/awsum/ec2/region_spec.rb +73 -0
  114. data/spec/lib/awsum/ec2/reserved_instance_spec.rb +61 -0
  115. data/spec/lib/awsum/ec2/reserved_instances_offering_spec.rb +33 -0
  116. data/spec/lib/awsum/ec2/security_group_spec.rb +179 -0
  117. data/spec/lib/awsum/ec2/snapshots_spec.rb +69 -0
  118. data/spec/lib/awsum/ec2/volume_spec.rb +107 -0
  119. data/spec/lib/awsum/ec2_spec.rb +6 -0
  120. data/spec/lib/awsum/error_spec.rb +31 -0
  121. data/spec/lib/awsum/requestable_spec.rb +126 -0
  122. data/spec/lib/awsum/s3/bucket_spec.rb +95 -0
  123. data/spec/lib/awsum/s3/object_spec.rb +128 -0
  124. data/spec/lib/awsum/s3/parsers/bucket_parser_spec.rb +41 -0
  125. data/spec/lib/awsum/s3/parsers/object_parser_spec.rb +41 -0
  126. data/spec/spec_helper.rb +16 -0
  127. metadata +240 -0
@@ -0,0 +1,28 @@
1
+ require 'awsum/s3/parsers/bucket_parser'
2
+
3
+ module Awsum
4
+ class S3
5
+ class Bucket
6
+ attr_reader :name, :creation_date
7
+
8
+ def initialize(s3, name, creation_date = nil)
9
+ @s3 = s3
10
+ @name = name
11
+ @creation_date = creation_date
12
+ end
13
+
14
+ # Delete this Bucket
15
+ def delete
16
+ @s3.delete_bucket(@name)
17
+ end
18
+
19
+ # Delete this Bucket, recursively deleting all keys first
20
+ def delete!
21
+ @s3.keys(@name).each do |key|
22
+ key.delete
23
+ end
24
+ delete
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ module Awsum
2
+ class S3
3
+ class Headers #:nodoc:
4
+ def initialize(response)
5
+ @response = response
6
+ end
7
+
8
+ # Locking down to HTTPHeader methods only
9
+ def method_missing(method, *args, &block)
10
+ if !%w(body body_permitted? entity inspect read_body to_ary value).include?(method.to_s) && @response.respond_to?(method)
11
+ @response.send(method, *args, &block)
12
+ else
13
+ raise NoMethodError.new("undefined method `#{method}' for #{inspect}")
14
+ end
15
+ end
16
+
17
+ def inspect
18
+ headers = []
19
+ @response.canonical_each do |h,v| headers << h end
20
+ "#<Awsum::S3::Headers \"#{headers.join('", "')}\">"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,138 @@
1
+ module Awsum
2
+ class S3
3
+ class Object
4
+ attr_reader :key, :bucket, :last_modified, :etag, :size, :owner, :storage_class
5
+
6
+ def initialize(s3, bucket, key, last_modified, etag, size, owner, storage_class)
7
+ @s3 = s3
8
+ @bucket = bucket
9
+ @key = key
10
+ @last_modified = last_modified
11
+ @etag = etag
12
+ @size = size
13
+ @owner = owner
14
+ @storage_class = storage_class
15
+ end
16
+
17
+ # Get the headers for this Object
18
+ #
19
+ # All header methods map directly to the Net::HTTPHeader module
20
+ def headers
21
+ @headers ||= @s3.object_headers(@bucket, @key)
22
+ end
23
+
24
+ # Retrieve the data stored for this Object
25
+ #
26
+ # You can get the data as a single call or add a block to retrieve the data in chunks
27
+ # ==Examples
28
+ # content = object.data
29
+ #
30
+ # or
31
+ #
32
+ # object.data do |chunk|
33
+ # # handle chunk
34
+ # puts chunk
35
+ # end
36
+ def data(&block)
37
+ @s3.object_data @bucket, @key, &block
38
+ end
39
+
40
+ # Delete this Key
41
+ def delete
42
+ @s3.delete_object(@bucket, @key)
43
+ end
44
+
45
+ # Make a copy of this Object with a new key
46
+ def copy(new_key, headers = nil, meta_headers = nil)
47
+ @s3.copy_object(@bucket, @key, nil, new_key, headers, meta_headers)
48
+ end
49
+
50
+ # Rename or move this Object to a new key
51
+ def rename(new_key, headers = nil, meta_headers = nil)
52
+ copied = @s3.copy_object(@bucket, @key, nil, new_key, headers, meta_headers)
53
+ @s3.delete_object(@bucket, @key) if copied
54
+ end
55
+ alias_method :move, :rename
56
+
57
+ # Copy this Object to another Bucket
58
+ #
59
+ def copy_to(new_bucket, new_key = nil, headers = nil, meta_headers = nil)
60
+ @s3.copy_object(@bucket, @key, new_bucket, new_key, headers, meta_headers)
61
+ end
62
+
63
+ # Move this Object to another Bucket
64
+ def move_to(new_bucket, new_key = nil, headers = nil, meta_headers = nil)
65
+ copied = @s3.copy_object(@bucket, @key, new_bucket, new_key, headers, meta_headers)
66
+ @s3.delete_object(@bucket, @key) if copied
67
+ end
68
+ end
69
+
70
+ #TODO: Create a more advanced array which can deal with pagination
71
+ class ObjectParser < Awsum::Parser #:nodoc:
72
+ def initialize(s3)
73
+ @s3 = s3
74
+ @bucket = ''
75
+ @objects = []
76
+ @text = nil
77
+ @stack = []
78
+ end
79
+
80
+ def tag_start(tag, attributes)
81
+ case tag
82
+ when 'ListBucketResult'
83
+ @stack << tag
84
+ @text = ''
85
+ when 'Contents'
86
+ @stack << tag
87
+ @current = {}
88
+ @text = ''
89
+ when 'Owner'
90
+ @owner = {}
91
+ @stack << tag
92
+ end
93
+ end
94
+
95
+ def text(text)
96
+ @text << text unless @text.nil?
97
+ end
98
+
99
+ def tag_end(tag)
100
+ case tag
101
+ when 'Name'
102
+ if @stack[-1] == 'ListBucketResult'
103
+ @bucket = @text.strip
104
+ end
105
+ when 'Contents'
106
+ @objects << Object.new(
107
+ @s3,
108
+ @bucket,
109
+ @current['Key'],
110
+ Time.parse(@current['LastModified']),
111
+ @current['ETag'],
112
+ @current['Size'].to_i,
113
+ {'id' => @owner['ID'], 'name' => @owner['DisplayName']},
114
+ @current['StorageClass']
115
+ )
116
+ @current = nil
117
+ @text = nil
118
+ @stack.pop
119
+ when 'Owner'
120
+ @stack.pop
121
+ else
122
+ text = @text.strip unless @text.nil?
123
+ case @stack[-1]
124
+ when 'Owner'
125
+ @owner[tag] = (text == '' ? nil : text) unless @owner.nil?
126
+ when 'Contents'
127
+ @current[tag] = (text == '' ? nil : text) unless @current.nil?
128
+ end
129
+ @text = ''
130
+ end
131
+ end
132
+
133
+ def result
134
+ @objects
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,43 @@
1
+ module Awsum
2
+ class S3
3
+ class BucketParser < Awsum::Parser #:nodoc:
4
+ def initialize(s3)
5
+ @s3 = s3
6
+ @buckets = []
7
+ @text = nil
8
+ end
9
+
10
+ def tag_start(tag, attributes)
11
+ case tag
12
+ when 'Bucket'
13
+ @current = {}
14
+ @text = ''
15
+ end
16
+ end
17
+
18
+ def text(text)
19
+ @text << text unless @text.nil?
20
+ end
21
+
22
+ def tag_end(tag)
23
+ case tag
24
+ when 'Bucket'
25
+ @buckets << Bucket.new(
26
+ @s3,
27
+ @current['Name'],
28
+ Time.parse(@current['CreationDate'])
29
+ )
30
+ @text = nil
31
+ @current = nil
32
+ else
33
+ text = @text.strip unless @text.nil?
34
+ @current[tag] = (text == '' ? nil : text) unless @current.nil?
35
+ end
36
+ end
37
+
38
+ def result
39
+ @buckets
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,94 @@
1
+ # Thanks to RightAws for this idea!
2
+ #
3
+ # If ActiveSupport is loaded, then great - use it. But we don't
4
+ # want a dependency on it, so if it's not present, define the few
5
+ # extensions that we want to use...
6
+ unless defined? ActiveSupport::CoreExtensions
7
+ # These are ActiveSupport-;like extensions to do a few handy things in the gems
8
+ # Derived from ActiveSupport, so the ActiveSupport copyright notice applies:
9
+ #
10
+ #
11
+ #
12
+ # Copyright (c) 2005 David Heinemeier Hansson
13
+ #
14
+ # Permission is hereby granted, free of charge, to any person obtaining
15
+ # a copy of this software and associated documentation files (the
16
+ # "Software"), to deal in the Software without restriction, including
17
+ # without limitation the rights to use, copy, modify, merge, publish,
18
+ # distribute, sublicense, and/or sell copies of the Software, and to
19
+ # permit persons to whom the Software is furnished to do so, subject to
20
+ # the following conditions:
21
+ #
22
+ # The above copyright notice and this permission notice shall be
23
+ # included in all copies or substantial portions of the Software.
24
+ #
25
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
+ #++
33
+ #
34
+ #
35
+
36
+ class Object #:nodoc:
37
+ # "", " ", nil, [], and {} are blank
38
+ def blank?
39
+ if respond_to?(:empty?) && respond_to?(:strip)
40
+ empty? or strip.empty?
41
+ elsif respond_to?(:empty?)
42
+ empty?
43
+ else
44
+ !self
45
+ end
46
+ end
47
+ end
48
+
49
+ class NilClass #:nodoc:
50
+ def blank?
51
+ true
52
+ end
53
+ end
54
+
55
+ class FalseClass #:nodoc:
56
+ def blank?
57
+ true
58
+ end
59
+ end
60
+
61
+ class TrueClass #:nodoc:
62
+ def blank?
63
+ false
64
+ end
65
+ end
66
+
67
+ class Array #:nodoc:
68
+ alias_method :blank?, :empty?
69
+ end
70
+
71
+ class Hash #:nodoc:
72
+ alias_method :blank?, :empty?
73
+
74
+ # Return a new hash with all keys converted to symbols.
75
+ def symbolize_keys
76
+ inject({}) do |options, (key, value)|
77
+ options[key.to_sym] = value
78
+ options
79
+ end
80
+ end
81
+ end
82
+
83
+ class String #:nodoc:
84
+ def blank?
85
+ empty? || strip.empty?
86
+ end
87
+ end
88
+
89
+ class Numeric #:nodoc:
90
+ def blank?
91
+ false
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeAddressesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>0a578151-76d1-4461-b1ce-ae36d39ec349</requestId>
4
+ <addressesSet>
5
+ <item>
6
+ <publicIp>127.0.0.1</publicIp>
7
+ <instanceId>i-3f1cc856</instanceId>
8
+ </item>
9
+ </addressesSet>
10
+ </DescribeAddressesResponse>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0"?>
2
+ <AllocateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>c4e3b090-0fd8-4e65-aed7-4c3fe8fc7702</requestId>
4
+ <publicIp>127.0.0.1</publicIp>
5
+ </AllocateAddressResponse>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0"?>
2
+ <AssociateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>668dec61-986c-468e-85be-4bfcd708fb1f</requestId>
4
+ <return>true</return>
5
+ </AssociateAddressResponse></return></requestId></AssociateAddressResponse>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0"?>
2
+ <AttachVolumeResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>3756a0c0-aa24-468d-9bd1-bfe2e54dd4cc</requestId>
4
+ <volumeId>vol-44d6322d</volumeId>
5
+ <instanceId>i-3f1cc856</instanceId>
6
+ <device>/dev/sdb</device>
7
+ <status>attaching</status>
8
+ <attachTime>2009-01-14T04:34:35.000Z</attachTime>
9
+ </AttachVolumeResponse>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0"?>
2
+ <AuthorizeSecurityGroupIngressResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>80863a38-c204-492e-8c3e-d41b45379e3e</requestId>
4
+ <return>true</return>
5
+ </AuthorizeSecurityGroupIngressResponse>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0"?>
2
+ <AuthorizeSecurityGroupIngressResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>0fa48cfd-7766-4713-aecd-140e50f24091</requestId>
4
+ <return>true</return>
5
+ </AuthorizeSecurityGroupIngressResponse>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0"?>
2
+ <Response><Errors><Error><Code>InvalidParameterCombination</Code><Message>The parameter 'CidrIp' may not be used in combination with 'SourceSecurityGroupOwnerId'</Message></Error></Errors><RequestID>6364d411-bdf0-4718-a2c9-219ebec33827</RequestID></Response>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeAvailabilityZonesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>6ffe1588-28b8-4033-a07c-97b029c6930a</requestId>
4
+ <availabilityZoneInfo>
5
+ <item>
6
+ <zoneName>eu-west-1a</zoneName>
7
+ <zoneState>available</zoneState>
8
+ <regionName>eu-west-1</regionName>
9
+ </item>
10
+ <item>
11
+ <zoneName>eu-west-1b</zoneName>
12
+ <zoneState>available</zoneState>
13
+ <regionName>eu-west-1</regionName>
14
+ </item>
15
+ </availabilityZoneInfo>
16
+ </DescribeAvailabilityZonesResponse>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0"?>
2
+ <DescribeVolumesResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>f4786b8a-90e8-4570-a786-1076fba0eeae</requestId>
4
+ <volumeSet>
5
+ <item>
6
+ <volumeId>vol-44d6322d</volumeId>
7
+ <size>10</size>
8
+ <snapshotId/>
9
+ <availabilityZone>us-east-1b</availabilityZone>
10
+ <status>available</status>
11
+ <createTime>2009-01-14T03:57:08.000Z</createTime>
12
+ </item>
13
+ </volumeSet>
14
+ </DescribeVolumesResponse>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0"?>
2
+ <CreateKeyPairResponse xmlns="http://ec2.amazonaws.com/doc/2008-12-01/">
3
+ <requestId>6c6d3488-f769-431b-a838-2f630aa6c38b</requestId>
4
+ <keyName>test-keypair</keyName>
5
+ <keyFingerprint>ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab:ab</keyFingerprint>
6
+ <keyMaterial>-----BEGIN RSA PRIVATE KEY-----
7
+ MIIEogIBAAKCAQEAqkxIjNxLV/shvaep5Kum3N2xTV6aBbXezVA4HHE371HSq3haKTcST7QYeQha
8
+ 92AmZojAm2ojqWMw9GJaeq/Q7NvXKdMgj3mKd7zY7tdC+HmKYVkAvJ9enuuVwPFxlt+5rPpZ2jS+
9
+ kl4MWEvWh1N5U1urx5gzHq2e/k7P+dCBwFnCHsg/p1mym4j4qwEHEviaUG6SnB8Xvuggp/pxCmJg
10
+ 9Gie4cXNgbBboEyAQDRb/AmrehbBa90GOVDjDGIzB98rOcJ22FRrpLqSl2D+FQKsXWboqgbIrgKT
11
+ ven7mzb8cgDJNrWTI/MNP8p8gNTh+L7gTwPDcGfaDBiRpn9t3FiTBwIDAQABAoIBAEmuNZmUWpjX
12
+ U/LdjtkcF1bqKCMkchlUZfCI664KojvOOAruSHwakrafYhNDtS/gjtzAAC19z64i93RU9XatiQRh
13
+ 3YcADM9ms604rNcxlY0x8NhLjNEPVv4FScav8AhqBci8jJGnTmi/fjHZphjo2c5iFEGILV3xmp/G
14
+ 857PQsQ4nOAzoV7fQPYow4XiO/xhGh8p8o2Z9Og3GdbEGH1v/051g3O1eU7PFyQaxmOGNYmklMuM
15
+ V/8l/LK+OKR0f9KgqcgDSlEbidqsmWM0a1/t7+I5W/mgXSZl5U4HN680DKbkzoX0kgoPN7XMbcSX
16
+ sHNguqDfrvkBUQu1vEaXebWfpekCgYEA0qVbcFGxKniyYxmvtSrbb5bpEnh6zRCGXgSU4fX41i8P
17
+ Xg15R7FnwGO5nuRXqGW6CSgfbA7YAVEQHunUOB0XWuJWgn6gsqvnCZvyfRnqyMJJjRhvuaUMTn/5
18
+ ikcayflqPFHvv5Z+pB3pWNaTD6lM5imdF1In9RBYL4q5Vpt9gl0CgYEAzvb6cS6Yi0PkxU3OOEmg
19
+ 98QcdTEd1hrk3r6uXI1TOeiUPIw+dyGCKa9OqpcFDs+0FskFs6RzztRh2gpwQZTH3UOYPqsjsWd+
20
+ AjL3jv+vmpU1OhnA0SpkyiiZtaSAV2N+Xlq8orG6fbnYFCdzHbufLFaoOpbGptmLfrwMSvnhXLMC
21
+ gYBxRsEcbqHycAOmLUsDBvAIW0QtTaLkIe3QI3CY7viI3bfK4T4GIs3jdP1+B9dn1IStpej36Cea
22
+ 1afwp9ga8PH9Stgwxr3ON4k/7qABTG2o1mpNOQXj9HDgygs8pC4wzTKnC3z9L4Yc5YT15DYjZuzW
23
+ nSxAPUsFi2uQ7W3ruCRPdQKBgGslsCiyb+UBpEmFa3L2o3BCRl1hrUmwKLcszsY5oFHFmCD0lk5E
24
+ ucds6/QjNUoiu+Bj+CC1zgLRL0ubxdwd848YtJQVM+hfZPwseL++naIRBzpqJMnlAcMrW9CPNqaH
25
+ at/cZ/ZuvtbiRPzCI7XL8a8ZugSDFJtC2xYkstSKI2NDAoGAIiwUwKRMJyB9IRXhMfpf6vsEza2t
26
+ urHVUdJUyIwvPJSh2PfkumwrPuk+P+8v6jJjJ0hsqOS+TLQwWclIGwGey/PMNRYqQDqnSUofNmza
27
+ XtGGfWTOD3AdDEH39RTd3Zmfirrjm1YsY/Nb54X+V5TN2uvm/yJBIbb4aLvfG74Jmoc=
28
+ -----END RSA PRIVATE KEY-----</keyMaterial>
29
+ </CreateKeyPairResponse>