fog 0.3.7 → 0.3.8

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 (201) hide show
  1. data/Gemfile.lock +6 -6
  2. data/README.rdoc +7 -1
  3. data/bin/fog +4 -3
  4. data/fog.gemspec +39 -24
  5. data/lib/fog.rb +4 -12
  6. data/lib/fog/aws.rb +14 -5
  7. data/lib/fog/aws/compute.rb +26 -9
  8. data/lib/fog/aws/elb.rb +3 -2
  9. data/lib/fog/aws/models/compute/address.rb +2 -1
  10. data/lib/fog/aws/models/compute/addresses.rb +11 -9
  11. data/lib/fog/aws/models/compute/flavor.rb +1 -1
  12. data/lib/fog/aws/models/compute/flavors.rb +13 -11
  13. data/lib/fog/aws/models/compute/image.rb +2 -1
  14. data/lib/fog/aws/models/compute/images.rb +7 -9
  15. data/lib/fog/aws/models/compute/key_pair.rb +1 -1
  16. data/lib/fog/aws/models/compute/key_pairs.rb +10 -8
  17. data/lib/fog/aws/models/compute/security_group.rb +1 -1
  18. data/lib/fog/aws/models/compute/security_groups.rb +11 -9
  19. data/lib/fog/aws/models/compute/server.rb +10 -3
  20. data/lib/fog/aws/models/compute/servers.rb +14 -8
  21. data/lib/fog/aws/models/compute/snapshot.rb +3 -2
  22. data/lib/fog/aws/models/compute/snapshots.rb +11 -16
  23. data/lib/fog/aws/models/compute/tag.rb +36 -0
  24. data/lib/fog/aws/models/compute/tags.rb +34 -0
  25. data/lib/fog/aws/models/compute/volume.rb +11 -10
  26. data/lib/fog/aws/models/compute/volumes.rb +11 -9
  27. data/lib/fog/aws/models/storage/directories.rb +1 -1
  28. data/lib/fog/aws/models/storage/directory.rb +1 -1
  29. data/lib/fog/aws/models/storage/file.rb +3 -2
  30. data/lib/fog/aws/models/storage/files.rb +1 -7
  31. data/lib/fog/aws/parsers/compute/describe_availability_zones.rb +4 -2
  32. data/lib/fog/aws/parsers/compute/describe_images.rb +23 -13
  33. data/lib/fog/aws/parsers/compute/describe_instances.rb +34 -8
  34. data/lib/fog/aws/parsers/compute/describe_security_groups.rb +4 -3
  35. data/lib/fog/aws/parsers/compute/describe_snapshots.rb +33 -13
  36. data/lib/fog/aws/parsers/compute/describe_tags.rb +30 -0
  37. data/lib/fog/aws/parsers/compute/describe_volumes.rb +17 -3
  38. data/lib/fog/aws/parsers/compute/run_instances.rb +4 -4
  39. data/lib/fog/aws/parsers/storage/get_bucket.rb +1 -1
  40. data/lib/fog/aws/parsers/storage/get_bucket_logging.rb +1 -1
  41. data/lib/fog/aws/parsers/storage/get_bucket_object_versions.rb +3 -3
  42. data/lib/fog/aws/requests/compute/create_snapshot.rb +1 -0
  43. data/lib/fog/aws/requests/compute/create_tags.rb +78 -0
  44. data/lib/fog/aws/requests/compute/delete_tags.rb +45 -0
  45. data/lib/fog/aws/requests/compute/describe_addresses.rb +27 -19
  46. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +31 -25
  47. data/lib/fog/aws/requests/compute/describe_images.rb +11 -18
  48. data/lib/fog/aws/requests/compute/describe_instances.rb +125 -53
  49. data/lib/fog/aws/requests/compute/describe_key_pairs.rb +29 -21
  50. data/lib/fog/aws/requests/compute/describe_regions.rb +28 -23
  51. data/lib/fog/aws/requests/compute/describe_reserved_instances.rb +8 -4
  52. data/lib/fog/aws/requests/compute/describe_security_groups.rb +48 -19
  53. data/lib/fog/aws/requests/compute/describe_snapshots.rb +72 -35
  54. data/lib/fog/aws/requests/compute/describe_tags.rb +42 -0
  55. data/lib/fog/aws/requests/compute/describe_volumes.rb +67 -36
  56. data/lib/fog/aws/requests/compute/run_instances.rb +10 -3
  57. data/lib/fog/aws/simpledb.rb +3 -1
  58. data/lib/fog/aws/storage.rb +17 -8
  59. data/lib/fog/bluebox/models/compute/flavor.rb +1 -1
  60. data/lib/fog/bluebox/models/compute/flavors.rb +1 -1
  61. data/lib/fog/bluebox/models/compute/image.rb +1 -1
  62. data/lib/fog/bluebox/models/compute/images.rb +1 -1
  63. data/lib/fog/bluebox/models/compute/server.rb +8 -6
  64. data/lib/fog/bluebox/models/compute/servers.rb +1 -1
  65. data/lib/fog/bluebox/requests/compute/get_blocks.rb +1 -1
  66. data/lib/fog/core.rb +11 -0
  67. data/lib/fog/{attributes.rb → core/attributes.rb} +0 -0
  68. data/lib/fog/{bin.rb → core/bin.rb} +1 -1
  69. data/lib/fog/{collection.rb → core/collection.rb} +4 -0
  70. data/lib/fog/{connection.rb → core/connection.rb} +0 -0
  71. data/lib/fog/{credentials.rb → core/credentials.rb} +2 -0
  72. data/lib/fog/{deprecation.rb → core/deprecation.rb} +0 -0
  73. data/lib/fog/{errors.rb → core/errors.rb} +0 -0
  74. data/lib/fog/{hmac.rb → core/hmac.rb} +0 -0
  75. data/lib/fog/{model.rb → core/model.rb} +0 -0
  76. data/lib/fog/{parser.rb → core/parser.rb} +0 -0
  77. data/lib/fog/{provider.rb → core/provider.rb} +0 -0
  78. data/lib/fog/{service.rb → core/service.rb} +1 -0
  79. data/lib/fog/{ssh.rb → core/ssh.rb} +7 -7
  80. data/lib/fog/go_grid.rb +1 -1
  81. data/lib/fog/go_grid/compute.rb +6 -1
  82. data/lib/fog/go_grid/models/compute/image.rb +60 -0
  83. data/lib/fog/go_grid/models/compute/images.rb +33 -0
  84. data/lib/fog/go_grid/models/compute/server.rb +56 -0
  85. data/lib/fog/go_grid/models/compute/servers.rb +35 -0
  86. data/lib/fog/go_grid/requests/compute/grid_image_get.rb +41 -0
  87. data/lib/fog/go_grid/requests/compute/grid_image_list.rb +6 -1
  88. data/lib/fog/go_grid/requests/compute/grid_server_power.rb +2 -2
  89. data/lib/fog/google/models/storage/directories.rb +1 -1
  90. data/lib/fog/google/models/storage/directory.rb +1 -1
  91. data/lib/fog/google/models/storage/file.rb +3 -2
  92. data/lib/fog/google/models/storage/files.rb +1 -7
  93. data/lib/fog/google/parsers/storage/get_bucket.rb +1 -1
  94. data/lib/fog/linode/requests/compute/avail_linodeplans.rb +2 -2
  95. data/lib/fog/local/models/storage/directories.rb +1 -1
  96. data/lib/fog/local/models/storage/directory.rb +1 -1
  97. data/lib/fog/local/models/storage/file.rb +2 -2
  98. data/lib/fog/local/models/storage/files.rb +2 -5
  99. data/lib/fog/local/storage.rb +1 -1
  100. data/lib/fog/new_servers/compute.rb +1 -1
  101. data/lib/fog/rackspace/models/compute/flavor.rb +1 -3
  102. data/lib/fog/rackspace/models/compute/flavors.rb +1 -1
  103. data/lib/fog/rackspace/models/compute/image.rb +2 -1
  104. data/lib/fog/rackspace/models/compute/images.rb +1 -1
  105. data/lib/fog/rackspace/models/compute/server.rb +12 -11
  106. data/lib/fog/rackspace/models/compute/servers.rb +1 -1
  107. data/lib/fog/rackspace/models/storage/directories.rb +1 -1
  108. data/lib/fog/rackspace/models/storage/directory.rb +1 -1
  109. data/lib/fog/rackspace/models/storage/file.rb +4 -4
  110. data/lib/fog/rackspace/models/storage/files.rb +1 -1
  111. data/lib/fog/rackspace/requests/compute/create_image.rb +2 -2
  112. data/lib/fog/rackspace/requests/compute/delete_image.rb +1 -1
  113. data/lib/fog/rackspace/requests/compute/delete_server.rb +1 -1
  114. data/lib/fog/rackspace/requests/compute/get_server_details.rb +1 -1
  115. data/lib/fog/rackspace/requests/compute/list_addresses.rb +1 -1
  116. data/lib/fog/rackspace/requests/compute/list_images_detail.rb +2 -2
  117. data/lib/fog/rackspace/requests/compute/list_private_addresses.rb +1 -1
  118. data/lib/fog/rackspace/requests/compute/list_public_addresses.rb +1 -1
  119. data/lib/fog/rackspace/requests/compute/update_server.rb +1 -1
  120. data/lib/fog/rackspace/requests/storage/put_object.rb +4 -3
  121. data/lib/fog/slicehost/models/compute/flavor.rb +1 -1
  122. data/lib/fog/slicehost/models/compute/flavors.rb +1 -1
  123. data/lib/fog/slicehost/models/compute/image.rb +1 -1
  124. data/lib/fog/slicehost/models/compute/images.rb +1 -1
  125. data/lib/fog/slicehost/models/compute/server.rb +3 -1
  126. data/lib/fog/slicehost/models/compute/servers.rb +1 -1
  127. data/lib/fog/terremark/ecloud.rb +34 -33
  128. data/lib/fog/terremark/models/shared/address.rb +1 -1
  129. data/lib/fog/terremark/models/shared/network.rb +1 -1
  130. data/lib/fog/terremark/models/shared/server.rb +1 -1
  131. data/lib/fog/terremark/models/shared/servers.rb +1 -1
  132. data/lib/fog/terremark/models/shared/task.rb +1 -1
  133. data/lib/fog/terremark/models/shared/tasks.rb +1 -1
  134. data/lib/fog/terremark/models/shared/vdc.rb +1 -1
  135. data/lib/fog/terremark/parser.rb +1 -0
  136. data/lib/fog/terremark/vcloud.rb +4 -4
  137. data/lib/fog/vcloud.rb +15 -7
  138. data/lib/fog/vcloud/terremark/ecloud.rb +15 -3
  139. data/lib/fog/vcloud/terremark/ecloud/models/firewall_acls.rb +1 -1
  140. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +1 -1
  141. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +1 -1
  142. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +1 -1
  143. data/lib/fog/vcloud/terremark/ecloud/models/nodes.rb +1 -1
  144. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
  145. data/lib/fog/vcloud/terremark/ecloud/models/servers.rb +1 -1
  146. data/lib/fog/vcloud/terremark/ecloud/models/tasks.rb +1 -1
  147. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +1 -1
  148. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +55 -49
  149. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +19 -15
  150. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +8 -1
  151. data/lib/fog/vcloud/terremark/ecloud/requests/configure_node.rb +17 -12
  152. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog.rb +29 -1
  153. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog_item.rb +38 -2
  154. data/lib/fog/vcloud/terremark/ecloud/requests/get_customization_options.rb +8 -2
  155. data/lib/fog/vcloud/terremark/ecloud/requests/instantiate_vapp_template.rb +46 -4
  156. data/spec/aws/models/compute/server_spec.rb +2 -0
  157. data/spec/aws/requests/simpledb/select_spec.rb +1 -0
  158. data/spec/spec_helper.rb +1 -1
  159. data/spec/vcloud/spec_helper.rb +1 -1
  160. data/spec/vcloud/terremark/ecloud/requests/get_catalog_item_spec.rb +62 -0
  161. data/spec/vcloud/terremark/ecloud/requests/get_catalog_spec.rb +44 -0
  162. data/spec/vcloud/terremark/ecloud/requests/get_customization_options_spec.rb +39 -0
  163. data/spec/vcloud/terremark/ecloud/requests/instantiate_vapp_template_spec.rb +73 -0
  164. data/tests/aws/requests/compute/address_tests.rb +2 -6
  165. data/tests/aws/requests/compute/availability_zone_tests.rb +3 -10
  166. data/tests/aws/requests/compute/image_tests.rb +4 -9
  167. data/tests/aws/requests/compute/instance_tests.rb +7 -8
  168. data/tests/aws/requests/compute/key_pair_tests.rb +2 -6
  169. data/tests/aws/requests/compute/region_tests.rb +2 -9
  170. data/tests/aws/requests/compute/security_group_tests.rb +3 -7
  171. data/tests/aws/requests/compute/snapshot_tests.rb +4 -7
  172. data/tests/aws/requests/compute/tag_tests.rb +49 -0
  173. data/tests/aws/requests/compute/volume_tests.rb +2 -6
  174. data/tests/aws/requests/storage/bucket_tests.rb +48 -0
  175. data/tests/aws/requests/storage/object_tests.rb +63 -0
  176. data/tests/bluebox/requests/compute/block_tests.rb +24 -11
  177. data/tests/bluebox/requests/compute/product_tests.rb +3 -0
  178. data/tests/bluebox/requests/compute/template_tests.rb +3 -0
  179. data/tests/go_grid/helper.rb +0 -0
  180. data/tests/go_grid/requests/compute/image_tests.rb +0 -0
  181. data/tests/helper.rb +5 -1
  182. data/tests/linode/requests/compute/datacenter_tests.rb +1 -0
  183. data/tests/linode/requests/compute/distribution_tests.rb +2 -0
  184. data/tests/linode/requests/compute/linode_tests.rb +6 -0
  185. data/tests/linode/requests/compute/linodeplans_tests.rb +2 -0
  186. data/tests/lorem.txt +1 -0
  187. data/tests/rackspace/requests/compute/flavor_tests.rb +4 -0
  188. data/tests/rackspace/requests/compute/image_tests.rb +12 -4
  189. data/tests/rackspace/requests/compute/server_tests.rb +9 -0
  190. data/tests/slicehost/requests/compute/backup_tests.rb +1 -0
  191. data/tests/slicehost/requests/compute/flavor_tests.rb +3 -0
  192. data/tests/slicehost/requests/compute/image_tests.rb +3 -0
  193. data/tests/slicehost/requests/compute/slice_tests.rb +14 -2
  194. metadata +42 -27
  195. data/spec/aws/requests/storage/delete_bucket_spec.rb +0 -35
  196. data/spec/aws/requests/storage/delete_object_spec.rb +0 -36
  197. data/spec/aws/requests/storage/get_object_spec.rb +0 -58
  198. data/spec/aws/requests/storage/get_service_spec.rb +0 -32
  199. data/spec/aws/requests/storage/head_object_spec.rb +0 -26
  200. data/spec/aws/requests/storage/put_bucket_spec.rb +0 -19
  201. data/spec/aws/requests/storage/put_object_spec.rb +0 -43
