fog 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
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,30 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module Compute
5
+
6
+ class DescribeTags < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @tag = {}
10
+ @response = { 'tagSet' => [] }
11
+ end
12
+
13
+ def end_element(name)
14
+ case name
15
+ when 'resourceId', 'resourceType', 'key', 'value'
16
+ @tag[name] = @value
17
+ when 'item'
18
+ @response['tagSet'] << @tag
19
+ @tag = {}
20
+ when 'requestId'
21
+ @response[name] = @value
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -9,13 +9,17 @@ module Fog
9
9
  @attachment = {}
10
10
  @in_attachment_set = false
11
11
  @response = { 'volumeSet' => [] }
12
- @volume = { 'attachmentSet' => [] }
12
+ @tag = {}
13
+ @volume = { 'attachmentSet' => [], 'tagSet' => {} }
13
14
  end
14
15
 
15
16
  def start_element(name, attrs = [])
16
17
  super
17
- if name == 'attachmentSet'
18
+ case name
19
+ when 'attachmentSet'
18
20
  @in_attachment_set = true
21
+ when 'tagSet'
22
+ @in_tag_set = true
19
23
  end
20
24
  end
21
25
 
@@ -32,6 +36,16 @@ module Fog
32
36
  @volume['attachmentSet'] << @attachment
33
37
  @attachment = {}
34
38
  end
39
+ elsif @in_tag_set
40
+ case name
41
+ when 'key', 'value'
42
+ @tag[name] = @value
43
+ when 'item'
44
+ @volume['tagSet'][@tag['key']] = @tag['value']
45
+ @tag = {}
46
+ when 'tagSet'
47
+ @in_tag_set = false
48
+ end
35
49
  else
36
50
  case name
37
51
  when 'availabilityZone', 'snapshotId', 'status', 'volumeId'
@@ -40,7 +54,7 @@ module Fog
40
54
  @volume[name] = Time.parse(@value)
41
55
  when 'item'
42
56
  @response['volumeSet'] << @volume
43
- @volume = { 'attachmentSet' => [] }
57
+ @volume = { 'attachmentSet' => [], 'tagSet' => {} }
44
58
  when 'requestId'
45
59
  @response[name] = @value
46
60
  when 'size'
@@ -27,10 +27,10 @@ module Fog
27
27
  case name
28
28
  when 'amiLaunchIndex'
29
29
  @instance[name] = @value.to_i
30
- when 'architecture', 'dnsName', 'imageId', 'instanceId',
31
- 'instanceType', 'ipAddress', 'kernelId', 'keyName',
32
- 'privateDnsName', 'privateIpAddress', 'ramdiskId', 'reason',
33
- 'rootDeviceType'
30
+ when 'architecture', 'clientToken', 'dnsName', 'imageId',
31
+ 'instanceId', 'instanceType', 'ipAddress', 'kernelId',
32
+ 'keyName', 'privateDnsName', 'privateIpAddress', 'ramdiskId',
33
+ 'reason', 'rootDeviceType'
34
34
  @instance[name] = @value
35
35
  when 'availabilityZone'
36
36
  @instance['placement'][name] = @value
@@ -33,7 +33,7 @@ module Fog
33
33
  @response['MaxKeys'] = @value.to_i
34
34
  when 'Size'
35
35
  @object['Size'] = @value.to_i
36
- when 'Delimeter', 'Key', 'Name', 'StorageClass'
36
+ when 'Delimeter', 'Key', 'StorageClass'
37
37
  @object[name] = @value
38
38
  end
39
39
  end
@@ -3,7 +3,7 @@ module Fog
3
3
  module AWS
4
4
  module Storage
5
5
 
6
- class AccessControlList < Fog::Parsers::Base
6
+ class GetBucketLogging < Fog::Parsers::Base
7
7
 
8
8
  def reset
9
9
  @grant = { 'Grantee' => {} }
@@ -65,17 +65,17 @@ module Fog
65
65
  elsif @in_version
66
66
  @version
67
67
  end['LastModified'] = Time.parse(@value)
68
- when 'KeyMarker', 'Name', 'Prefix', 'VersionIdMarker'
69
- @response[name] = @value
70
68
  when 'MaxKeys'
71
69
  @response['MaxKeys'] = @value.to_i
72
70
  when 'Size'
73
71
  @version['Size'] = @value.to_i
74
- when 'Key', 'Name', 'StorageClass', 'VersionId'
72
+ when 'Key', 'KeyMarker', 'Name', 'Prefix', 'StorageClass', 'VersionId', 'VersionIdMarker'
75
73
  if @in_delete_marker
