fog 0.0.3

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 (171) hide show
  1. data/.document +5 -0
  2. data/.gitignore +6 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +98 -0
  6. data/VERSION +1 -0
  7. data/benchs/fog_vs.rb +135 -0
  8. data/benchs/headers_split_vs_match.rb +18 -0
  9. data/benchs/params.rb +43 -0
  10. data/benchs/parse_vs_push.rb +60 -0
  11. data/benchs/stripping.rb +26 -0
  12. data/lib/fog.rb +21 -0
  13. data/lib/fog/aws.rb +145 -0
  14. data/lib/fog/aws/ec2.rb +173 -0
  15. data/lib/fog/aws/models/ec2/address.rb +31 -0
  16. data/lib/fog/aws/models/ec2/addresses.rb +36 -0
  17. data/lib/fog/aws/models/ec2/key_pair.rb +35 -0
  18. data/lib/fog/aws/models/ec2/key_pairs.rb +36 -0
  19. data/lib/fog/aws/models/ec2/volume.rb +47 -0
  20. data/lib/fog/aws/models/ec2/volumes.rb +36 -0
  21. data/lib/fog/aws/models/s3/bucket.rb +77 -0
  22. data/lib/fog/aws/models/s3/buckets.rb +83 -0
  23. data/lib/fog/aws/models/s3/object.rb +76 -0
  24. data/lib/fog/aws/models/s3/objects.rb +97 -0
  25. data/lib/fog/aws/models/s3/owner.rb +18 -0
  26. data/lib/fog/aws/parsers/ec2/allocate_address.rb +19 -0
  27. data/lib/fog/aws/parsers/ec2/attach_volume.rb +22 -0
  28. data/lib/fog/aws/parsers/ec2/basic.rb +25 -0
  29. data/lib/fog/aws/parsers/ec2/create_key_pair.rb +20 -0
  30. data/lib/fog/aws/parsers/ec2/create_snapshot.rb +22 -0
  31. data/lib/fog/aws/parsers/ec2/create_volume.rb +24 -0
  32. data/lib/fog/aws/parsers/ec2/describe_addresses.rb +30 -0
  33. data/lib/fog/aws/parsers/ec2/describe_availability_zones.rb +30 -0
  34. data/lib/fog/aws/parsers/ec2/describe_images.rb +49 -0
  35. data/lib/fog/aws/parsers/ec2/describe_instances.rb +73 -0
  36. data/lib/fog/aws/parsers/ec2/describe_key_pairs.rb +30 -0
  37. data/lib/fog/aws/parsers/ec2/describe_regions.rb +30 -0
  38. data/lib/fog/aws/parsers/ec2/describe_security_groups.rb +75 -0
  39. data/lib/fog/aws/parsers/ec2/describe_snapshots.rb +30 -0
  40. data/lib/fog/aws/parsers/ec2/describe_volumes.rb +57 -0
  41. data/lib/fog/aws/parsers/ec2/detach_volume.rb +22 -0
  42. data/lib/fog/aws/parsers/ec2/get_console_output.rb +28 -0
  43. data/lib/fog/aws/parsers/ec2/run_instances.rb +65 -0
  44. data/lib/fog/aws/parsers/ec2/terminate_instances.rb +55 -0
  45. data/lib/fog/aws/parsers/s3/copy_object.rb +22 -0
  46. data/lib/fog/aws/parsers/s3/get_bucket.rb +46 -0
  47. data/lib/fog/aws/parsers/s3/get_bucket_location.rb +20 -0
  48. data/lib/fog/aws/parsers/s3/get_request_payment.rb +20 -0
  49. data/lib/fog/aws/parsers/s3/get_service.rb +32 -0
  50. data/lib/fog/aws/parsers/simpledb/basic.rb +31 -0
  51. data/lib/fog/aws/parsers/simpledb/domain_metadata.rb +30 -0
  52. data/lib/fog/aws/parsers/simpledb/get_attributes.rb +34 -0
  53. data/lib/fog/aws/parsers/simpledb/list_domains.rb +28 -0
  54. data/lib/fog/aws/parsers/simpledb/select.rb +39 -0
  55. data/lib/fog/aws/requests/ec2/allocate_address.rb +50 -0
  56. data/lib/fog/aws/requests/ec2/associate_address.rb +59 -0
  57. data/lib/fog/aws/requests/ec2/attach_volume.rb +71 -0
  58. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +32 -0
  59. data/lib/fog/aws/requests/ec2/create_key_pair.rb +60 -0
  60. data/lib/fog/aws/requests/ec2/create_security_group.rb +61 -0
  61. data/lib/fog/aws/requests/ec2/create_snapshot.rb +65 -0
  62. data/lib/fog/aws/requests/ec2/create_volume.rb +66 -0
  63. data/lib/fog/aws/requests/ec2/delete_key_pair.rb +49 -0
  64. data/lib/fog/aws/requests/ec2/delete_security_group.rb +52 -0
  65. data/lib/fog/aws/requests/ec2/delete_snapshot.rb +53 -0
  66. data/lib/fog/aws/requests/ec2/delete_volume.rb +55 -0
  67. data/lib/fog/aws/requests/ec2/describe_addresses.rb +61 -0
  68. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +64 -0
  69. data/lib/fog/aws/requests/ec2/describe_images.rb +41 -0
  70. data/lib/fog/aws/requests/ec2/describe_instances.rb +114 -0
  71. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +63 -0
  72. data/lib/fog/aws/requests/ec2/describe_regions.rb +61 -0
  73. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +71 -0
  74. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +78 -0
  75. data/lib/fog/aws/requests/ec2/describe_volumes.rb +85 -0
  76. data/lib/fog/aws/requests/ec2/detach_volume.rb +62 -0
  77. data/lib/fog/aws/requests/ec2/disassociate_address.rb +55 -0
  78. data/lib/fog/aws/requests/ec2/get_console_output.rb +26 -0
  79. data/lib/fog/aws/requests/ec2/reboot_instances.rb +24 -0
  80. data/lib/fog/aws/requests/ec2/release_address.rb +50 -0
  81. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +32 -0
  82. data/lib/fog/aws/requests/ec2/run_instances.rb +134 -0
  83. data/lib/fog/aws/requests/ec2/terminate_instances.rb +80 -0
  84. data/lib/fog/aws/requests/s3/copy_object.rb +79 -0
  85. data/lib/fog/aws/requests/s3/delete_bucket.rb +53 -0
  86. data/lib/fog/aws/requests/s3/delete_object.rb +52 -0
  87. data/lib/fog/aws/requests/s3/get_bucket.rb +100 -0
  88. data/lib/fog/aws/requests/s3/get_bucket_location.rb +53 -0
  89. data/lib/fog/aws/requests/s3/get_object.rb +82 -0
  90. data/lib/fog/aws/requests/s3/get_request_payment.rb +53 -0
  91. data/lib/fog/aws/requests/s3/get_service.rb +58 -0
  92. data/lib/fog/aws/requests/s3/head_object.rb +61 -0
  93. data/lib/fog/aws/requests/s3/put_bucket.rb +69 -0
  94. data/lib/fog/aws/requests/s3/put_object.rb +76 -0
  95. data/lib/fog/aws/requests/s3/put_request_payment.rb +56 -0
  96. data/lib/fog/aws/requests/simpledb/batch_put_attributes.rb +31 -0
  97. data/lib/fog/aws/requests/simpledb/create_domain.rb +25 -0
  98. data/lib/fog/aws/requests/simpledb/delete_attributes.rb +34 -0
  99. data/lib/fog/aws/requests/simpledb/delete_domain.rb +25 -0
  100. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +30 -0
  101. data/lib/fog/aws/requests/simpledb/get_attributes.rb +35 -0
  102. data/lib/fog/aws/requests/simpledb/list_domains.rb +30 -0
  103. data/lib/fog/aws/requests/simpledb/put_attributes.rb +29 -0
  104. data/lib/fog/aws/requests/simpledb/select.rb +29 -0
  105. data/lib/fog/aws/s3.rb +157 -0
  106. data/lib/fog/aws/simpledb.rb +157 -0
  107. data/lib/fog/collection.rb +77 -0
  108. data/lib/fog/connection.rb +130 -0
  109. data/lib/fog/errors.rb +145 -0
  110. data/lib/fog/model.rb +72 -0
  111. data/lib/fog/parser.rb +30 -0
  112. data/lib/fog/response.rb +12 -0
  113. data/spec/aws/models/s3/bucket_spec.rb +130 -0
  114. data/spec/aws/models/s3/buckets_spec.rb +79 -0
  115. data/spec/aws/models/s3/object_spec.rb +121 -0
  116. data/spec/aws/models/s3/objects_spec.rb +112 -0
  117. data/spec/aws/models/s3/owner_spec.rb +18 -0
  118. data/spec/aws/requests/ec2/allocate_address_spec.rb +18 -0
  119. data/spec/aws/requests/ec2/associate_address_spec.rb +42 -0
  120. data/spec/aws/requests/ec2/attach_volume_spec.rb +53 -0
  121. data/spec/aws/requests/ec2/authorize_security_group_ingress_spec.rb +26 -0
  122. data/spec/aws/requests/ec2/create_key_pair_spec.rb +36 -0
  123. data/spec/aws/requests/ec2/create_security_group_spec.rb +34 -0
  124. data/spec/aws/requests/ec2/create_snapshot_spec.rb +37 -0
  125. data/spec/aws/requests/ec2/create_volume_spec.rb +23 -0
  126. data/spec/aws/requests/ec2/delete_key_pair_spec.rb +21 -0
  127. data/spec/aws/requests/ec2/delete_security_group_spec.rb +26 -0
  128. data/spec/aws/requests/ec2/delete_snapshot_spec.rb +35 -0
  129. data/spec/aws/requests/ec2/delete_volume_spec.rb +26 -0
  130. data/spec/aws/requests/ec2/describe_addresses_spec.rb +38 -0
  131. data/spec/aws/requests/ec2/describe_availability_zones_spec.rb +23 -0
  132. data/spec/aws/requests/ec2/describe_images_spec.rb +39 -0
  133. data/spec/aws/requests/ec2/describe_instances_spec.rb +86 -0
  134. data/spec/aws/requests/ec2/describe_key_pairs_spec.rb +42 -0
  135. data/spec/aws/requests/ec2/describe_regions_spec.rb +21 -0
  136. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +51 -0
  137. data/spec/aws/requests/ec2/describe_snapshots_spec.rb +54 -0
  138. data/spec/aws/requests/ec2/describe_volumes_spec.rb +50 -0
  139. data/spec/aws/requests/ec2/detach_volume_spec.rb +43 -0
  140. data/spec/aws/requests/ec2/disassociate_address_spec.rb +35 -0
  141. data/spec/aws/requests/ec2/get_console_output_spec.rb +23 -0
  142. data/spec/aws/requests/ec2/reboot_instances_spec.rb +21 -0
  143. data/spec/aws/requests/ec2/release_address_spec.rb +26 -0
  144. data/spec/aws/requests/ec2/revoke_security_group_ingress_spec.rb +32 -0
  145. data/spec/aws/requests/ec2/run_instances_spec.rb +41 -0
  146. data/spec/aws/requests/ec2/terminate_instances_spec.rb +35 -0
  147. data/spec/aws/requests/s3/copy_object_spec.rb +62 -0
  148. data/spec/aws/requests/s3/delete_bucket_spec.rb +36 -0
  149. data/spec/aws/requests/s3/delete_object_spec.rb +37 -0
  150. data/spec/aws/requests/s3/get_bucket_location_spec.rb +30 -0
  151. data/spec/aws/requests/s3/get_bucket_spec.rb +110 -0
  152. data/spec/aws/requests/s3/get_object_spec.rb +45 -0
  153. data/spec/aws/requests/s3/get_request_payment_spec.rb +30 -0
  154. data/spec/aws/requests/s3/get_service_spec.rb +33 -0
  155. data/spec/aws/requests/s3/head_object_spec.rb +28 -0
  156. data/spec/aws/requests/s3/put_bucket_spec.rb +19 -0
  157. data/spec/aws/requests/s3/put_object_spec.rb +38 -0
  158. data/spec/aws/requests/s3/put_request_payment_spec.rb +29 -0
  159. data/spec/aws/requests/simpledb/batch_put_attributes_spec.rb +22 -0
  160. data/spec/aws/requests/simpledb/create_domain_spec.rb +21 -0
  161. data/spec/aws/requests/simpledb/delete_attributes_spec.rb +22 -0
  162. data/spec/aws/requests/simpledb/delete_domain_spec.rb +21 -0
  163. data/spec/aws/requests/simpledb/domain_metadata_spec.rb +43 -0
  164. data/spec/aws/requests/simpledb/get_attributes_spec.rb +31 -0
  165. data/spec/aws/requests/simpledb/list_domains_spec.rb +30 -0
  166. data/spec/aws/requests/simpledb/put_attributes_spec.rb +22 -0
  167. data/spec/aws/requests/simpledb/select_spec.rb +9 -0
  168. data/spec/lorem.txt +1 -0
  169. data/spec/spec.opts +1 -0
  170. data/spec/spec_helper.rb +66 -0
  171. metadata +309 -0