@@ -0,0 +1,36 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module AWS
5
+ class Compute
6
+
7
+ class Tag < Fog::Model
8
+
9
+ identity :key
10
+
11
+ attribute :value
12
+ attribute :resource_id, :aliases => 'resourceId'
13
+ attribute :resource_type, :aliases => 'resourceType'
14
+
15
+ def initialize(attributes = {})
16
+ super
17
+ end
18
+
19
+ def destroy
20
+ requires :key, :resource_id
21
+ connection.delete_tags(resource_id, key)
22
+ true
23
+ end
24
+
25
+ def save
26
+ requires :key, :resource_id
27
+ connection.create_tags(resource_id, key => value)
28
+ true
29
+ end
30
+
31
+ private
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,34 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aws/models/compute/tag'
3
+
4
+ module Fog
5
+ module AWS
6
+ class Compute
7
+
8
+ class Tags < Fog::Collection
9
+
10
+ attribute :filters
11
+
12
+ model Fog::AWS::Compute::Tag
13
+
14
+ def initialize(attributes)
15
+ @filters ||= {}
16
+ super
17
+ end
18
+
19
+ def all(filters = @filters)
20
+ @filters = filters
21
+ data = connection.describe_tags(@filters).body
22
+ load(data['tagSet'])
23
+ end
24
+
25
+ def get(key)
26
+ if key
27
+ self.class.new(:connection => connection).all('key' => key)
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module AWS
@@ -18,6 +18,7 @@ module Fog
18
18
  attribute :size
