fog 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/.document +1 -1
  2. data/.irbrc +5 -10
  3. data/{README.rdoc → README.md} +66 -61
  4. data/Rakefile +4 -6
  5. data/changelog.txt +491 -0
  6. data/docs/about/users.markdown +1 -0
  7. data/fog.gemspec +4 -4
  8. data/lib/fog.rb +1 -1
  9. data/lib/fog/aws.rb +4 -0
  10. data/lib/fog/aws/auto_scaling.rb +3 -0
  11. data/lib/fog/aws/cloud_watch.rb +28 -0
  12. data/lib/fog/aws/compute.rb +7 -1
  13. data/lib/fog/aws/elasticache.rb +64 -6
  14. data/lib/fog/aws/models/auto_scaling/configuration.rb +3 -1
  15. data/lib/fog/aws/models/auto_scaling/group.rb +10 -9
  16. data/lib/fog/aws/models/auto_scaling/policies.rb +33 -0
  17. data/lib/fog/aws/models/auto_scaling/policy.rb +46 -0
  18. data/lib/fog/aws/models/cloud_watch/alarm.rb +50 -2
  19. data/lib/fog/aws/models/cloud_watch/alarms.rb +18 -1
  20. data/lib/fog/aws/models/compute/address.rb +2 -2
  21. data/lib/fog/aws/models/dns/records.rb +5 -0
  22. data/lib/fog/aws/models/elasticache/cluster.rb +1 -1
  23. data/lib/fog/aws/models/iam/users.rb +26 -4
  24. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +7 -5
  25. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +1 -1
  26. data/lib/fog/aws/rds.rb +1 -1
  27. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +8 -0
  28. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +1 -2
  29. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -2
  30. data/lib/fog/aws/requests/auto_scaling/delete_launch_configuration.rb +1 -1
  31. data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +10 -1
  32. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +0 -1
  33. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +13 -1
  34. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +20 -1
  35. data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +1 -1
  36. data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +19 -1
  37. data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +20 -2
  38. data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +9 -0
  39. data/lib/fog/aws/requests/compute/allocate_address.rb +4 -5
  40. data/lib/fog/aws/requests/compute/create_dhcp_options.rb +6 -5
  41. data/lib/fog/aws/requests/compute/create_internet_gateway.rb +7 -6
  42. data/lib/fog/aws/requests/compute/create_subnet.rb +11 -10
  43. data/lib/fog/aws/requests/compute/create_vpc.rb +8 -7
  44. data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +1 -0
  45. data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +1 -0
  46. data/lib/fog/aws/requests/compute/delete_subnet.rb +1 -0
  47. data/lib/fog/aws/requests/compute/delete_vpc.rb +2 -1
  48. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +1 -0
  49. data/lib/fog/aws/requests/compute/describe_dhcp_options.rb +1 -8
  50. data/lib/fog/aws/requests/compute/describe_instances.rb +3 -1
  51. data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +1 -8
  52. data/lib/fog/aws/requests/compute/describe_subnets.rb +1 -9
  53. data/lib/fog/aws/requests/compute/describe_vpcs.rb +1 -8
  54. data/lib/fog/aws/requests/compute/release_address.rb +12 -4
  55. data/lib/fog/aws/requests/compute/start_instances.rb +1 -0
  56. data/lib/fog/aws/requests/compute/stop_instances.rb +1 -0
  57. data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +26 -2
  58. data/lib/fog/aws/requests/elasticache/delete_cache_cluster.rb +10 -1
  59. data/lib/fog/aws/requests/elasticache/describe_cache_clusters.rb +16 -1
  60. data/lib/fog/aws/requests/elasticache/modify_cache_cluster.rb +35 -3
  61. data/lib/fog/aws/requests/elasticache/reboot_cache_cluster.rb +10 -2
  62. data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
  63. data/lib/fog/aws/requests/rds/describe_db_instances.rb +3 -3
  64. data/lib/fog/aws/sqs.rb +1 -1
  65. data/lib/fog/aws/storage.rb +1 -1
  66. data/lib/fog/bin/rackspace.rb +4 -0
  67. data/lib/fog/cloudstack/compute.rb +25 -18
  68. data/lib/fog/cloudstack/models/compute/image.rb +34 -34
  69. data/lib/fog/cloudstack/models/compute/job.rb +14 -1
  70. data/lib/fog/cloudstack/models/compute/jobs.rb +1 -1
  71. data/lib/fog/cloudstack/models/compute/security_group.rb +50 -0
  72. data/lib/fog/cloudstack/models/compute/security_group_rule.rb +62 -0
  73. data/lib/fog/cloudstack/models/compute/security_group_rules.rb +37 -0
  74. data/lib/fog/cloudstack/models/compute/security_groups.rb +27 -0
  75. data/lib/fog/cloudstack/models/compute/server.rb +63 -39
  76. data/lib/fog/cloudstack/models/compute/volume.rb +3 -7
  77. data/lib/fog/cloudstack/models/compute/zone.rb +1 -2
  78. data/lib/fog/cloudstack/requests/compute/assign_virtual_machine.rb +18 -0
  79. data/lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb +68 -0
  80. data/lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb +55 -4
  81. data/lib/fog/cloudstack/requests/compute/create_security_group.rb +12 -4
  82. data/lib/fog/cloudstack/requests/compute/create_zone.rb +20 -0
  83. data/lib/fog/cloudstack/requests/compute/delete_security_group.rb +17 -0
  84. data/lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb +23 -1
  85. data/lib/fog/cloudstack/requests/compute/list_firewall_rules.rb +15 -0
  86. data/lib/fog/cloudstack/requests/compute/list_security_groups.rb +22 -4
  87. data/lib/fog/cloudstack/requests/compute/query_async_job_result.rb +15 -3
  88. data/lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb +42 -0
  89. data/lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb +29 -3
  90. data/lib/fog/core.rb +1 -0
  91. data/lib/fog/core/attributes.rb +1 -1
  92. data/lib/fog/core/current_machine.rb +2 -2
  93. data/lib/fog/core/scp.rb +8 -0
  94. data/lib/fog/core/ssh.rb +8 -0
  95. data/lib/fog/dynect/dns.rb +14 -5
  96. data/lib/fog/ibm/requests/compute/create_instance.rb +1 -1
  97. data/lib/fog/libvirt/requests/compute/create_volume.rb +1 -1
  98. data/lib/fog/libvirt/requests/compute/list_volumes.rb +1 -1
  99. data/lib/fog/local/models/storage/file.rb +12 -1
  100. data/lib/fog/local/storage.rb +25 -1
  101. data/lib/fog/ninefold/compute.rb +1 -0
  102. data/lib/fog/openstack.rb +3 -1
  103. data/lib/fog/openstack/compute.rb +13 -2
  104. data/lib/fog/openstack/models/compute/servers.rb +10 -2
  105. data/lib/fog/openstack/requests/compute/create_flavor.rb +2 -2
  106. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  107. data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
  108. data/lib/fog/openstack/requests/compute/create_volume.rb +1 -1
  109. data/lib/fog/openstack/requests/compute/get_flavor_details.rb +7 -7
  110. data/lib/fog/openstack/requests/compute/get_quota.rb +1 -12
  111. data/lib/fog/openstack/requests/compute/get_quota_defaults.rb +1 -12
  112. data/lib/fog/openstack/requests/compute/get_volume_details.rb +1 -1
  113. data/lib/fog/openstack/requests/compute/list_flavors.rb +7 -7
  114. data/lib/fog/openstack/requests/compute/list_flavors_detail.rb +7 -7
  115. data/lib/fog/openstack/requests/compute/list_security_groups.rb +7 -7
  116. data/lib/fog/openstack/requests/compute/list_servers_detail.rb +4 -3
  117. data/lib/fog/openstack/requests/compute/list_volumes.rb +6 -8
  118. data/lib/fog/openstack/requests/compute/update_quota.rb +2 -15
  119. data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
  120. data/lib/fog/openstack/requests/identity/list_roles.rb +1 -1
  121. data/lib/fog/openstack/requests/image/create_image.rb +3 -1
  122. data/lib/fog/openstack/requests/image/list_public_images.rb +19 -1
  123. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +20 -2
  124. data/lib/fog/openstack/requests/image/update_image.rb +1 -1
  125. data/lib/fog/rackspace.rb +2 -0
  126. data/lib/fog/rackspace/databases.rb +121 -0
  127. data/lib/fog/rackspace/identity.rb +83 -0
  128. data/lib/fog/rackspace/load_balancers.rb +3 -0
  129. data/lib/fog/rackspace/models/databases/database.rb +32 -0
  130. data/lib/fog/rackspace/models/databases/databases.rb +31 -0
  131. data/lib/fog/rackspace/models/databases/flavor.rb +15 -0
  132. data/lib/fog/rackspace/models/databases/flavors.rb +25 -0
  133. data/lib/fog/rackspace/models/databases/instance.rb +104 -0
  134. data/lib/fog/rackspace/models/databases/instances.rb +25 -0
  135. data/lib/fog/rackspace/models/databases/user.rb +32 -0
  136. data/lib/fog/rackspace/models/databases/users.rb +31 -0
  137. data/lib/fog/rackspace/models/identity/credential.rb +13 -0
  138. data/lib/fog/rackspace/models/identity/credentials.rb +32 -0
  139. data/lib/fog/rackspace/models/identity/role.rb +14 -0
  140. data/lib/fog/rackspace/models/identity/roles.rb +32 -0
  141. data/lib/fog/rackspace/models/identity/tenant.rb +15 -0
  142. data/lib/fog/rackspace/models/identity/tenants.rb +28 -0
  143. data/lib/fog/rackspace/models/identity/user.rb +53 -0
  144. data/lib/fog/rackspace/models/identity/users.rb +36 -0
  145. data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +17 -0
  146. data/lib/fog/rackspace/requests/databases/check_root_user.rb +15 -0
  147. data/lib/fog/rackspace/requests/databases/create_database.rb +24 -0
  148. data/lib/fog/rackspace/requests/databases/create_instance.rb +26 -0
  149. data/lib/fog/rackspace/requests/databases/create_user.rb +24 -0
  150. data/lib/fog/rackspace/requests/databases/delete_database.rb +15 -0
  151. data/lib/fog/rackspace/requests/databases/delete_instance.rb +15 -0
  152. data/lib/fog/rackspace/requests/databases/delete_user.rb +15 -0
  153. data/lib/fog/rackspace/requests/databases/enable_root_user.rb +15 -0
  154. data/lib/fog/rackspace/requests/databases/get_flavor.rb +15 -0
  155. data/lib/fog/rackspace/requests/databases/get_instance.rb +15 -0
  156. data/lib/fog/rackspace/requests/databases/list_databases.rb +15 -0
  157. data/lib/fog/rackspace/requests/databases/list_flavors.rb +15 -0
  158. data/lib/fog/rackspace/requests/databases/list_instances.rb +15 -0
  159. data/lib/fog/rackspace/requests/databases/list_users.rb +15 -0
  160. data/lib/fog/rackspace/requests/databases/resize_instance.rb +22 -0
  161. data/lib/fog/rackspace/requests/databases/resize_instance_volume.rb +24 -0
  162. data/lib/fog/rackspace/requests/databases/restart_instance.rb +20 -0
  163. data/lib/fog/rackspace/requests/identity/create_token.rb +25 -0
  164. data/lib/fog/rackspace/requests/identity/create_user.rb +25 -0
  165. data/lib/fog/rackspace/requests/identity/delete_user.rb +15 -0
  166. data/lib/fog/rackspace/requests/identity/get_credentials.rb +15 -0
  167. data/lib/fog/rackspace/requests/identity/get_user_by_id.rb +15 -0
  168. data/lib/fog/rackspace/requests/identity/get_user_by_name.rb +15 -0
  169. data/lib/fog/rackspace/requests/identity/list_credentials.rb +22 -0
  170. data/lib/fog/rackspace/requests/identity/list_tenants.rb +22 -0
  171. data/lib/fog/rackspace/requests/identity/list_user_roles.rb +22 -0
  172. data/lib/fog/rackspace/requests/identity/list_users.rb +22 -0
  173. data/lib/fog/rackspace/requests/identity/update_user.rb +24 -0
  174. data/lib/fog/rackspace/requests/load_balancers/get_ssl_termination.rb +15 -0
  175. data/lib/fog/rackspace/requests/load_balancers/remove_ssl_termination.rb +15 -0
  176. data/lib/fog/rackspace/requests/load_balancers/set_ssl_termination.rb +31 -0
  177. data/lib/fog/rackspace/storage.rb +1 -1
  178. data/lib/fog/vsphere/models/compute/server.rb +1 -0
  179. data/lib/fog/vsphere/requests/compute/vm_clone.rb +2 -2
  180. data/tests/aws/models/compute/address_tests.rb +2 -1
  181. data/tests/aws/models/compute/volume_tests.rb +1 -1
  182. data/tests/aws/models/dns/records_tests.rb +19 -1
  183. data/tests/aws/models/storage/directory_tests.rb +1 -1
  184. data/tests/aws/models/storage/url_tests.rb +7 -1
  185. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +4 -2
  186. data/tests/aws/requests/compute/address_tests.rb +19 -1
  187. data/tests/aws/requests/elasticache/cache_cluster_tests.rb +4 -4
  188. data/tests/aws/requests/elb/helper.rb +13 -2
  189. data/tests/aws/requests/iam/access_key_tests.rb +1 -3
  190. data/tests/cloudstack/compute/models/security_group_rule_tests.rb +29 -0
  191. data/tests/cloudstack/compute/models/security_group_tests.rb +16 -0
  192. data/tests/cloudstack/compute/models/security_groups_tests.rb +19 -0
  193. data/tests/cloudstack/compute/models/server_tests.rb +18 -0
  194. data/tests/cloudstack/compute/models/volume_tests.rb +34 -0
  195. data/tests/cloudstack/compute/models/volumes_tests.rb +17 -0
  196. data/tests/compute/helper.rb +10 -3
  197. data/tests/core/current_machine_tests.rb +32 -0
  198. data/tests/helper.rb +1 -1
  199. data/tests/helpers/mock_helper.rb +3 -0
  200. data/tests/hp/requests/compute/address_tests.rb +2 -1
  201. data/tests/joyent/requests/compute/datasets_tests.rb +12 -3
  202. data/tests/local/models/file_tests.rb +43 -0
  203. data/tests/local/storage_tests.rb +40 -0
  204. data/tests/openstack/requests/compute/flavor_tests.rb +1 -1
  205. data/tests/openstack/requests/compute/server_tests.rb +3 -3
  206. data/tests/openstack/requests/compute/volume_tests.rb +1 -1
  207. data/tests/openstack/requests/identity/role_tests.rb +1 -1
  208. data/tests/rackspace/databases_tests.rb +26 -0
  209. data/tests/rackspace/models/databases/database_tests.rb +17 -0
  210. data/tests/rackspace/models/databases/databases_tests.rb +17 -0
  211. data/tests/rackspace/models/databases/flavors_tests.rb +20 -0
  212. data/tests/rackspace/models/databases/instance_tests.rb +43 -0
  213. data/tests/rackspace/models/databases/instances_tests.rb +14 -0
  214. data/tests/rackspace/models/databases/user_tests.rb +21 -0
  215. data/tests/rackspace/models/databases/users_tests.rb +21 -0
  216. data/tests/rackspace/models/identity/credentials_tests.rb +16 -0
  217. data/tests/rackspace/models/identity/roles_tests.rb +16 -0
  218. data/tests/rackspace/models/identity/tenants_tests.rb +21 -0
  219. data/tests/rackspace/models/identity/user_tests.rb +17 -0
  220. data/tests/rackspace/models/identity/users_tests.rb +17 -0
  221. data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +20 -0
  222. data/tests/rackspace/requests/databases/database_tests.rb +36 -0
  223. data/tests/rackspace/requests/databases/flavor_tests.rb +16 -0
  224. data/tests/rackspace/requests/databases/helper.rb +84 -0
  225. data/tests/rackspace/requests/databases/instance_tests.rb +77 -0
  226. data/tests/rackspace/requests/databases/user_tests.rb +37 -0
  227. data/tests/rackspace/requests/identity/tenants_tests.rb +21 -0
  228. data/tests/rackspace/requests/identity/token_tests.rb +63 -0
  229. data/tests/rackspace/requests/identity/user_tests.rb +107 -0
  230. data/tests/rackspace/requests/load_balancers/helper.rb +70 -1
  231. data/tests/rackspace/requests/load_balancers/ssl_termination_tests.rb +38 -0
  232. data/tests/storage/models/file_tests.rb +1 -1
  233. metadata +129 -13
  234. data/spec/core/current_machine_spec.rb +0 -32
  235. data/spec/lib/fog/aws/parsers/sqs/receive_message_spec.rb +0 -58
  236. data/spec/spec_helper.rb +0 -8