76
74
  @delete_marker
77
75
  elsif @in_version
78
76
  @version
77
+ else
78
+ @response
79
79
  end[name] = @value
80
80
  end
81
81
  end
@@ -51,6 +51,7 @@ module Fog
51
51
  response.body = {
52
52
  'requestId' => Fog::AWS::Mock.request_id
53
53
  }.merge!(data)
54
+ @data[:snapshots][snapshot_id]['tagSet'] = {}
54
55
  else
55
56
  response.status = 400
56
57
  raise(Excon::Errors.status_error({:expects => 200}, response))
@@ -0,0 +1,78 @@
1
+ module Fog
2
+ module AWS
3
+ class Compute
4
+ class Real
5
+
6
+ # Adds tags to resources
7
+ #
8
+ # ==== Parameters
9
+ # * resources<~String> - One or more resources to tag
10
+ # * tags<~String> - hash of key value tag pairs to assign
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'requestId'<~String> - Id of request
16
+ # * 'return'<~Boolean> - success?
17
+ def create_tags(resources, tags)
18
+ resources = [*resources]
19
+ for key, value in tags
20
+ if value.nil?
21
+ tags[key] = ''
22
+ end
23
+ end
24
+ params = {}
25
+ params.merge!(AWS.indexed_param('ResourceId', resources))
26
+ params.merge!(AWS.indexed_param('Tag.%d.Key', tags.keys))
27
+ params.merge!(AWS.indexed_param('Tag.%d.Value', tags.values))
28
+ request({
29
+ 'Action' => 'CreateTags',
30
+ :parser => Fog::Parsers::AWS::Compute::Basic.new
31
+ }.merge!(params))
32
+ end
33
+
34
+ end
35
+
36
+ class Mock
37
+
38
+ def create_tags(resources, tags)
39
+ resources = [*resources]
40
+
41
+ tagged = resources.map do |resource_id|
42
+ type = case resource_id
43
+ when /^ami\-[a-z0-9]{8}$/i
44
+ 'image'
45
+ when /^i\-[a-z0-9]{8}$/i
46
+ 'instance'
47
+ when /^snap\-[a-z0-9]{8}$/i
48
+ 'snapshot'
49
+ when /^vol\-[a-z0-9]{8}$/i
50
+ 'volume'
51
+ end
52
+ if type && @data[:"#{type}s"][resource_id]
53
+ { 'resourceId' => resource_id, 'resourceType' => type }
54
+ else
55
+ raise(Fog::Service::NotFound.new("The #{type} ID '#{resource_id}' does not exist"))
56
+ end
57
+ end
58
+
59
+ tags.each do |key, value|
60
+ @data[:tags][key] ||= {}
61
+ @data[:tags][key][value] ||= []
62
+ @data[:tags][key][value] = @data[:tags][key][value] & tagged
63
+ end
64
+
65
+ response = Excon::Response.new
66
+ response.status = 200
67
+ response.body = {
68
+ 'requestId' => Fog::AWS::Mock.request_id,
69
+ 'return' => true
70
+ }
71
+ response
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module AWS
3
+ class Compute
4
+ class Real
5
+
6
+ # Remove tags from resources
7
+ #
8
+ # ==== Parameters
9
+ # * resources<~String> - One or more resources to tag
10
+ # * tags<~String> - hash of key value tag pairs to assign
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'requestId'<~String> - Id of request
16
+ # * 'return'<~Boolean> - success?
17
+ def delete_tags(resources, tags)
18
+ resources = [*resources]
19
+ for key, value in tags
20
+ if value.nil?
21
+ tags[key] = ''
22
+ end
23
+ end
24
+ params = {}
25
+ params.merge!(AWS.indexed_param('ResourceId', resources))
26
+ params.merge!(AWS.indexed_param('Tag.%d.Key', tags.keys))
27
+ params.merge!(AWS.indexed_param('Tag.%d.Value', tags.values))
28
+ request({
29
+ 'Action' => 'CreateTags',
30
+ :parser => Fog::Parsers::AWS::Compute::Basic.new
31
+ }.merge!(params))
32
+ end
33
+
34
+ end
35
+
36
+ class Mock
37
+
38
+ def delete_tags(resources, tags)
39
+ Fog::Mock.not_implemented
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -8,7 +8,7 @@ module Fog
8
8
  # Describe all or specified IP addresses.
9
9
  #
10
10
  # ==== Parameters
11
- # * public_ip<~Array> - List of ips to describe, defaults to all
11
+ # * filters<~Hash> - List of filters to limit results with
12
12
  #