19
19
  attribute :snapshot_id, :aliases => 'snapshotId'
20
20
  attribute :state, :aliases => 'status'
21
+ attribute :tags, :aliases => 'tagSet'
21
22
 
22
23
  def initialize(attributes = {})
23
24
  # assign server first to prevent race condition with new_record?
@@ -36,15 +37,8 @@ module Fog
36
37
  state == 'available'
37
38
  end
38
39
 
39
- def server=(new_server)
40
- if new_server
41
- attach(new_server)
42
- else
43
- detach
44
- end
45
- end
46
-
47
40
  def save
41
+ raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
48
42
  requires :availability_zone, :size
49
43
 
50
44
  data = connection.create_volume(@availability_zone, @size, @snapshot_id).body
@@ -56,9 +50,16 @@ module Fog
56
50
  true
57
51
  end
58
52
 
53
+ def server=(new_server)
54
+ if new_server
55
+ attach(new_server)
56
+ else
57
+ detach
58
+ end
59
+ end
60
+
59
61
  def snapshots
60
62
  requires :id
61
-
62
63
  connection.snapshots(:volume => self)
63
64
  end
64
65
 
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/aws/models/compute/volume'
3
3
 
4
4
  module Fog
@@ -7,19 +7,23 @@ module Fog
7
7
 