@@ -0,0 +1,145 @@
1
+ require 'rubygems'
2
+ require 'base64'
3
+ require 'cgi'
4
+ require 'digest/md5'
5
+ require 'hmac-sha1'
6
+ require 'hmac-sha2'
7
+ require 'mime/types'
8
+
9
+ module Fog
10
+ module AWS
11
+
12
+ def self.reload
13
+ current_directory = File.dirname(__FILE__)
14
+ load "#{current_directory}/aws/ec2.rb"
15
+ load "#{current_directory}/aws/simpledb.rb"
16
+ load "#{current_directory}/aws/s3.rb"
17
+ end
18
+
19
+ if Fog.mocking?
20
+ srand(Time.now.to_i)
21
+
22
+ class Mock
23
+
24
+ def self.availability_zone
25
+ "us-east-1" << random_selection('abcd', 1)
26
+ end
27
+
28
+ def self.etag
29
+ hex(32)
30
+ end
31
+
32
+ def self.key_fingerprint
33
+ fingerprint = []
34
+ 20.times do
35
+ fingerprint << hex(2)
36
+ end
37
+ fingerprint.join(':')
38
+ end
39
+
40
+ def self.image_id
41
+ "ami-#{hex(8)}"
42
+ end
43
+
44
+ def self.instance_id
45
+ "i-#{hex(8)}"
46
+ end
47
+
48
+ def self.ip_address
49
+ ip = []
50
+ 4.times do
51
+ ip << numbers(rand(3) + 1).to_i.to_s # remove leading 0
52
+ end
53
+ ip.join('.')
54
+ end
55
+
56
+ def self.kernel_id
57
+ "aki-#{hex(8)}"
58
+ end
59
+
60
+ def self.key_material
61
+ key_material = ['-----BEGIN RSA PRIVATE KEY-----']
62
+ 20.times do
63
+ key_material << base64(76)
64
+ end
65
+ key_material << base64(67) + '='
66
+ key_material << '-----END RSA PRIVATE KEY-----'
67
+ key_material.join("\n")
68
+ end
69
+
70
+ def self.owner_id
71
+ numbers(12)
72
+ end
73
+
74
+ def self.request_id
75
+ request_id = []
76
+ request_id << hex(8)
77
+ 3.times do
78
+ request_id << hex(4)
79
+ end
80
+ request_id << hex(12)
81
+ request_id.join('-')
82
+ end
83
+
84
+ def self.ramdisk_id
85
+ "ari-#{hex(8)}"
86
+ end
87
+
88
+ def self.reservation_id
89
+ "r-#{hex(8)}"
90
+ end
91
+
92
+ def self.snapshot_id
93
+ "snap-#{hex(8)}"
94
+ end
95
+
96
+ def self.volume_id
97
+ "vol-#{hex(8)}"
98
+ end
99
+
100
+ private
101
+
102
+ def self.random_selection(characters, length)
103
+ selection = ''
104
+ length.times do
105
+ position = rand(characters.length)
106
+ selection << characters[position..position]
107
+ end
108
+ selection
109
+ end
110
+
111
+ def self.letters(length)
112
+ random_selection(
113
+ 'abcdefghijklmnopqrstuvwxyz',
114
+ length
115
+ )
116
+ end
117
+
118
+ def self.numbers(length)
119
+ random_selection(
120
+ '0123456789',
121
+ length
122
+ )
123
+ end
124
+
125
+ def self.hex(length)
126
+ random_selection(
127
+ '0123456789abcdef',
128
+ length
129
+ )
130
+ end
131
+
132
+ def self.base64(length)
133
+ random_selection(
134
+ "ABCDEFGHIJKLMNOP QRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
135
+ length
136
+ )
137
+ end
138
+
139
+ end
140
+ end
141
+
142
+ end
143
+ end
144
+
145
+ Fog::AWS.reload
@@ -0,0 +1,173 @@
1
+ module Fog
2
+ module AWS
3
+ class EC2
4
+
5
+ if Fog.mocking?
6
+ def self.data
7
+ @data
8
+ end
9
+ def self.reset_data
10
+ @data = {
11
+ :deleted_at => {},
12
+ :addresses => {},
13
+ :instances => {},
14
+ :key_pairs => {},
15
+ :security_groups => {},
16
+ :snapshots => {},
17
+ :volumes => {}
18
+ }
19
+ end
20
+ end
21
+
22
+ def self.reload
23
+ current_directory = File.dirname(__FILE__)
24
+ load "#{current_directory}/../connection.rb"
25
+ load "#{current_directory}/../parser.rb"
26
+ load "#{current_directory}/../response.rb"
27
+
28
+ parsers_directory = "#{current_directory}/parsers/ec2"
29
+ load "#{parsers_directory}/allocate_address.rb"
30
+ load "#{parsers_directory}/attach_volume.rb"
31
+ load "#{parsers_directory}/basic.rb"
32
+ load "#{parsers_directory}/create_key_pair.rb"
33
+ load "#{parsers_directory}/create_snapshot.rb"
34
+ load "#{parsers_directory}/create_volume.rb"
35
+ load "#{parsers_directory}/describe_addresses.rb"
36
+ load "#{parsers_directory}/describe_availability_zones.rb"
37
+ load "#{parsers_directory}/describe_images.rb"
38
+ load "#{parsers_directory}/describe_instances.rb"
39
+ load "#{parsers_directory}/describe_key_pairs.rb"
40
+ load "#{parsers_directory}/describe_regions.rb"
41
+ load "#{parsers_directory}/describe_security_groups.rb"
42
+ load "#{parsers_directory}/describe_snapshots.rb"
43
+ load "#{parsers_directory}/describe_volumes.rb"
44
+ load "#{parsers_directory}/detach_volume.rb"
45
+ load "#{parsers_directory}/get_console_output.rb"
46
+ load "#{parsers_directory}/run_instances.rb"
47
+ load "#{parsers_directory}/terminate_instances.rb"
48
+
49
+ requests_directory = "#{current_directory}/requests/ec2"
50
+ load "#{requests_directory}/allocate_address.rb"
51
+ load "#{requests_directory}/associate_address.rb"
52
+ load "#{requests_directory}/attach_volume.rb"
53
+ load "#{requests_directory}/authorize_security_group_ingress.rb"
54
+ # TODO: require "#{requests_directory}/bundle_instance.rb"
55
+ # TODO: require "#{requests_directory}/cancel_bundle_task.rb"
56
+ # TODO: require "#{requests_directory}/confirm_product_instance.rb"
57
+ load "#{requests_directory}/create_key_pair.rb"
58
+ load "#{requests_directory}/create_security_group.rb"
59
+ load "#{requests_directory}/create_snapshot.rb"
60
+ load "#{requests_directory}/create_volume.rb"
61
+ load "#{requests_directory}/delete_key_pair.rb"
62
+ load "#{requests_directory}/delete_security_group.rb"
63
+ load "#{requests_directory}/delete_snapshot.rb"
64
+ load "#{requests_directory}/delete_volume.rb"
65
+ # TODO: require "#{requests_directory}/deregister_image.rb"
66
+ load "#{requests_directory}/describe_addresses.rb"
67
+ load "#{requests_directory}/describe_availability_zones.rb"
68
+ # TODO: require "#{requests_directory}/describe_bundle_tasks.rb"
69
+ # TODO: require "#{requests_directory}/describe_image_attribute.rb"
70
+ load "#{requests_directory}/describe_images.rb"
71
+ load "#{requests_directory}/describe_instances.rb"
72
+ load "#{requests_directory}/describe_key_pairs.rb"
73
+ load "#{requests_directory}/describe_regions.rb"
74
+ # TODO: require "#{requests_directory}/describe_reserved_instances.rb"
75
+ # TODO: require "#{requests_directory}/describe_reserved_instances_offerings.rb"
76
+ load "#{requests_directory}/describe_security_groups.rb"
77
+ load "#{requests_directory}/describe_snapshots.rb"
78
+ load "#{requests_directory}/describe_volumes.rb"
79
+ load "#{requests_directory}/detach_volume.rb"
80
+ load "#{requests_directory}/disassociate_address.rb"
81
+ load "#{requests_directory}/get_console_output.rb"
82
+ # TODO: require "#{requests_directory}/modify_image_attribute.rb"
83
+ # TODO: require "#{requests_directory}/monitor_instances.rb"
84
+ # TODO: require "#{requests_directory}/purchase_reserved_instances_offering.rb"
85
+ load "#{requests_directory}/reboot_instances.rb"
86
+ # TODO: require "#{requests_directory}/register_image.rb"
87
+ load "#{requests_directory}/release_address.rb"
88
+ load "#{requests_directory}/revoke_security_group_ingress.rb"
89
+ load "#{requests_directory}/run_instances.rb"
90
+ load "#{requests_directory}/terminate_instances.rb"
91
+ # TODO: require "#{requests_directory}/unmonitor_instances.rb"
92
+
93
+ if Fog.mocking?
94
+ reset_data
95
+ end
96
+
97
+ end
98
+
99
+ # Initialize connection to EC2
100
+ #
101
+ # ==== Notes
102
+ # options parameter must include values for :aws_access_key_id and
103
+ # :aws_secret_access_key in order to create a connection
104
+ #
105
+ # ==== Examples
106
+ # sdb = SimpleDB.new(
107
+ # :aws_access_key_id => your_aws_access_key_id,
108
+ # :aws_secret_access_key => your_aws_secret_access_key
109
+ # )
110
+ #
111
+ # ==== Parameters
112
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
113
+ #
114
+ # ==== Returns
115
+ # * EC2 object with connection to aws.
116
+ def initialize(options={})
117
+ @aws_access_key_id = options[:aws_access_key_id]
118
+ @aws_secret_access_key = options[:aws_secret_access_key]
119
+ @hmac = HMAC::SHA256.new(@aws_secret_access_key)
120
+ @host = options[:host] || 'ec2.amazonaws.com'
121
+ @port = options[:port] || 443
122
+ @scheme = options[:scheme] || 'https'
123
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}")
124
+ end
125
+
126
+ private
127
+
128
+ def indexed_params(name, params)
129
+ indexed, index = {}, 1
130
+ for param in [*params]
131
+ indexed["#{name}.#{index}"] = param
132
+ index += 1
133
+ end
134
+ indexed
135
+ end
136
+
137
+ def request(params, parser)
138
+ params.merge!({
139
+ 'AWSAccessKeyId' => @aws_access_key_id,
140
+ 'SignatureMethod' => 'HmacSHA256',
141
+ 'SignatureVersion' => '2',
142
+ 'Timestamp' => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
143
+ 'Version' => '2009-04-04'
144
+ })
145
+
146
+ body = ''
147
+ for key in params.keys.sort
148
+ unless (value = params[key]).nil?
149
+ body << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
150
+ end
151
+ end
152
+
153
+ string_to_sign = "POST\n#{@host}\n/\n" << body.chop
154
+ hmac = @hmac.update(string_to_sign)
155
+ body << "Signature=#{CGI.escape(Base64.encode64(hmac.digest).chomp!).gsub(/\+/, '%20')}"
156
+
157
+ response = @connection.request({
158
+ :body => body,
159
+ :expects => 200,
160
+ :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
161
+ :host => @host,
162
+ :method => 'POST',
163
+ :parser => parser
164
+ })
165
+
166
+ response
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+
173
+ Fog::AWS::EC2.reload
@@ -0,0 +1,31 @@
1
+ module Fog
2
+ module AWS
3
+ class EC2
4
+
5
+ class Address < Fog::Model
6
+
7
+ attr_accessor :instance_id,
8
+ :public_ip
9
+
10
+ def initialize(attributes = {})
11
+ remap_attributes(attributes, {
12
+ 'instanceId' => :instance_id,
13
+ 'publicIp' => :public_ip
14
+ })
15
+ super
16
+ end
17
+
18
+ def delete
19
+ connection.release_address(@public_ip)
20
+ end
21
+
22
+ def save
23
+ data = connection.allocate_address
24
+ @public_ip = data.body['publicIp']
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module AWS
3
+ class EC2
4
+
5
+ def addresses
6
+ Fog::AWS::EC2::Addresses.new(:connection => self)
7
+ end
8
+
9
+ class Addresses < Fog::Collection
10
+
11
+ def all(public_ip = [])
12
+ data = connection.describe_addresses(public_ip).body
13
+ addresses = []
14
+ data['addressesSet'].each do |address|
15
+ addresses << Fog::AWS::EC2::Address.new({
16
+ :connection => connection
17
+ }.merge!(address))
18
+ end
19
+ addresses
20
+ end
21
+
22
+ def create
23
+ address = new
24
+ address.save
25
+ address
26
+ end
27
+
28
+ def new
29
+ Fog::AWS::S3::Address.new(:connection => connection)
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module AWS
3
+ class EC2
4
+
5
+ class KeyPair < Fog::Model
6
+
7
+ attr_accessor :fingerprint,
8
+ :material,
9
+ :name
10
+
11
+ def initialize(attributes = {})
12
+ remap_attributes(attributes, {
13
+ 'keyFingerprint' => :fingerprint,
14
+ 'keyMaterial' => :material,
15
+ 'keyName' => :name
16
+ })
17
+ super
18
+ end
19
+
20
+ def delete
21
+ connection.delete_key_pair(@name)
22
+ end
23
+
24
+ def save
25
+ data = connection.create_key_pair(@name).body
26
+ new_attributes = data.reject {|key,value| !['keyFingerprint', 'keyMaterial', 'keyName'].include?(key)}
27
+ update_attributes(new_attributes)
28
+ data
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module AWS
3
+ class EC2
4
+
5
+ def key_pairs
6
+ Fog::AWS::EC2::KeyPairs.new(:connection => self)
7
+ end
8
+
9
+ class KeyPairs < Fog::Collection
10
+
11
+ def all(key_name = [])
12
+ data = connection.describe_key_pairs(key_name).body
13
+ key_pairs = []
14
+ data['keySet'].each do |key|
15
+ key_pairs << Fog::AWS::EC2::KeyPair.new({
16
+ :connection => connection
17
+ }.merge!(key))
18
+ end
19
+ key_pairs
20
+ end
21
+
22
+ def create(attributes = {})
23
+ bucket = new(attributes)
24
+ bucket.save
25
+ bucket
26
+ end
27
+
28
+ def new(attributes = {})
29
+ Fog::AWS::EC2::KeyPair.new(attributes.merge!(:connection => connection))
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
36
+ end