@@ -43,16 +43,17 @@ module Fog
43
43
  Excon::Response.new.tap do |response|
44
44
  if cidrBlock
45
45
  response.status = 200
46
+ self.data[:vpcs].push({
47
+ 'vpcId' => Fog::AWS::Mock.request_id,
48
+ 'state' => 'pending',
49
+ 'cidrBlock' => cidrBlock,
50
+ 'dhcpOptionsId' => Fog::AWS::Mock.request_id,
51
+ 'tagSet' => {}
46
52
 
53
+ })
47
54
  response.body = {
48
55
  'requestId' => Fog::AWS::Mock.request_id,
49
- 'vpcSet' => [
50
- 'vpcId' => Fog::AWS::Mock.request_id,
51
- 'state' => 'pending',
52
- 'cidrBlock' => cidrBlock,
53
- 'dhcpOptionsId' => Fog::AWS::Mock.request_id,
54
- 'tagSet' => {}
55
- ]
56
+ 'vpcSet' => self.data[:vpcs]
56
57
  }
57
58
  else
58
59
  response.status = 400
@@ -32,6 +32,7 @@ module Fog
32
32
  Excon::Response.new.tap do |response|
33
33
  if dhcp_options_id
34
34
  response.status = 200
35
+ self.data[:dhcp_options].reject! { |v| v['dhcpOptionsId'] == dhcp_options_id }
35
36
 