13
13
  # ==== Returns
14
14
  # * response<~Excon::Response>:
@@ -17,8 +17,12 @@ module Fog
17
17
  # * 'addressesSet'<~Array>:
18
18
  # * 'instanceId'<~String> - instance for ip address
19
19
  # * 'publicIp'<~String> - ip address for instance
20
- def describe_addresses(public_ip = [])
21
- params = AWS.indexed_param('PublicIp', public_ip)
20
+ def describe_addresses(filters = {})
21
+ unless filters.is_a?(Hash)
22
+ Formatador.display_line("[yellow][WARN] describe_addresses with #{filters.class} param is deprecated, use describe_addresses('public-ip' => []) instead[/] [light_black](#{caller.first})[/]")
23
+ filters = {'public-ip' => [*filters]}
24
+ end
25
+ params = AWS.indexed_filters(filters)
22
26
  request({
23
27
  'Action' => 'DescribeAddresses',
24
28
  :idempotent => true,
@@ -30,24 +34,28 @@ module Fog
30
34
 
31
35
  class Mock
32
36
 
33
- def describe_addresses(public_ip = [])
34
- response = Excon::Response.new
35
- public_ip = [*public_ip]
36
- if public_ip != []
37
- addresses_set = @data[:addresses].reject {|key, value| !public_ip.include?(key)}.values
38
- else
39
- addresses_set = @data[:addresses].values
37
+ def describe_addresses(filters = {})
38
+ unless filters.is_a?(Hash)
39
+ Formatador.display_line("[yellow][WARN] describe_addresses with #{filters.class} param is deprecated, use describe_addresses('public-ip' => []) instead[/] [light_black](#{caller.first})[/]")
40
+ filters = {'public-ip' => [*filters]}
40
41
  end
41
- if public_ip.length == 0 || public_ip.length == addresses_set.length
42
- response.status = 200
43
- response.body = {
44
- 'requestId' => Fog::AWS::Mock.request_id,
45
- 'addressesSet' => addresses_set
46
- }
47
- response
48
- else
49
- raise Fog::AWS::Compute::NotFound.new("Address #{public_ip.inspect} not found.")
42
+
43
+ response = Excon::Response.new
44
+
45
+ addresses_set = @data[:addresses].values
46
+
47
+ aliases = {'public-ip' => 'publicIp', 'instance-id' => 'instanceId'}
48
+ for filter_key, filter_value in filters
49
+ aliased_key = aliases[filter_key]
50
+ addresses_set = addresses_set.reject{|address| ![*filter_value].include?(address[aliased_key])}
50
51
  end
52
+
53
+ response.status = 200
54
+ response.body = {
55
+ 'requestId' => Fog::AWS::Mock.request_id,
56
+ 'addressesSet' => addresses_set
57
+ }
58
+ response
51
59
  end
52
60
 
53
61
  end
@@ -8,7 +8,7 @@ module Fog
8
8
  # Describe all or specified availability zones
9
9
  #
10
10
  # ==== Params
11
- # * zone_name<~String> - List of availability zones to describe, defaults to all
11
+ # * filters<~Hash> - List of filters to limit results with
12
12
  #
13
13
  # ==== Returns
14
14
  # * response<~Excon::Response>:
@@ -18,8 +18,12 @@ module Fog
18
18
  # * 'regionName'<~String> - Name of region
19
19
  # * 'zoneName'<~String> - Name of zone
20
20
  # * 'zoneState'<~String> - State of zone
21
- def describe_availability_zones(zone_name = [])
22
- params = AWS.indexed_param('ZoneName', zone_name)
21
+ def describe_availability_zones(filters = {})
22
+ unless filters.is_a?(Hash)
23
+ Formatador.display_line("[yellow][WARN] describe_availability_zones with #{filters.class} param is deprecated, use describe_availability_zones('zone-name' => []) instead[/] [light_black](#{caller.first})[/]")
24
+ filters = {'public-ip' => [*filters]}
25
+ end
26
+ params = AWS.indexed_filters(filters)
23
27
  request({
24
28
  'Action' => 'DescribeAvailabilityZones',
25
29
  :idempotent => true,
@@ -31,31 +35,33 @@ module Fog
31
35
 
32
36
  class Mock
33
37
 
34
- def describe_availability_zones(zone_name = [])
35
- response = Excon::Response.new
36
- zone_name = [*zone_name]
37
- zones = {
38
- 'us-east-1a' => {"zoneName"=>"us-east-1a", "regionName"=>"us-east-1", "zoneState"=>"available"},
39
- 'us-east-1b' => {"zoneName"=>"us-east-1b", "regionName"=>"us-east-1", "zoneState"=>"available"},
40
- 'us-east-1c' => {"zoneName"=>"us-east-1c", "regionName"=>"us-east-1", "zoneState"=>"available"},
41
- 'us-east-1d' => {"zoneName"=>"us-east-1d", "regionName"=>"us-east-1", "zoneState"=>"available"}
42
- }
43
- if zone_name != []
44
- availability_zone_info = zones.reject {|key, value| !zone_name.include?(key)}.values
45
- else
46
- availability_zone_info = zones.values
38
+ def describe_availability_zones(filters = {})
39
+ unless filters.is_a?(Hash)
40
+ Formatador.display_line("[yellow][WARN] describe_availability_zones with #{filters.class} param is deprecated, use describe_availability_zones('zone-name' => []) instead[/] [light_black](#{caller.first})[/]")
41
+ filters = {'public-ip' => [*filters]}
47
42
  end
48
43
 
49
- if zone_name.length == 0 || zone_name.length == availability_zone_info.length
50
- response.status = 200
51
- response.body = {
52
- 'requestId' => Fog::AWS::Mock.request_id,
53
- 'availabilityZoneInfo' => availability_zone_info
54
- }
55
- response
56
- else
57
- raise Fog::AWS::Compute::Error.new("InvalidParameterValue => Invalid availability zone: #{zone_name.inspect}")
44
+ response = Excon::Response.new
45
+
46
+ availability_zone_info = [
47
+ {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1a", "zoneState" => "available"},
48
+ {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1b", "zoneState" => "available"},
49
+ {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1c", "zoneState" => "available"},
50
+ {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1d", "zoneState" => "available"},
51
+ ]
52
+
53
+ aliases = {'region-name' => 'regionName', 'zone-name' => 'zoneName', 'state' => 'zoneState'}
54
+ for filter_key, filter_value in filters
55
+ aliased_key = aliases[filter_key]
56
+ availability_zone_info = availability_zone_info.reject{|availability_zone| ![*filter_value].include?(availability_zone[aliased_key])}
58
57
  end
58
+
59
+ response.status = 200
60
+ response.body = {
61
+ 'availabilityZoneInfo' => availability_zone_info,
62
+ 'requestId' => Fog::AWS::Mock.request_id
63
+ }
64
+ response
59
65
  end
60
66
 
61
67
  end
@@ -8,7 +8,8 @@ module Fog
8
8
  # Describe all or specified images.
9
9
  #
10
10
  # ==== Params
11
- # * options<~Hash> - Optional params
11
+ # * filters<~Hash> - List of filters to limit results with
12
+ # * filters and/or the following
12
13
  # * 'ExecutableBy'<~String> - Only return images that the executable_by
13
14
  # user has explicit permission to launch
14
15
  # * 'ImageId'<~Array> - Ids of images to describe
@@ -33,10 +34,14 @@ module Fog
33
34
  # * 'ramdiskId'<~String> - Ramdisk id associated with image, if any
34
35
  # * 'rootDeviceName'<~String> - Root device name, e.g. /dev/sda1
35
36
  # * 'rootDeviceType'<~String> - Root device type, ebs or instance-store
36
- def describe_images(options = {})
37
- if image_id = options.delete('ImageId')
38
- options.merge!(AWS.indexed_param('ImageId', image_id))
37
+ def describe_images(filters = {})
38
+ options = {}
39
+ for key in ['ExecutableBy', 'ImageId', 'Owner']
40
+ if filters.is_a?(Hash) && filters.key?(key)
41
+ options[key] = filters[key]
42
+ end
39
43
  end
44
+ params = AWS.indexed_filters(filters).merge!(options)
40
45
  request({
41
46
  'Action' => 'DescribeImages',
42
47
  :idempotent => true,
@@ -48,20 +53,8 @@ module Fog
48
53
 
49
54
  class Mock
50
55
 
51
- def describe_images(options = {})
52
- response = Excon::Response.new
53
- images = []
54
-
55
- (rand(101 + 100)).times do
56
- images << Fog::AWS::Mock.image
57
- end
58
-
59
- response.status = 200
60
- response.body = {
61
- 'requestId' => Fog::AWS::Mock.request_id,
62
- 'imagesSet' => images
63
- }
64
- response
56
+ def describe_images(filters = {})
57
+ Fog::Mock.not_implemented
65
58
  end
66
59
 
67
60
  end