fog 0.0.9 → 0.0.10

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 (54) hide show
  1. data/README.rdoc +79 -2
  2. data/VERSION +1 -1
  3. data/fog.gemspec +28 -6
  4. data/lib/fog.rb +10 -7
  5. data/lib/fog/aws.rb +35 -9
  6. data/lib/fog/aws/ec2.rb +82 -69
  7. data/lib/fog/aws/models/ec2/address.rb +23 -1
  8. data/lib/fog/aws/models/ec2/addresses.rb +26 -2
  9. data/lib/fog/aws/models/ec2/instance.rb +135 -0
  10. data/lib/fog/aws/models/ec2/instances.rb +56 -0
  11. data/lib/fog/aws/models/ec2/key_pair.rb +17 -2
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +29 -3
  13. data/lib/fog/aws/models/ec2/security_group.rb +41 -0
  14. data/lib/fog/aws/models/ec2/security_groups.rb +62 -0
  15. data/lib/fog/aws/models/ec2/snapshot.rb +12 -12
  16. data/lib/fog/aws/models/ec2/snapshots.rb +43 -21
  17. data/lib/fog/aws/models/ec2/volume.rb +21 -10
  18. data/lib/fog/aws/models/ec2/volumes.rb +30 -4
  19. data/lib/fog/aws/models/s3/buckets.rb +5 -8
  20. data/lib/fog/aws/models/s3/objects.rb +4 -7
  21. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +63 -27
  22. data/lib/fog/aws/requests/ec2/create_security_group.rb +3 -3
  23. data/lib/fog/aws/requests/ec2/describe_images.rb +65 -35
  24. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -0
  25. data/lib/fog/aws/requests/ec2/get_console_output.rb +52 -21
  26. data/lib/fog/aws/requests/ec2/reboot_instances.rb +52 -19
  27. data/lib/fog/aws/requests/ec2/revoke_security_group_ingress.rb +63 -27
  28. data/lib/fog/aws/requests/ec2/run_instances.rb +1 -1
  29. data/lib/fog/aws/requests/ec2/terminate_instances.rb +14 -10
  30. data/lib/fog/aws/s3.rb +31 -35
  31. data/lib/fog/aws/simpledb.rb +19 -22
  32. data/lib/fog/collection.rb +3 -3
  33. data/lib/fog/connection.rb +2 -2
  34. data/lib/fog/errors.rb +1 -1
  35. data/lib/fog/model.rb +3 -3
  36. data/spec/aws/models/ec2/address_spec.rb +84 -0
  37. data/spec/aws/models/ec2/addresses_spec.rb +70 -0
  38. data/spec/aws/models/ec2/key_pair_spec.rb +84 -0
  39. data/spec/aws/models/ec2/key_pairs_spec.rb +71 -0
  40. data/spec/aws/models/ec2/security_group_spec.rb +84 -0
  41. data/spec/aws/models/ec2/security_groups_spec.rb +71 -0
  42. data/spec/aws/models/ec2/snapshot_spec.rb +93 -0
  43. data/spec/aws/models/ec2/snapshots_spec.rb +74 -0
  44. data/spec/aws/models/ec2/volume_spec.rb +84 -0
  45. data/spec/aws/models/ec2/volumes_spec.rb +70 -0
  46. data/spec/aws/models/s3/bucket_spec.rb +0 -1
  47. data/spec/aws/models/s3/buckets_spec.rb +2 -11
  48. data/spec/aws/requests/ec2/describe_security_groups_spec.rb +1 -1
  49. data/spec/aws/requests/ec2/get_console_output_spec.rb +9 -0
  50. data/spec/aws/requests/ec2/reboot_instances_spec.rb +11 -2
  51. data/spec/aws/requests/ec2/run_instances_spec.rb +1 -1
  52. data/spec/spec_helper.rb +1 -1
  53. metadata +26 -4
  54. data/LICENSE +0 -20
data/README.rdoc CHANGED
@@ -1,7 +1,84 @@
1
1
  = fog
2
2
 