8
8
  class Volumes < Fog::Collection
9
9
 
10
- attribute :volume_id
10
+ attribute :filters
11
11
  attribute :server
12
12
 
13
13
  model Fog::AWS::Compute::Volume
14
14
 
15
15
  def initialize(attributes)
16
- @volume_id ||= []
16
+ @filters ||= {}
17
17
  super
18
18
  end
19
19
 
20
- def all(volume_id = @volume_id)
21
- @volume_id = volume_id
22
- data = connection.describe_volumes(volume_id).body
20
+ def all(filters = @filters)
21
+ unless filters.is_a?(Hash)
22
+ Formatador.display_line("[yellow][WARN] all with #{filters.class} param is deprecated, use all('volume-id' => []) instead[/] [light_black](#{caller.first})[/]")
23
+ filters = {'volume-id' => [*filters]}
24
+ end
25
+ @filters = filters
26
+ data = connection.describe_volumes(@filters).body
23
27
  load(data['volumeSet'])
24
28
  if server
25
29
  self.replace(self.select {|volume| volume.server_id == server.id})
@@ -29,10 +33,8 @@ module Fog
29
33
 
30
34
  def get(volume_id)
31
35
  if volume_id
32
- all(volume_id).first
36
+ self.class.new(:connection => connection).all('volume-id' => volume_id).first
33
37
  end