36
37
  response.body = {
37
38
  'requestId' => Fog::AWS::Mock.request_id,
@@ -30,6 +30,7 @@ module Fog
30
30
  Excon::Response.new.tap do |response|
31
31
  if internet_gateway_id
32
32
  response.status = 200
33
+ self.data[:internet_gateways].reject! { |v| v['internetGatewayId'] == internet_gateway_id }
33
34
 
34
35
  response.body = {
35
36
  'requestId' => Fog::AWS::Mock.request_id,
@@ -30,6 +30,7 @@ module Fog
30
30
  def delete_subnet(subnet_id)
31
31
  Excon::Response.new.tap do |response|
32
32
  if subnet_id
33
+ self.data[:subnets].reject! { |v| v['subnetId'] == subnet_id }
33
34
  response.status = 200
34
35
 
35
36
  response.body = {
@@ -34,7 +34,8 @@ module Fog
34
34
  Excon::Response.new.tap do |response|
35
35
  if vpc_id
36
36
  response.status = 200
37
-
37
+ self.data[:vpcs].reject! { |v| v['vpcId'] == vpc_id }
38
+
38
39
  response.body = {
39
40
  'requestId' => Fog::AWS::Mock.request_id,
40
41
  'return' => true
@@ -50,6 +50,7 @@ module Fog
50
50
  {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1b", "zoneState" => "available"},
51
51
  {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1c", "zoneState" => "available"},
52
52
  {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1d", "zoneState" => "available"},
53
+ {"messageSet" => [], "regionName" => "us-east-1", "zoneName" => "us-east-1e", "zoneState" => "available"},
53
54
 
54
55
  {"messageSet" => [], "regionName" => "us-west-1", "zoneName" => "us-west-1a", "zoneState" => "available"},
55
56
  {"messageSet" => [], "regionName" => "us-west-1", "zoneName" => "us-west-1b", "zoneState" => "available"},
@@ -45,14 +45,7 @@ module Fog
45
45
  response.status = 200
46
46
  response.body = {
47
47
  'requestId' => Fog::AWS::Mock.request_id,
48
- 'dhcpOptionsSet' => [
49
- 'dhcpOptionsId' => Fog::AWS::Mock.dhcp_options_id,
50
- 'dhcpConfigurationSet' => {
51
- 'key' => 'domain-name',
52
- 'valueSet' => ["example.com"],
53
- },
54
- 'tagSet' => {}
55
- ]
48
+ 'dhcpOptionsSet' => self.data[:dhcp_options]
56
49
  }
57
50
  end
58
51
  end
@@ -148,6 +148,8 @@ module Fog
148
148
  elsif state_reason_key = filter_key.split('state-reason-')[1]
149
149
  aliased_key = state_reason_aliases[state_reason_key]
150
150
  instance_set = instance_set.reject{|instance| ![*filter_value].include?(instance['stateReason'][aliased_key])}
151
+ elsif filter_key == "group-name"
152
+ instance_set = instance_set.reject {|instance| !instance['groupSet'].include?(filter_value)}
151
153
  else
152
154
  aliased_key = aliases[filter_key]
153
155
  instance_set = instance_set.reject {|instance| ![*filter_value].include?(instance[aliased_key])}
@@ -177,7 +179,7 @@ module Fog
177
179
  instance['ipAddress'] = Fog::AWS::Mock.ip_address
178
180
  instance['originalIpAddress'] = instance['ipAddress']
179
181
  instance['dnsName'] = Fog::AWS::Mock.dns_name_for(instance['ipAddress'])
180
- instance['privateIpAddress'] = Fog::AWS::Mock.ip_address
182
+ instance['privateIpAddress'] = Fog::AWS::Mock.private_ip_address
181
183
  instance['privateDnsName'] = Fog::AWS::Mock.private_dns_name_for(instance['privateIpAddress'])
182
184
  instance['instanceState'] = { 'code' => 16, 'name' => 'running' }
183
185
  end
@@ -44,14 +44,7 @@ module Fog
44
44
  response.status = 200
45
45
  response.body = {
46
46
  'requestId' => Fog::AWS::Mock.request_id,
47
- 'internetGatewaySet' => [
48
- 'internetGatewayId' => Fog::AWS::Mock.request_id,
49
- 'attachmentSet' => {
50
- 'vpcId' => Fog::AWS::Mock.request_id,
51
- 'state' => 'pending',
52
- },
53
- 'tagSet' => {}
54
- ]
47
+ 'internetGatewaySet' => self.data[:internet_gateways]
55
48
  }
56
49
  end
57
50
  end
@@ -48,15 +48,7 @@ module Fog
48
48
  response.status = 200
49
49
  response.body = {
50
50
  'requestId' => Fog::AWS::Mock.request_id,
51
- 'subnetSet' => [
52
- 'subnetId' => Fog::AWS::Mock.request_id,
53
- 'state' => 'pending',
54
- 'vpcId' => Fog::AWS::Mock.request_id,
55
- 'cidrBlock' => '10.255.255.0/24',
56
- 'availableIpAddressCount' => 255,
57
- 'availabilityZone' => 'us-east-1c',
58
- 'tagSet' => {}
59
- ]
51
+ 'subnetSet' => self.data[:subnets]
60
52
  }
61
53
  end
62
54
  end
@@ -45,14 +45,7 @@ module Fog
45
45
  response.status = 200
46
46
  response.body = {
47
47
  'requestId' => Fog::AWS::Mock.request_id,
48
- 'vpcSet' => [
49
- 'vpcId' => Fog::AWS::Mock.request_id,
50
- 'state' => 'pending',
51
- 'cidrBlock' => '10.255.255.0/24',
52
- 'dhcpOptionsId' => Fog::AWS::Mock.request_id,
53
- 'instanceTenancy' => 'default',
54
- 'tagSet' => {}
55
- ]
48
+ 'vpcSet' => self.data[:vpcs]
56
49
  }
57
50
  end
58
51
  end
@@ -14,7 +14,7 @@ module Fog
14
14
  # * 'return'<~Boolean> - success?
15
15
  #
16
16
  # {Amazon API Reference}[http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ReleaseAddress.html]
17
- #
17
+ #
18
18
  # non-VPC: requires public_ip only
19
19
  # VPC: requires allocation_id only
20
20
  def release_address(ip_or_allocation)
@@ -35,9 +35,17 @@ module Fog
35
35
 
36
36
  class Mock
37
37
 
38
- def release_address(public_ip)
38
+ def release_address(public_ip_or_allocation_id)
39
39
  response = Excon::Response.new
40
- if (address = self.data[:addresses].delete(public_ip))
40
+
41
+ address = self.data[:addresses][public_ip_or_allocation_id] || self.data[:addresses].values.detect {|a| a['allocationId'] == public_ip_or_allocation_id }
42
+
43
+ if address
44
+ if address['allocationId'] && public_ip_or_allocation_id == address['publicIp']
45
+ raise Fog::Compute::AWS::Error, "InvalidParameterValue => You must specify an allocation id when releasing a VPC elastic IP address"
46
+ end
47
+
48
+ self.data[:addresses].delete(address['publicIp'])
41
49
  response.status = 200
42
50
  response.body = {
43
51
  'requestId' => Fog::AWS::Mock.request_id,
@@ -45,7 +53,7 @@ module Fog
45
53
  }
46
54
  response
47
55
  else
48
- raise Fog::Compute::AWS::Error.new("AuthFailure => The address '#{public_ip}' does not belong to you.")
56
+ raise Fog::Compute::AWS::Error.new("AuthFailure => The address '#{public_ip_or_allocation_id}' does not belong to you.")
49
57
  end
50
58
  end
51
59
 
@@ -34,6 +34,7 @@ module Fog
34
34
 
35
35
  instance_set = self.data[:instances].values
36
36
  instance_set = apply_tag_filters(instance_set, {'instance_id' => instance_ids}, 'instanceId')
37
+ instance_set = instance_set.find_all {|x| instance_ids.include?(x["instanceId"]) }
37
38
 
38
39
  if instance_set.empty?
39
40
  raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_ids.first}' does not exist")
@@ -35,6 +35,7 @@ module Fog
35
35
 
36
36
  instance_set = self.data[:instances].values
37
37
  instance_set = apply_tag_filters(instance_set, {'instance_id' => instance_ids}, 'instanceId')
38
+ instance_set = instance_set.find_all {|x| instance_ids.include?(x["instanceId"]) }
38
39
 
39
40
  if instance_set.empty?
40
41
  raise Fog::Compute::AWS::NotFound.new("The instance ID '#{instance_ids.first}' does not exist")
@@ -43,7 +43,7 @@ module Fog
43
43
  'AutoMinorVersionUpgrade' => options[:auto_minor_version_upgrade],
44
44
  'CacheParameterGroupName' => options[:parameter_group_name],
45
45
  'EngineVersion' => options[:engine_version],
46
- 'NotificationTopicArn' => (options[:notification_topic_arn]).strip,
46
+ 'NotificationTopicArn' => options[:notification_topic_arn],
47
47
  'Port' => options[:port],
48
48
  'PreferredAvailabilityZone' => options[:preferred_availablility_zone],
49
49
  'PreferredMaintenanceWindow' => options[:preferred_maintenance_window],
@@ -54,9 +54,33 @@ module Fog
54
54
 
55
55
  class Mock
56
56
  def create_cache_cluster(id, options = {})
57
- Fog::Mock.not_implemented
57
+ response = Excon::Response.new
58
+ cluster = { # create an in-memory representation of this cluster
59
+ 'CacheClusterId' => id.strip,
60
+ 'NumCacheNodes' => options[:num_nodes] || 1,
61
+ 'CacheNodeType' => options[:node_type] || 'cache.m1.large',
62
+ 'Engine' => options[:engine] || 'memcached',
63
+ 'EngineVersion' => options[:engine_version] || '1.4.5',
64
+ 'CacheClusterStatus' => 'available',
65
+ 'CacheNodes' => create_cache_nodes(id.strip, options[:num_nodes]),
66
+ 'CacheSecurityGroups' => [],
67
+ 'CacheParameterGroup' => { 'CacheParameterGroupName' =>
68
+ options[:parameter_group_name] || 'default.memcached1.4' },
69
+ 'PendingModifiedValues' => {},
70
+ 'AutoMinorVersionUpgrade' =>
71
+ options[:auto_minor_version_upgrade] || 'true',
72
+ 'PreferredMaintenanceWindow' =>
73
+ options[:preferred_maintenance_window] || 'sun:05:00-sun:09:00',
74
+ }
75
+ self.data[:clusters][id] = cluster # store the in-memory cluster
76
+ response.body = {
77
+ 'CacheCluster' => cluster.merge({'CacheClusterStatus' => 'creating'}),
78
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
79
+ }
80
+ response
58
81
  end
59
82
  end
83
+
60
84
  end
61
85
  end
62
86
  end
@@ -24,9 +24,18 @@ module Fog
24
24
 
25
25
  class Mock
26
26
  def delete_cache_cluster(cluster_id)
27
- Fog::Mock.not_implemented
27
+ response = Excon::Response.new
28
+ cluster = self.data[:clusters][cluster_id]
29
+ cluster['CacheClusterStatus'] = 'deleting'
30
+ response.body = {
31
+ 'CacheClusters' => self.data[:clusters].values,
32
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
33
+ }
34
+ self.data[:clusters].delete(cluster_id)
35
+ response
28
36
  end
29
37
  end
38
+
30
39
  end
31
40
  end
32
41
  end
@@ -31,9 +31,24 @@ module Fog
31
31
 
32
32
  class Mock
33
33
  def describe_cache_clusters(id = nil, options = {})
34
- Fog::Mock.not_implemented
34
+ response = Excon::Response.new
35
+ all_clusters = self.data[:clusters].values.map do |cluster|
36
+ cluster.merge!(options[:show_node_info] ? {
37
+ 'CacheClusterCreateTime' => DateTime.now - 60,
38
+ 'PreferredAvailabilityZone' => 'us-east-1a'
39
+ } : {})
40
+ end
41
+ if (id != nil) && (all_clusters.empty?)
42
+ raise Fog::AWS::Elasticache::NotFound
43
+ end
44
+ response.body = {
45
+ 'CacheClusters' => all_clusters,
46
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
47
+ }
48
+ response
35
49
  end
36
50
  end
51
+
37
52
  end
38
53
  end
39
54
  end
@@ -51,7 +51,7 @@ module Fog
51
51
  'AutoMinorVersionUpgrade' => options[:auto_minor_version_upgrade],
52
52
  'CacheParameterGroupName' => options[:parameter_group_name],
53
53
  'EngineVersion' => options[:engine_version],
54
- 'NotificationTopicArn' => (options[:notification_topic_arn]).strip,
54
+ 'NotificationTopicArn' => options[:notification_topic_arn],
55
55
  'NotificationTopicStatus' => options[:notification_topic_status],
56
56
  'PreferredMaintenanceWindow' => options[:preferred_maintenance_window],
57
57
  :parser => Fog::Parsers::AWS::Elasticache::SingleCacheCluster.new
@@ -61,10 +61,42 @@ module Fog
61
61
  end
62
62
 
63
63
  class Mock
64
- def modify_cache_cluster
65
- Fog::Mock.not_implemented
64
+ def modify_cache_cluster(id, options = {})
65
+ response = Excon::Response.new
66
+ cluster = self.data[:clusters][id]
67
+ pending_values = Hash.new
68
+ # For any given option, update the cluster's corresponding value
69
+ { :auto_minor_version_upgrade => 'AutoMinorVersionUpgrade',
70
+ :preferred_maintenance_window => 'PreferredMaintenanceWindow',
71
+ :engine_version => 'EngineVersion',
72
+ :num_nodes => 'NumCacheNodes',
73
+ }.each do |option, cluster_key|
74
+ if options[option] != nil
75
+ cluster[cluster_key] = options[option].to_s
76
+ pending_values[cluster_key] = options[option]
77
+ end
78
+ end
79
+ cache['CacheParameterGroup'] = {
80
+ 'CacheParameterGroupName' => options[:parameter_group_name]
81
+ } if options[:parameter_group_name]
82
+ if options[:num_nodes] || options[:engine_version]
83
+ cluster['CacheNodes'] =
84
+ create_cache_nodes(cluster['CacheClusterId'], options[:num_nodes])
85
+ cluster['NumCacheNodes'] = cluster['CacheNodes'].size
86
+ end
87
+ if options[:nodes_to_remove]
88
+ pending_values['CacheNodeId'] = options[:nodes_to_remove].join(',')
89
+ end
90
+ response.body = {
91
+ 'CacheCluster' => cluster.merge({
92
+ 'PendingModifiedValues' => pending_values
93
+ }),
94
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
95
+ }
96
+ response
66
97
  end
67
98
  end
99
+
68
100
  end
69
101
  end
70
102
  end
@@ -35,10 +35,18 @@ module Fog
35
35
  end
36
36
 
37
37
  class Mock
38
- def reboot_cache_cluster
39
- Fog::Mock.not_implemented
38
+ def reboot_cache_cluster(id, nodes_to_reboot)
39
+ response = Excon::Response.new
40
+ response.body = {
41
+ 'CacheCluster' => self.data[:clusters][id].merge({
42
+ 'CacheClusterStatus' => 'rebooting cache cluster nodes'
43
+ }),
44
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
45
+ }
46
+ response
40
47
  end
41
48
  end
49
+
42
50
  end
43
51
  end
44
52
  end
@@ -76,7 +76,7 @@ module Fog
76
76
  self.data[:load_balancers][lb_name] = {
77
77
  'AvailabilityZones' => availability_zones,
78
78
  'Subnets' => options[:subnet_ids],
79
- 'Scheme' => options[:scheme],
79
+ 'Scheme' => options[:scheme].nil? ? 'internet-facing' : options[:scheme],
80
80
  'SecurityGroups' => options[:security_groups],
81
81
  'CanonicalHostedZoneName' => '',
82
82
  'CanonicalHostedZoneNameID' => '',
@@ -58,7 +58,7 @@ module Fog
58
58
  end
59
59
  when "rebooting" # I don't know how to show rebooting just once before it changes to available
60
60
  # it applies pending modified values
61
- if server["PendingModifiedValues"]
61
+ unless server["PendingModifiedValues"].empty?
62
62
  server.merge!(server["PendingModifiedValues"])
63
63
  server["PendingModifiedValues"] = {}
64
64
  self.data[:tmp] ||= Time.now + Fog::Mock.delay * 2
@@ -69,13 +69,13 @@ module Fog
69
69
  end
70
70
  when "modifying"
71
71
  # TODO there are some fields that only applied after rebooting
72
- if server["PendingModifiedValues"]
72
+ unless server["PendingModifiedValues"].empty?
73
73
  server.merge!(server["PendingModifiedValues"])
74
74
  server["PendingModifiedValues"] = {}
75
75
  server["DBInstanceStatus"] = 'available'
76
76
  end
77
77
  when "available" # I'm not sure if amazon does this
78
- if server["PendingModifiedValues"]
78
+ unless server["PendingModifiedValues"].empty?
79
79
  server["DBInstanceStatus"] = 'modifying'
80
80
  end
81
81
 
data/lib/fog/aws/sqs.rb CHANGED
@@ -40,7 +40,7 @@ module Fog
40
40
  setup_credentials(options)
41
41
  @region = options[:region] || 'us-east-1'
42
42
 
43
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
43
+ unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
44
44
  raise ArgumentError, "Unknown region: #{@region.inspect}"
45
45
  end
46
46
  end
@@ -284,7 +284,7 @@ module Fog
284
284
  "s3-#{options[:region]}.amazonaws.com"
285
285
  end
286
286
  @path = options[:path] || '/'
287
- @persistent = options.fetch(:persistent, true)
287
+ @persistent = options.fetch(:persistent, false)
288
288
  @port = options[:port] || 443
289
289
  @scheme = options[:scheme] || 'https'
290
290
  end
@@ -13,6 +13,10 @@ class Rackspace < Fog::Bin
13
13
  Fog::Rackspace::LoadBalancers
14
14
  when :dns
15
15
  Fog::DNS::Rackspace
16
+ when :identity
17
+ Fog::Rackspace::Identity
18
+ when :databases
19
+ Fog::Rackspace::Databases
16
20
  else
17
21
  raise ArgumentError, "Unrecognized service: #{key}"
18
22
  end