3
- Description goes here.
3
+ fog helps you interact with cloud services. fog is a work in progress.
4
+
5
+ == Features
6
+
7
+ * Low level api calls
8
+ * Model level abstractions
9
+ * Mocks
10
+
11
+ == Supports
12
+
13
+ * AWS EC2 (missing security group mocking, just starting on models)
14
+ * AWS S3
15
+ * AWS SimpleDB (missing models)
16
+
17
+ == Synopsis
18
+
19
+ require 'fog'
20
+
21
+ # turn on mocking (if desired)
22
+ Fog.mock!
23
+
24
+ # initialize a connection
25
+ s3 = Fog::AWS::S3.new(
26
+ :aws_access_key_id => id,
27
+ :aws_secret_access_key => key
28
+ )
29
+
30
+ # low level requests
31
+ s3.put_bucket('bucketname')
32
+ s3.put_object('bucketname', 'objectname', 'objectbody')
33
+
34
+ s3.get_bucket('bucketname')
35
+ s3.get_object('bucketname', 'objectname')
36
+
37
+ s3.delete_object('bucketname', 'objectname')
38
+ s3.delete_bucket('bucketname')
39
+
40
+ # models
41
+ bucket = s3.buckets.create(:name => 'bucketname')
42
+ bucket.objects.create(:name => 'objectname', :body => 'objectbody')
43
+
44
+ bucket = s3.buckets.get('bucketname')
45
+ object = bucket.objects.get('objectname')
46
+
47
+ object.destroy
48
+ bucket.destroy
49
+
50
+ == Requirements
51
+
52
+ * ruby 1.8 or 1.9
53
+ * ruby-hmac
54
+ * mime-types
55
+ * nokogiri
56
+
57
+ == Install
58
+
59
+ sudo gem install fog
4
60
 
5
61
  == Copyright
6
62
 
7
- Copyright (c) 2009 Wesley Beary. See LICENSE for details.
63
+ (The MIT License)
64
+
65
+ Copyright (c) 2009 {geemus (Wesley Beary)}[http://github.com/geemus]
66
+
67
+ Permission is hereby granted, free of charge, to any person obtaining
68
+ a copy of this software and associated documentation files (the
69
+ "Software"), to deal in the Software without restriction, including
70
+ without limitation the rights to use, copy, modify, merge, publish,
71
+ distribute, sublicense, and/or sell copies of the Software, and to
72
+ permit persons to whom the Software is furnished to do so, subject to
73
+ the following conditions:
74
+
75
+ The above copyright notice and this permission notice shall be
76
+ included in all copies or substantial portions of the Software.
77
+
78
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
79
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
80
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
81
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
82
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
83
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
84
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
data/fog.gemspec CHANGED
@@ -5,21 +5,19 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fog}
8
- s.version = "0.0.9"
8
+ s.version = "0.0.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wesley Beary"]
12
- s.date = %q{2009-09-10}
12
+ s.date = %q{2009-09-30}
13
13
  s.description = %q{brings clouds to you}
14
14
  s.email = %q{me@geemus.com}
15
15
  s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
16
+ "README.rdoc"
18
17
  ]