34
- rescue Fog::Errors::NotFound
35
- nil
36
38
  end
37
39
 
38
40
  def new(attributes = {})
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/aws/models/storage/directory'
3
3
 
4
4
  module Fog
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
  require 'fog/aws/models/storage/files'
3
3
 
4
4
  module Fog
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module AWS
@@ -8,7 +8,7 @@ module Fog
8
8
 
9
9
  identity :key, :aliases => 'Key'
10
10
 
11
- attr_accessor :body
11
+ attr_writer :body
12
12
  attribute :content_length, :aliases => 'Content-Length'
13
13
  attribute :content_type, :aliases => 'Content-Type'
14
14
  attribute :etag, :aliases => ['Etag', 'ETag']
@@ -58,6 +58,7 @@ module Fog
58
58
  true
59
59
  end
60
60
 
61
+ remove_method :owner=
61
62
  def owner=(new_owner)
62
63
  if new_owner
63
64
  @owner = {
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/aws/models/storage/file'
3
3
 
4
4
  module Fog
@@ -81,12 +81,6 @@ module Fog
81
81
  super({ :directory => directory }.merge!(attributes))
82
82
  end
83
83
 
84
- private
85
-
86
- def directory=(new_directory)
87
- @directory = new_directory
88
- end
89
-
90
84
  end
91
85
 
92
86
  end
@@ -6,7 +6,7 @@ module Fog
6
6
  class DescribeAvailabilityZones < Fog::Parsers::Base
7
7
 
8
8
  def reset
9
- @availability_zone = {}
9
+ @availability_zone = { 'messageSet' => [] }
10
10
  @response = { 'availabilityZoneInfo' => [] }
11
11
  end
12
12
 
@@ -14,7 +14,9 @@ module Fog
14
14
  case name
15
15
  when 'item'
16
16
  @response['availabilityZoneInfo'] << @availability_zone
17
- @availability_zone = {}
17
+ @availability_zone = { 'messageSet' => [] }
18
+ when 'message'
19
+ @availability_zone['messageSet'] << @value
18
20
  when 'regionName', 'zoneName', 'zoneState'
19
21
  @availability_zone[name] = @value
20
22
  when 'requestId'
@@ -6,26 +6,32 @@ module Fog
6
6
  class DescribeImages < Fog::Parsers::Base
7
7
 
8
8
  def reset
9
- @image = { 'productCodes' => [], 'blockDeviceMapping' => nil }
9
+ @block_device_mapping = {}
10
+ @image = { 'blockDeviceMapping' => [], 'productCodes' => [], 'tagSet' => {} }
10
11
  @response = { 'imagesSet' => [] }
12
+ @tag = {}
11
13
  end
12
14
 
13
15
  def start_element(name, attrs = [])
14
16
  super
15
- if name == 'productCodes'
17
+ case name
18
+ when 'productCodes'
16
19
  @in_product_codes = true
17
- elsif name == 'blockDeviceMapping'
20
+ when 'blockDeviceMapping'
18
21
  @in_block_device_mapping = true
19
- @image['blockDeviceMapping'] = []
20
- elsif name == 'item' && @in_block_device_mapping
21
- @image['blockDeviceMapping'] << {}
22
+ when 'tagSet'
23
+ @in_tag_set = true
22
24
  end
23
25
  end
24
-
26
+
25
27
  def end_element(name)
26
28
  case name
27
29
  when 'architecture', 'imageId', 'imageLocation', 'imageOwnerId', 'imageState', 'imageType', 'kernelId', 'platform', 'ramdiskId', 'rootDeviceType','rootDeviceName'
28
30
  @image[name] = @value
31
+ when 'blockDeviceMapping'
32
+ @in_block_device_mapping = false
33
+ when 'deviceName', 'virtualName', 'snapshotId', 'deleteOnTermination'
34
+ @block_device_mapping[name] = @value
29
35
  when 'isPublic'
30
36
  if @value == 'true'
31
37
  @image[name] = true
@@ -34,21 +40,25 @@ module Fog
34
40
  end
35
41
  when 'item'
36
42
  if @in_block_device_mapping
43
+ @image['blockDeviceMapping'] << @block_device_mapping
44
+ @block_device_mapping = {}
45
+ elsif @in_tag_set
46
+ @image['tagSet'][@tag['key']] = @tag['value']
47
+ @tag = {}
37
48
  elsif !@in_product_codes
38
49
  @response['imagesSet'] << @image
39
- @image = { 'productCodes' => [] }
50
+ @image = { 'blockDeviceMapping' => [], 'productCodes' => [], 'tagSet' => {} }
40
51
  end
52
+ when 'key', 'value'
53
+ @tag[name] = @value
41
54
  when 'productCode'
42
55
  @image['productCodes'] << @value
43
56
  when 'productCodes'
44
57
  @in_product_codes = false
45
- when 'blockDeviceMapping'
46
- @in_block_device_mapping = false
47
58
  when 'requestId'
48
59
  @response[name] = @value
49
- when 'deviceName','virtualName','snapshotId','volumeSize','deleteOnTermination'
50
- l = @image['blockDeviceMapping'].length
51
- @image['blockDeviceMapping'][l-1].store(name,@value)
60
+ when 'volumeSize'
61
+ @block_device_mapping[name] = @value.to_i
52
62
  end
53
63
  end
54
64
 
@@ -7,9 +7,10 @@ module Fog
7
7
 
8
8
  def reset
9
9
  @block_device_mapping = {}
10
- @instance = { 'blockDeviceMapping' => [], 'instanceState' => {}, 'monitoring' => {}, 'placement' => {}, 'productCodes' => [] }
10
+ @instance = { 'blockDeviceMapping' => [], 'instanceState' => {}, 'monitoring' => {}, 'placement' => {}, 'productCodes' => [], 'stateReason' => {}, 'tagSet' => {} }
11
11
  @reservation = { 'groupSet' => [], 'instancesSet' => [] }
12
12
  @response = { 'reservationSet' => [] }
13
+ @tag = {}
13
14
  end
14
15
 
15
16
  def start_element(name, attrs = [])
@@ -21,6 +22,12 @@ module Fog
21
22
  @in_subset = true
22
23
  when 'instancesSet'
23
24
  @in_instances_set = true
25
+ when 'instanceState'
26
+ @in_instance_state = true
27
+ when 'stateReason'
28
+ @in_state_reason = true
29
+ when 'tagSet'
30
+ @in_tag_set = true
24
31
  end
25
32
  end
26
33
 
@@ -30,17 +37,21 @@ module Fog
30
37
  @instance[name] = @value.to_i
31
38
  when 'availabilityZone'
32
39
  @instance['placement'][name] = @value
33
- when 'architecture', 'dnsName', 'imageId', 'instanceId',
34
- 'instanceType', 'ipAddress', 'kernelId', 'keyName',
35
- 'privateDnsName', 'privateIpAddress', 'ramdiskId', 'reason',
36
- 'rootDeviceType'
40
+ when 'architecture', 'clientToken', 'dnsName', 'imageId',
41
+ 'instanceId', 'instanceType', 'ipAddress', 'kernelId',
42
+ 'keyName', 'privateDnsName', 'privateIpAddress', 'ramdiskId',
43
+ 'reason', 'rootDeviceType'
37
44
  @instance[name] = @value
38
45
  when 'attachTime'
39
46
  @block_device_mapping[name] = Time.parse(@value)
40
47
  when 'blockDeviceMapping'
41
48
  @in_block_device_mapping = false
42
49
  when 'code'
43
- @instance['instanceState'][name] = @value.to_i
50
+ if @in_instance_state
51
+ @instance['instanceState'][name] = @value.to_i
52
+ elsif @in_state_reason
53
+ @instance['stateReason'][name] = @value.to_i
54
+ end
44
55
  when 'deleteOnTermination'
45
56
  if @value == 'true'
46
57
  @block_device_mapping[name] = true
@@ -55,21 +66,32 @@ module Fog
55
66
  @in_subset = false
56
67
  when 'instancesSet'
57
68
  @in_instances_set = false
69
+ when 'instanceState'
70
+ @in_instance_state = false
58
71
  when 'item'
59
72
  if @in_block_device_mapping
60
73
  @instance['blockDeviceMapping'] << @block_device_mapping
61
74
  @block_device_mapping = {}
75
+ elsif @in_tag_set
76
+ @instance['tagSet'][@tag['key']] = @tag['value']
77
+ @tag = {}
62
78
  elsif @in_instances_set
63
79
  @reservation['instancesSet'] << @instance
64
- @instance = { 'blockDeviceMapping' => [], 'instanceState' => {}, 'monitoring' => {}, 'placement' => {}, 'productCodes' => [] }
80
+ @instance = { 'blockDeviceMapping' => [], 'instanceState' => {}, 'monitoring' => {}, 'placement' => {}, 'productCodes' => [], 'stateReason' => {}, 'tagSet' => {} }
65
81
  elsif !@in_subset
66
82
  @response['reservationSet'] << @reservation
67
83
  @reservation = { 'groupSet' => [], 'instancesSet' => [] }
68
84
  end
85
+ when 'key', 'value'
86
+ @tag[name] = @value
69
87
  when 'launchTime'
70
88
  @instance[name] = Time.parse(@value)
71
89
  when 'name'
72
- @instance['instanceState'][name] = @value
90
+ if @in_instance_state
91
+ @instance['instanceState'][name] = @value
92
+ elsif @in_state_reason
93
+ @instance['stateReason'][name] = @value
94
+ end
73
95
  when 'ownerId', 'reservationId'
74
96
  @reservation[name] = @value
75
97
  when 'requestId'
@@ -82,6 +104,10 @@ module Fog
82
104
  else
83
105
  @instance['monitoring'][name] = false
84
106
  end
107
+ when 'stateReason'
108
+ @in_state_reason = false
109
+ when 'tagSet'
110
+ @in_tag_set = false
85
111
  end
86
112
  end
87
113
 
@@ -15,11 +15,12 @@ module Fog
15
15
 
16
16
  def start_element(name, attrs = [])
17
17
  super
18
- if name == 'groups'
18
+ case name
19
+ when 'groups'
19
20
  @in_groups = true
20
- elsif name == 'ipPermissions'
21
+ when 'ipPermissions'
21
22
  @in_ip_permissions = true
22
- elsif name == 'ipRanges'
23
+ when 'ipRanges'
23
24
  @in_ip_ranges = true
24
25
  end
25
26
  end
@@ -7,22 +7,42 @@ module Fog
7
7
 
8
8
  def reset
9
9
  @response = { 'snapshotSet' => [] }
10
- @snapshot = {}
10
+ @snapshot = { 'tagSet' => {} }
11
+ @tag = {}
12
+ end
13
+
14
+ def start_element(name, attrs = [])
15
+ super
16
+ if name == 'tagSet'
17
+ @in_tag_set = true
18
+ end
11
19
  end
12
20
 
13
21
  def end_element(name)
14
- case name
15
- when 'item'
16
- @response['snapshotSet'] << @snapshot
17
- @snapshot = {}
18
- when 'description', 'ownerId', 'progress', 'snapshotId', 'status', 'volumeId'
19
- @snapshot[name] = @value
20
- when 'requestId'
21
- @response[name] = @value
22
- when 'startTime'
23
- @snapshot[name] = Time.parse(@value)
24
- when 'volumeSize'
25
- @snapshot[name] = @value.to_i
22
+ if @in_tag_set
23
+ case name
24
+ when 'item'
25
+ @snapshot['tagSet'][@tag['key']] = @tag['value']
26
+ @tag = {}
27
+ when 'key', 'value'
28
+ @tag[key] = value
29
+ when 'tagSet'
30
+ @in_tag_set = false
31
+ end
32
+ else
33
+ case name
34
+ when 'item'
35
+ @response['snapshotSet'] << @snapshot
36
+ @snapshot = { 'tagSet' => {} }
37
+ when 'description', 'ownerId', 'progress', 'snapshotId', 'status', 'volumeId'
38
+ @snapshot[name] ||= @value
39
+ when 'requestId'
40
+ @response[name] = @value
41
+ when 'startTime'
42
+ @snapshot[name] = Time.parse(@value)
43
+ when 'volumeSize'
44
+ @snapshot[name] = @value.to_i
45
+ end
26
46
  end
27
47
  end
28
48