19
18
  s.files = [
20
19
  ".document",
21
20
  ".gitignore",
22
- "LICENSE",
23
21
  "README.rdoc",
24
22
  "Rakefile",
25
23
  "VERSION",
@@ -34,8 +32,12 @@ Gem::Specification.new do |s|
34
32
  "lib/fog/aws/ec2.rb",
35
33
  "lib/fog/aws/models/ec2/address.rb",
36
34
  "lib/fog/aws/models/ec2/addresses.rb",
35
+ "lib/fog/aws/models/ec2/instance.rb",
36
+ "lib/fog/aws/models/ec2/instances.rb",
37
37
  "lib/fog/aws/models/ec2/key_pair.rb",
38
38
  "lib/fog/aws/models/ec2/key_pairs.rb",
39
+ "lib/fog/aws/models/ec2/security_group.rb",
40
+ "lib/fog/aws/models/ec2/security_groups.rb",
39
41
  "lib/fog/aws/models/ec2/snapshot.rb",
40
42
  "lib/fog/aws/models/ec2/snapshots.rb",
41
43
  "lib/fog/aws/models/ec2/volume.rb",
@@ -132,6 +134,16 @@ Gem::Specification.new do |s|
132
134
  "lib/fog/model.rb",
133
135
  "lib/fog/parser.rb",
134
136
  "lib/fog/response.rb",
137
+ "spec/aws/models/ec2/address_spec.rb",
138
+ "spec/aws/models/ec2/addresses_spec.rb",
139
+ "spec/aws/models/ec2/key_pair_spec.rb",
140
+ "spec/aws/models/ec2/key_pairs_spec.rb",
141
+ "spec/aws/models/ec2/security_group_spec.rb",
142
+ "spec/aws/models/ec2/security_groups_spec.rb",
143
+ "spec/aws/models/ec2/snapshot_spec.rb",
144
+ "spec/aws/models/ec2/snapshots_spec.rb",
145
+ "spec/aws/models/ec2/volume_spec.rb",
146
+ "spec/aws/models/ec2/volumes_spec.rb",
135
147
  "spec/aws/models/s3/bucket_spec.rb",
136
148
  "spec/aws/models/s3/buckets_spec.rb",
137
149
  "spec/aws/models/s3/object_spec.rb",
@@ -198,7 +210,17 @@ Gem::Specification.new do |s|
198
210
  s.rubygems_version = %q{1.3.5}
199
211
  s.summary = %q{fog = clouds + you}
200
212
  s.test_files = [
201
- "spec/aws/models/s3/bucket_spec.rb",
213
+ "spec/aws/models/ec2/address_spec.rb",
214
+ "spec/aws/models/ec2/addresses_spec.rb",
215
+ "spec/aws/models/ec2/key_pair_spec.rb",
216
+ "spec/aws/models/ec2/key_pairs_spec.rb",
217
+ "spec/aws/models/ec2/security_group_spec.rb",
218
+ "spec/aws/models/ec2/security_groups_spec.rb",
219
+ "spec/aws/models/ec2/snapshot_spec.rb",
220
+ "spec/aws/models/ec2/snapshots_spec.rb",
221
+ "spec/aws/models/ec2/volume_spec.rb",
222
+ "spec/aws/models/ec2/volumes_spec.rb",
223
+ "spec/aws/models/s3/bucket_spec.rb",
202
224
  "spec/aws/models/s3/buckets_spec.rb",
203
225
  "spec/aws/models/s3/object_spec.rb",
204
226
  "spec/aws/models/s3/objects_spec.rb",
data/lib/fog.rb CHANGED
@@ -1,11 +1,14 @@
1
+ __DIR__ = File.dirname(__FILE__)
2
+
3
+ $LOAD_PATH.unshift __DIR__ unless
4
+ $LOAD_PATH.include?(__DIR__) ||
5
+ $LOAD_PATH.include?(File.expand_path(__DIR__))
6
+
1
7
  module Fog
2
8
 
3
- def self.mocking=(new_mocking)
4
- old_mocking = @mocking
5
- @mocking = new_mocking
6
- unless old_mocking == new_mocking
7
- self.reload
8
- end
9
+ def self.mock!
10
+ @mocking = true
11
+ self.reload
9
12
  end
10
13
 
11
14
  def self.mocking?
@@ -13,7 +16,7 @@ module Fog
13
16
  end
14
17
 
15
18
  def self.reload
16
- load "#{File.dirname(__FILE__)}/fog/aws.rb"
19
+ load "fog/aws.rb"
17
20
  end
18
21
 
19
22
  end
data/lib/fog/aws.rb CHANGED
@@ -10,10 +10,9 @@ module Fog
10
10
  module AWS
11
11
 
12
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"
13
+ load "fog/aws/ec2.rb"
14
+ load "fog/aws/simpledb.rb"
15
+ load "fog/aws/s3.rb"
17
16
  end
18
17
 
19
18
  if Fog.mocking?
@@ -29,10 +28,37 @@ module Fog
29
28
  sprintf("%0.10f", rand / 100).to_f
30
29
  end
31
30
 
31
+ def self.console_output
32
+ 'This is my console. There are many like it, but this one is mine. My console is my best friend. It is my life. I must master it as I master my life. My console, without me, is useless. Without my console, I am useless.'
33
+ end
34
+
32
35
  def self.etag
33
36
  hex(32)
34
37
  end
35
38
 
39
+ def self.image
40
+ path = []
41
+ (rand(3) + 2).times do
42
+ path << letters(rand(9) + 8)
43
+ end
44
+ {
45
+ "imageOwnerId" => letters(rand(5) + 4),
46
+ "productCodes" => [],
47
+ "kernelId" => kernel_id,
48
+ "ramdiskId" => ramdisk_id,
49
+ "imageState" => "available",
50
+ "imageId" => image_id,
51
+ "architecture" => "i386",
52
+ "isPublic" => true,
53
+ "imageLocation" => path.join('/'),
54
+ "imageType" => "machine"
55
+ }
56
+ end
57
+
58
+ def self.image_id
59
+ "ami-#{hex(8)}"
60
+ end
61
+
36
62
  def self.key_fingerprint
37
63
  fingerprint = []
38
64
  20.times do
@@ -75,6 +101,10 @@ module Fog
75
101
  numbers(12)
76
102
  end
77
103
 
104
+ def self.ramdisk_id
105
+ "ari-#{hex(8)}"
106
+ end
107
+
78
108
  def self.request_id
79
109
  request_id = []
80
110
  request_id << hex(8)
@@ -85,10 +115,6 @@ module Fog
85
115
  request_id.join('-')
86
116
  end
87
117
 
88
- def self.ramdisk_id
89
- "ari-#{hex(8)}"
90
- end
91
-
92
118
  def self.reservation_id
93
119
  "r-#{hex(8)}"
94
120
  end
@@ -135,7 +161,7 @@ module Fog
135
161
 
136
162
  def self.base64(length)
137
163
  random_selection(
138
- "ABCDEFGHIJKLMNOP QRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
164
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
139
165
  length
140
166
  )
141
167
  end
data/lib/fog/aws/ec2.rb CHANGED
@@ -20,75 +20,88 @@ module Fog
20
20
  end
21
21
 
22
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"
23
+ load "fog/collection.rb"
24
+ load "fog/connection.rb"
25
+ load "fog/model.rb"
26
+ load "fog/parser.rb"
27
+ load "fog/response.rb"
28
+
29
+ load "fog/aws/models/ec2/address.rb"
30
+ load "fog/aws/models/ec2/addresses.rb"
31
+ load "fog/aws/models/ec2/key_pair.rb"
32
+ load "fog/aws/models/ec2/key_pairs.rb"
33
+ load "fog/aws/models/ec2/security_group.rb"
34
+ load "fog/aws/models/ec2/security_groups.rb"
35
+ load "fog/aws/models/ec2/snapshot.rb"
36
+ load "fog/aws/models/ec2/snapshots.rb"
37
+ load "fog/aws/models/ec2/volume.rb"
38
+ load "fog/aws/models/ec2/volumes.rb"
39
+
40
+ load "fog/aws/parsers/ec2/allocate_address.rb"
41
+ load "fog/aws/parsers/ec2/attach_volume.rb"
42
+ load "fog/aws/parsers/ec2/basic.rb"
43
+ load "fog/aws/parsers/ec2/create_key_pair.rb"
44
+ load "fog/aws/parsers/ec2/create_snapshot.rb"
45
+ load "fog/aws/parsers/ec2/create_volume.rb"
46
+ load "fog/aws/parsers/ec2/describe_addresses.rb"
47
+ load "fog/aws/parsers/ec2/describe_availability_zones.rb"
48
+ load "fog/aws/parsers/ec2/describe_images.rb"
49
+ load "fog/aws/parsers/ec2/describe_instances.rb"
50
+ load "fog/aws/parsers/ec2/describe_key_pairs.rb"
51
+ load "fog/aws/parsers/ec2/describe_regions.rb"
52
+ load "fog/aws/parsers/ec2/describe_security_groups.rb"
53
+ load "fog/aws/parsers/ec2/describe_snapshots.rb"
54
+ load "fog/aws/parsers/ec2/describe_volumes.rb"
55
+ load "fog/aws/parsers/ec2/detach_volume.rb"
56
+ load "fog/aws/parsers/ec2/get_console_output.rb"
57
+ load "fog/aws/parsers/ec2/run_instances.rb"
58
+ load "fog/aws/parsers/ec2/terminate_instances.rb"
59
+
60
+ load "fog/aws/requests/ec2/allocate_address.rb"
61
+ load "fog/aws/requests/ec2/associate_address.rb"
62
+ load "fog/aws/requests/ec2/attach_volume.rb"
63
+ load "fog/aws/requests/ec2/authorize_security_group_ingress.rb"
64
+ # TODO: require "fog/aws/requests/ec2/bundle_instance.rb"
65
+ # TODO: require "fog/aws/requests/ec2/cancel_bundle_task.rb"
66
+ # TODO: require "fog/aws/requests/ec2/confirm_product_instance.rb"
67
+ load "fog/aws/requests/ec2/create_key_pair.rb"
68
+ load "fog/aws/requests/ec2/create_security_group.rb"
69
+ load "fog/aws/requests/ec2/create_snapshot.rb"
70
+ load "fog/aws/requests/ec2/create_volume.rb"
71
+ load "fog/aws/requests/ec2/delete_key_pair.rb"
72
+ load "fog/aws/requests/ec2/delete_security_group.rb"
73
+ load "fog/aws/requests/ec2/delete_snapshot.rb"
74
+ load "fog/aws/requests/ec2/delete_volume.rb"
75
+ # TODO: require "fog/aws/requests/ec2/deregister_image.rb"
76
+ load "fog/aws/requests/ec2/describe_addresses.rb"
77
+ load "fog/aws/requests/ec2/describe_availability_zones.rb"
78
+ # TODO: require "fog/aws/requests/ec2/describe_bundle_tasks.rb"
79
+ # TODO: require "fog/aws/requests/ec2/describe_image_attribute.rb"
80
+ load "fog/aws/requests/ec2/describe_images.rb"
81
+ load "fog/aws/requests/ec2/describe_instances.rb"
82
+ load "fog/aws/requests/ec2/describe_key_pairs.rb"
83
+ load "fog/aws/requests/ec2/describe_regions.rb"
84
+ # TODO: require "fog/aws/requests/ec2/describe_reserved_instances.rb"
85
+ # TODO: require "fog/aws/requests/ec2/describe_reserved_instances_offerings.rb"
86
+ load "fog/aws/requests/ec2/describe_security_groups.rb"
87
+ load "fog/aws/requests/ec2/describe_snapshots.rb"
88
+ load "fog/aws/requests/ec2/describe_volumes.rb"
89
+ load "fog/aws/requests/ec2/detach_volume.rb"
90
+ load "fog/aws/requests/ec2/disassociate_address.rb"
91
+ load "fog/aws/requests/ec2/get_console_output.rb"
92
+ # TODO: require "fog/aws/requests/ec2/modify_image_attribute.rb"
93
+ # TODO: require "fog/aws/requests/ec2/modify_snapshot_attribute.rb"
94
+ # TODO: require "fog/aws/requests/ec2/monitor_instances.rb"
95
+ # TODO: require "fog/aws/requests/ec2/purchase_reserved_instances_offering.rb"
96
+ load "fog/aws/requests/ec2/reboot_instances.rb"
97
+ # TODO: require "fog/aws/requests/ec2/register_image.rb"
98
+ load "fog/aws/requests/ec2/release_address.rb"
99
+ # TODO: require "fog/aws/requests/ec2/reset_image_attributes.rb"
100
+ # TODO: require "fog/aws/requests/ec2/reset_snapshot_attributes.rb"
101
+ load "fog/aws/requests/ec2/revoke_security_group_ingress.rb"
102
+ load "fog/aws/requests/ec2/run_instances.rb"
103
+ load "fog/aws/requests/ec2/terminate_instances.rb"
104
+ # TODO: require "fog/aws/requests/ec2/unmonitor_instances.rb"
92
105
 
93
106
  if Fog.mocking?
94
107
  reset_data
@@ -7,17 +7,39 @@ module Fog
7
7
  attribute :instance_id, 'instanceId'
8
8
  attribute :public_ip, 'publicIp'
9
9
 
10
- def delete
10
+ def addresses
11
+ @addresses
12
+ end
13
+
14
+ def initialize(new_attributes = {})
15
+ new_attributes = {
16
+ :instance_id => ''
17
+ }.merge!(new_attributes)
18
+ super(new_attributes)
19
+ end
20
+
21
+ def destroy
11
22
  connection.release_address(@public_ip)
12
23
  true
13
24
  end
14
25
 
26
+ def reload
27
+ new_attributes = addresses.get(@public_ip).attributes
28
+ merge_attributes(new_attributes)
29
+ end
30
+
15
31
  def save
16
32
  data = connection.allocate_address
17
33
  @public_ip = data.body['publicIp']
18
34
  true
19
35
  end
20
36
 
37
+ private
38
+
39
+ def addresses=(new_addresses)
40
+ @addresses = new_addresses
41
+ end
42
+
21
43
  end
22
44
 
23
45
  end