fog 1.6.0 → 1.7.0

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 (282) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +1 -0
  3. data/Rakefile +2 -1
  4. data/changelog.txt +184 -0
  5. data/docs/cdn/index.markdown +69 -3
  6. data/fog.gemspec +2 -2
  7. data/lib/fog.rb +2 -1
  8. data/lib/fog/atmos/models/storage/file.rb +16 -14
  9. data/lib/fog/aws/auto_scaling.rb +55 -13
  10. data/lib/fog/aws/cdn.rb +69 -9
  11. data/lib/fog/aws/cloud_watch.rb +15 -1
  12. data/lib/fog/aws/compute.rb +2 -0
  13. data/lib/fog/aws/models/auto_scaling/group.rb +10 -4
  14. data/lib/fog/aws/models/cdn/distribution.rb +93 -0
  15. data/lib/fog/aws/models/cdn/distribution_helper.rb +64 -0
  16. data/lib/fog/aws/models/cdn/distributions.rb +32 -0
  17. data/lib/fog/aws/models/cdn/distributions_helper.rb +47 -0
  18. data/lib/fog/aws/models/cdn/invalidation.rb +64 -0
  19. data/lib/fog/aws/models/cdn/invalidations.rb +54 -0
  20. data/lib/fog/aws/models/cdn/streaming_distribution.rb +77 -0
  21. data/lib/fog/aws/models/cdn/streaming_distributions.rb +32 -0
  22. data/lib/fog/aws/models/compute/server.rb +0 -23
  23. data/lib/fog/aws/models/compute/spot_request.rb +2 -24
  24. data/lib/fog/aws/models/rds/server.rb +18 -0
  25. data/lib/fog/aws/models/rds/subnet_group.rb +20 -0
  26. data/lib/fog/aws/models/rds/subnet_groups.rb +27 -0
  27. data/lib/fog/aws/models/storage/file.rb +1 -1
  28. data/lib/fog/aws/parsers/auto_scaling/describe_adjustment_types.rb +15 -2
  29. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_groups.rb +39 -13
  30. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_notification_types.rb +43 -0
  31. data/lib/fog/aws/parsers/auto_scaling/describe_metric_collection_types.rb +3 -3
  32. data/lib/fog/aws/parsers/auto_scaling/describe_notification_configurations.rb +42 -0
  33. data/lib/fog/aws/parsers/auto_scaling/describe_scaling_process_types.rb +15 -2
  34. data/lib/fog/aws/parsers/auto_scaling/describe_tags.rb +46 -0
  35. data/lib/fog/aws/parsers/auto_scaling/describe_termination_policy_types.rb +44 -0
  36. data/lib/fog/aws/parsers/cdn/get_invalidation.rb +32 -0
  37. data/lib/fog/aws/parsers/cloud_formation/describe_stacks.rb +1 -1
  38. data/lib/fog/aws/parsers/cloud_watch/list_metrics.rb +1 -1
  39. data/lib/fog/aws/parsers/compute/describe_availability_zones.rb +13 -2
  40. data/lib/fog/aws/parsers/compute/describe_reserved_instances.rb +1 -1
  41. data/lib/fog/aws/parsers/elasticache/base.rb +0 -2
  42. data/lib/fog/aws/parsers/elasticache/engine_defaults_parser.rb +1 -1
  43. data/lib/fog/aws/parsers/elasticache/event_list.rb +2 -0
  44. data/lib/fog/aws/parsers/rds/base.rb +32 -0
  45. data/lib/fog/aws/parsers/rds/create_db_subnet_group.rb +38 -0
  46. data/lib/fog/aws/parsers/rds/describe_db_subnet_groups.rb +38 -0
  47. data/lib/fog/aws/parsers/rds/event_list.rb +40 -0
  48. data/lib/fog/aws/parsers/rds/subnet_group_parser.rb +38 -0
  49. data/lib/fog/aws/parsers/rds/tag_list_parser.rb +35 -0
  50. data/lib/fog/aws/rds.rb +24 -7
  51. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +36 -16
  52. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +19 -12
  53. data/lib/fog/aws/requests/auto_scaling/create_or_update_tags.rb +63 -0
  54. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -3
  55. data/lib/fog/aws/requests/auto_scaling/delete_notification_configuration.rb +21 -5
  56. data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +2 -2
  57. data/lib/fog/aws/requests/auto_scaling/delete_tags.rb +63 -0
  58. data/lib/fog/aws/requests/auto_scaling/describe_adjustment_types.rb +4 -3
  59. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +17 -13
  60. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +1 -1
  61. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_notification_types.rb +55 -0
  62. data/lib/fog/aws/requests/auto_scaling/describe_metric_collection_types.rb +6 -5
  63. data/lib/fog/aws/requests/auto_scaling/describe_notification_configurations.rb +79 -0
  64. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +1 -1
  65. data/lib/fog/aws/requests/auto_scaling/describe_scaling_process_types.rb +4 -3
  66. data/lib/fog/aws/requests/auto_scaling/describe_tags.rb +74 -0
  67. data/lib/fog/aws/requests/auto_scaling/describe_termination_policy_types.rb +53 -0
  68. data/lib/fog/aws/requests/auto_scaling/disable_metrics_collection.rb +1 -1
  69. data/lib/fog/aws/requests/auto_scaling/enable_metrics_collection.rb +2 -2
  70. data/lib/fog/aws/requests/auto_scaling/put_notification_configuration.rb +30 -11
  71. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +4 -4
  72. data/lib/fog/aws/requests/auto_scaling/put_scheduled_update_group_action.rb +8 -5
  73. data/lib/fog/aws/requests/auto_scaling/set_desired_capacity.rb +2 -2
  74. data/lib/fog/aws/requests/auto_scaling/set_instance_health.rb +2 -2
  75. data/lib/fog/aws/requests/auto_scaling/suspend_processes.rb +1 -1
  76. data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +30 -18
  77. data/lib/fog/aws/requests/cdn/delete_distribution.rb +31 -0
  78. data/lib/fog/aws/requests/cdn/delete_streaming_distribution.rb +30 -0
  79. data/lib/fog/aws/requests/cdn/get_distribution.rb +28 -0
  80. data/lib/fog/aws/requests/cdn/get_distribution_list.rb +29 -0
  81. data/lib/fog/aws/requests/cdn/get_invalidation.rb +60 -0
  82. data/lib/fog/aws/requests/cdn/get_invalidation_list.rb +41 -0
  83. data/lib/fog/aws/requests/cdn/get_streaming_distribution.rb +26 -0
  84. data/lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb +30 -0
  85. data/lib/fog/aws/requests/cdn/post_distribution.rb +44 -0
  86. data/lib/fog/aws/requests/cdn/post_invalidation.rb +33 -0
  87. data/lib/fog/aws/requests/cdn/post_streaming_distribution.rb +44 -0
  88. data/lib/fog/aws/requests/cdn/put_distribution_config.rb +28 -0
  89. data/lib/fog/aws/requests/cdn/put_streaming_distribution_config.rb +28 -0
  90. data/lib/fog/aws/requests/compute/create_image.rb +32 -5
  91. data/lib/fog/aws/requests/compute/create_subnet.rb +3 -3
  92. data/lib/fog/aws/requests/compute/create_volume.rb +2 -2
  93. data/lib/fog/aws/requests/compute/register_image.rb +1 -1
  94. data/lib/fog/aws/requests/elasticache/describe_events.rb +7 -4
  95. data/lib/fog/aws/requests/glacier/create_archive.rb +1 -1
  96. data/lib/fog/aws/requests/glacier/initiate_multipart_upload.rb +1 -1
  97. data/lib/fog/aws/requests/rds/add_tags_to_resource.rb +46 -0
  98. data/lib/fog/aws/requests/rds/create_db_instance.rb +2 -0
  99. data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +58 -0
  100. data/lib/fog/aws/requests/rds/describe_db_subnet_groups.rb +63 -0
  101. data/lib/fog/aws/requests/rds/describe_events.rb +52 -0
  102. data/lib/fog/aws/requests/rds/list_tags_for_resource.rb +44 -0
  103. data/lib/fog/aws/requests/rds/remove_tags_from_resource.rb +44 -0
  104. data/lib/fog/aws/sqs.rb +1 -1
  105. data/lib/fog/aws/storage.rb +1 -1
  106. data/lib/fog/bin/openstack.rb +5 -0
  107. data/lib/fog/bluebox/models/compute/server.rb +0 -19
  108. data/lib/fog/bluebox/requests/compute/create_block.rb +8 -8
  109. data/lib/fog/brightbox/compute.rb +56 -7
  110. data/lib/fog/brightbox/models/compute/accounts.rb +29 -0
  111. data/lib/fog/brightbox/models/compute/api_client.rb +37 -0
  112. data/lib/fog/brightbox/models/compute/api_clients.rb +24 -0
  113. data/lib/fog/brightbox/models/compute/application.rb +27 -0
  114. data/lib/fog/brightbox/models/compute/applications.rb +28 -0
  115. data/lib/fog/brightbox/models/compute/server.rb +3 -1
  116. data/lib/fog/brightbox/models/compute/users.rb +1 -3
  117. data/lib/fog/brightbox/requests/compute/create_application.rb +13 -0
  118. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +2 -2
  119. data/lib/fog/brightbox/requests/compute/destroy_application.rb +14 -0
  120. data/lib/fog/brightbox/requests/compute/get_account.rb +28 -4
  121. data/lib/fog/brightbox/requests/compute/get_application.rb +14 -0
  122. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +19 -0
  123. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +19 -0
  124. data/lib/fog/brightbox/requests/compute/get_user.rb +28 -5
  125. data/lib/fog/brightbox/requests/compute/list_accounts.rb +13 -0
  126. data/lib/fog/brightbox/requests/compute/list_applications.rb +13 -0
  127. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +14 -0
  128. data/lib/fog/brightbox/requests/compute/update_account.rb +51 -3
  129. data/lib/fog/brightbox/requests/compute/update_application.rb +15 -0
  130. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +4 -2
  131. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +37 -0
  132. data/lib/fog/clodo/models/compute/server.rb +7 -44
  133. data/lib/fog/compute/models/server.rb +23 -2
  134. data/lib/fog/core/time.rb +2 -0
  135. data/lib/fog/core/wait_for.rb +0 -2
  136. data/lib/fog/ecloud/models/compute/servers.rb +3 -1
  137. data/lib/fog/ecloud/requests/compute/get_servers.rb +1 -1
  138. data/lib/fog/ecloud/requests/compute/get_tasks.rb +1 -1
  139. data/lib/fog/go_grid/models/compute/server.rb +0 -4
  140. data/lib/fog/google/storage.rb +1 -1
  141. data/lib/fog/hp/models/compute/server.rb +1 -23
  142. data/lib/fog/hp/storage.rb +0 -1
  143. data/lib/fog/joyent/models/compute/server.rb +4 -0
  144. data/lib/fog/joyent/models/compute/servers.rb +4 -3
  145. data/lib/fog/libvirt/models/compute/server.rb +1 -27
  146. data/lib/fog/linode/models/compute/server.rb +0 -1
  147. data/lib/fog/local/models/storage/directory.rb +1 -1
  148. data/lib/fog/network.rb +26 -0
  149. data/lib/fog/ninefold/compute.rb +8 -0
  150. data/lib/fog/ninefold/requests/compute/assign_to_load_balancer_rule.rb +13 -0
  151. data/lib/fog/ninefold/requests/compute/create_load_balancer_rule.rb +11 -0
  152. data/lib/fog/ninefold/requests/compute/delete_load_balancer_rule.rb +11 -0
  153. data/lib/fog/ninefold/requests/compute/list_load_balancer_rule_instances.rb +15 -0
  154. data/lib/fog/ninefold/requests/compute/list_load_balancer_rules.rb +14 -0
  155. data/lib/fog/ninefold/requests/compute/remove_from_load_balancer_rule.rb +12 -0
  156. data/lib/fog/ninefold/requests/compute/update_load_balancer_rule.rb +15 -0
  157. data/lib/fog/ninefold/storage.rb +14 -112
  158. data/lib/fog/openstack.rb +4 -1
  159. data/lib/fog/openstack/compute.rb +20 -1
  160. data/lib/fog/openstack/identity.rb +67 -18
  161. data/lib/fog/openstack/image.rb +12 -4
  162. data/lib/fog/openstack/models/compute/security_group.rb +1 -1
  163. data/lib/fog/openstack/models/compute/server.rb +5 -23
  164. data/lib/fog/openstack/models/identity/tenants.rb +5 -3
  165. data/lib/fog/openstack/models/identity/users.rb +4 -1
  166. data/lib/fog/openstack/models/image/image.rb +6 -1
  167. data/lib/fog/openstack/models/network/network.rb +46 -0
  168. data/lib/fog/openstack/models/network/networks.rb +34 -0
  169. data/lib/fog/openstack/models/network/port.rb +52 -0
  170. data/lib/fog/openstack/models/network/ports.rb +34 -0
  171. data/lib/fog/openstack/models/network/subnet.rb +55 -0
  172. data/lib/fog/openstack/models/network/subnets.rb +34 -0
  173. data/lib/fog/openstack/network.rb +234 -0
  174. data/lib/fog/openstack/requests/compute/attach_volume.rb +10 -0
  175. data/lib/fog/openstack/requests/compute/create_security_group.rb +15 -11
  176. data/lib/fog/openstack/requests/compute/create_security_group_rule.rb +17 -15
  177. data/lib/fog/openstack/requests/compute/create_server.rb +7 -1
  178. data/lib/fog/openstack/requests/compute/create_volume.rb +10 -10
  179. data/lib/fog/openstack/requests/compute/create_volume_snapshot.rb +16 -1
  180. data/lib/fog/openstack/requests/compute/detach_volume.rb +5 -0
  181. data/lib/fog/openstack/requests/compute/get_snapshot_details.rb +4 -4
  182. data/lib/fog/openstack/requests/compute/get_volume_details.rb +9 -9
  183. data/lib/fog/openstack/requests/compute/list_security_groups.rb +3 -3
  184. data/lib/fog/openstack/requests/compute/list_volumes.rb +14 -14
  185. data/lib/fog/openstack/requests/identity/create_tenant.rb +3 -3
  186. data/lib/fog/openstack/requests/identity/create_user.rb +1 -1
  187. data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
  188. data/lib/fog/openstack/requests/identity/get_tenant.rb +1 -1
  189. data/lib/fog/openstack/requests/identity/list_roles.rb +7 -0
  190. data/lib/fog/openstack/requests/image/create_image.rb +36 -38
  191. data/lib/fog/openstack/requests/image/delete_image.rb +0 -2
  192. data/lib/fog/openstack/requests/image/list_public_images.rb +7 -25
  193. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +2 -41
  194. data/lib/fog/openstack/requests/image/update_image.rb +26 -21
  195. data/lib/fog/openstack/requests/image/update_image_members.rb +37 -0
  196. data/lib/fog/openstack/requests/network/create_network.rb +44 -0
  197. data/lib/fog/openstack/requests/network/create_port.rb +52 -0
  198. data/lib/fog/openstack/requests/network/create_subnet.rb +56 -0
  199. data/lib/fog/openstack/requests/network/delete_network.rb +30 -0
  200. data/lib/fog/openstack/requests/network/delete_port.rb +30 -0
  201. data/lib/fog/openstack/requests/network/delete_subnet.rb +30 -0
  202. data/lib/fog/openstack/requests/network/get_network.rb +42 -0
  203. data/lib/fog/openstack/requests/network/get_port.rb +48 -0
  204. data/lib/fog/openstack/requests/network/get_subnet.rb +49 -0
  205. data/lib/fog/openstack/requests/network/list_networks.rb +27 -0
  206. data/lib/fog/openstack/requests/network/list_ports.rb +27 -0
  207. data/lib/fog/openstack/requests/network/list_subnets.rb +27 -0
  208. data/lib/fog/openstack/requests/network/set_tenant.rb +21 -0
  209. data/lib/fog/openstack/requests/network/update_network.rb +41 -0
  210. data/lib/fog/openstack/requests/network/update_port.rb +44 -0
  211. data/lib/fog/openstack/requests/network/update_subnet.rb +44 -0
  212. data/lib/fog/openstack/requests/volume/create_volume.rb +10 -10
  213. data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +16 -1
  214. data/lib/fog/openstack/requests/volume/get_snapshot_details.rb +6 -6
  215. data/lib/fog/openstack/requests/volume/get_volume_details.rb +10 -10
  216. data/lib/fog/openstack/requests/volume/list_volumes.rb +14 -14
  217. data/lib/fog/openstack/volume.rb +10 -0
  218. data/lib/fog/rackspace/models/compute/server.rb +1 -24
  219. data/lib/fog/rackspace/models/compute_v2/server.rb +4 -2
  220. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +1 -1
  221. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +1 -1
  222. data/lib/fog/storm_on_demand/models/compute/server.rb +1 -5
  223. data/lib/fog/virtual_box/models/compute/server.rb +2 -44
  224. data/lib/fog/vmfusion/models/compute/server.rb +3 -36
  225. data/lib/fog/vsphere/models/compute/server.rb +1 -1
  226. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +2 -31
  227. data/lib/fog/vsphere/requests/compute/vm_clone.rb +35 -7
  228. data/tests/aws/models/cdn/distribution_tests.rb +15 -0
  229. data/tests/aws/models/cdn/distributions_tests.rb +15 -0
  230. data/tests/aws/models/cdn/invalidation_tests.rb +32 -0
  231. data/tests/aws/models/cdn/invalidations_tests.rb +15 -0
  232. data/tests/aws/models/cdn/streaming_distribution_tests.rb +15 -0
  233. data/tests/aws/models/cdn/streaming_distributions_tests.rb +15 -0
  234. data/tests/aws/models/rds/tagging_tests.rb +20 -0
  235. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +1 -11
  236. data/tests/aws/requests/auto_scaling/describe_types_tests.rb +102 -0
  237. data/tests/aws/requests/auto_scaling/helper.rb +47 -3
  238. data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +123 -0
  239. data/tests/aws/requests/auto_scaling/tag_tests.rb +62 -0
  240. data/tests/aws/requests/cdn/cdn_tests.rb +252 -0
  241. data/tests/aws/requests/compute/image_tests.rb +32 -1
  242. data/tests/aws/requests/compute/volume_tests.rb +3 -3
  243. data/tests/aws/requests/rds/describe_events.rb +16 -0
  244. data/tests/aws/requests/rds/helper.rb +26 -0
  245. data/tests/aws/requests/rds/subnet_groups_test.rb +48 -0
  246. data/tests/aws/requests/rds/tagging_tests.rb +78 -0
  247. data/tests/brightbox/requests/compute/account_tests.rb +24 -4
  248. data/tests/brightbox/requests/compute/application_test.rb +63 -0
  249. data/tests/brightbox/requests/compute/helper.rb +49 -1
  250. data/tests/helper.rb +4 -1
  251. data/tests/local/models/directory_tests.rb +16 -0
  252. data/tests/ninefold/requests/compute/helper.rb +53 -0
  253. data/tests/ninefold/requests/compute/load_balancer_tests.rb +66 -0
  254. data/tests/openstack/models/image/image_tests.rb +1 -0
  255. data/tests/openstack/models/network/network_tests.rb +24 -0
  256. data/tests/openstack/models/network/networks_tests.rb +21 -0
  257. data/tests/openstack/models/network/port_tests.rb +28 -0
  258. data/tests/openstack/models/network/ports_tests.rb +25 -0
  259. data/tests/openstack/models/network/subnet_tests.rb +30 -0
  260. data/tests/openstack/models/network/subnets_tests.rb +27 -0
  261. data/tests/openstack/requests/compute/image_tests.rb +3 -4
  262. data/tests/openstack/requests/compute/quota_tests.rb +2 -0
  263. data/tests/openstack/requests/compute/security_group_tests.rb +10 -10
  264. data/tests/openstack/requests/compute/server_tests.rb +3 -1
  265. data/tests/openstack/requests/compute/volume_tests.rb +11 -12
  266. data/tests/openstack/requests/identity/tenant_tests.rb +2 -1
  267. data/tests/openstack/requests/image/image_tests.rb +66 -45
  268. data/tests/openstack/requests/network/network_tests.rb +56 -0
  269. data/tests/openstack/requests/network/port_tests.rb +63 -0
  270. data/tests/openstack/requests/network/subnet_tests.rb +66 -0
  271. data/tests/rackspace/models/identity/user_tests.rb +1 -1
  272. data/tests/rackspace/models/identity/users_tests.rb +1 -1
  273. metadata +137 -13
  274. data/lib/fog/ninefold/models/storage/directories.rb +0 -48
  275. data/lib/fog/ninefold/models/storage/directory.rb +0 -53
  276. data/lib/fog/ninefold/models/storage/file.rb +0 -108
  277. data/lib/fog/ninefold/models/storage/files.rb +0 -73
  278. data/lib/fog/ninefold/requests/storage/delete_namespace.rb +0 -19
  279. data/lib/fog/ninefold/requests/storage/get_namespace.rb +0 -20
  280. data/lib/fog/ninefold/requests/storage/head_namespace.rb +0 -20
  281. data/lib/fog/ninefold/requests/storage/post_namespace.rb +0 -20
  282. data/lib/fog/ninefold/requests/storage/put_namespace.rb +0 -20
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module RDS
5
+ require 'fog/aws/parsers/rds/base'
6
+
7
+ class EventListParser < Base
8
+
9
+ def reset
10
+ super
11
+ @response['Events'] = []
12
+ end
13
+
14
+ def start_element(name, attrs = [])
15
+ super
16
+ case name
17
+ when 'Event'; then @event = {}
18
+ end
19
+
20
+ end
21
+
22
+ def end_element(name)
23
+ case name
24
+ when 'Date'
25
+ @event[name] = DateTime.parse(value.strip)
26
+ when 'Message', 'SourceIdentifier', 'SourceType'
27
+ @event[name] = value ? value.strip : name
28
+ when 'Event'
29
+ @response['Events'] << @event unless @event.empty?
30
+ when 'IsTruncated', 'Marker', 'NextMarker'
31
+ @response[name] = value
32
+ else
33
+ super
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module RDS
5
+
6
+ class SubnetGroupParser < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @db_subnet_group = fresh_subnet_group
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ super
14
+ end
15
+
16
+ def end_element(name)
17
+ case name
18
+ when 'VpcId' then @db_subnet_group['VpcId'] = value
19
+ when 'SubnetGroupStatus' then @db_subnet_group['SubnetGroupStatus'] = value
20
+ when 'DBSubnetGroupDescription' then @db_subnet_group['DBSubnetGroupDescription'] = value
21
+ when 'DBSubnetGroupName' then @db_subnet_group['DBSubnetGroupName'] = value
22
+ when 'SubnetIdentifier' then @db_subnet_group['Subnets'] << value
23
+ when 'Marker'
24
+ @response['DescribeDBSubnetGroupsResult']['Marker'] = value
25
+ when 'RequestId'
26
+ @response['ResponseMetadata'][name] = value
27
+ end
28
+ end
29
+
30
+ def fresh_subnet_group
31
+ {'Subnets' => []}
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module RDS
5
+ # parses an XML-formatted list of resource tags from AWS
6
+ class TagListParser < Fog::Parsers::Base
7
+
8
+ # each tag is modeled as a String pair (2-element Array)
9
+ def reset
10
+ @this_key = nil
11
+ @this_value = nil
12
+ @tags = Hash.new
13
+ @response = {'ListTagsForResourceResult' => {'TagList' => {}}}
14
+ end
15
+
16
+ def end_element(name)
17
+ super
18
+ case name
19
+ when 'Tag'
20
+ @tags[@this_key] = @this_value
21
+ @this_key, @this_value = nil, nil
22
+ when 'Key'
23
+ @this_key = value
24
+ when 'Value'
25
+ @this_value = value
26
+ when 'TagList'
27
+ @response['ListTagsForResourceResult']['TagList'] = @tags
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -6,14 +6,14 @@ module Fog
6
6
  extend Fog::AWS::CredentialFetcher::ServiceMethods
7
7
 
8
8
  class IdentifierTaken < Fog::Errors::Error; end
9
-
9
+
10
10
  class AuthorizationAlreadyExists < Fog::Errors::Error; end
11
11
 
12
12
  requires :aws_access_key_id, :aws_secret_access_key
13
13
  recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at
14
14
 
15
15
  request_path 'fog/aws/requests/rds'
16
-
16
+ request :describe_events
17
17
  request :create_db_instance
18
18
  request :modify_db_instance
19
19
  request :describe_db_instances
@@ -23,11 +23,14 @@ module Fog
23
23
  request :describe_db_engine_versions
24
24
  request :describe_db_reserved_instances
25
25
 
26
+ request :add_tags_to_resource
27
+ request :list_tags_for_resource
28
+ request :remove_tags_from_resource
29
+
26
30
  request :describe_db_snapshots
27
31
  request :create_db_snapshot
28
32
  request :delete_db_snapshot
29
33
 
30
-
31
34
  request :create_db_parameter_group
32
35
  request :delete_db_parameter_group
33
36
  request :modify_db_parameter_group
@@ -44,6 +47,10 @@ module Fog
44
47
  request :restore_db_instance_from_db_snapshot
45
48
  request :restore_db_instance_to_point_in_time
46
49
 
50
+ request :create_db_subnet_group
51
+ request :describe_db_subnet_groups
52
+ # TODO: :delete_db_subnet_group, :modify_db_subnet_group
53
+
47
54
  model_path 'fog/aws/models/rds'
48
55
  model :server
49
56
  collection :servers
@@ -58,6 +65,9 @@ module Fog
58
65
  model :security_group
59
66
  collection :security_groups
60
67
 
68
+ model :subnet_group
69
+ collection :subnet_groups
70
+
61
71
  class Mock
62
72
 
63
73
  def self.data
@@ -66,6 +76,7 @@ module Fog
66
76
  region_hash[key] = {
67
77
  :servers => {},
68
78
  :security_groups => {},
79
+ :subnet_groups => {},
69
80
  :snapshots => {},
70
81
  :parameter_groups => {"default.mysql5.1" => { "DBParameterGroupFamily"=>"mysql5.1",
71
82
  "Description"=>"Default parameter group for mysql5.1",
@@ -111,6 +122,8 @@ module Fog
111
122
  end
112
123
 
113
124
  class Real
125
+ attr_reader :region
126
+
114
127
  include Fog::AWS::CredentialFetcher::ConnectionMethods
115
128
  # Initialize connection to ELB
116
129
  #
@@ -135,8 +148,8 @@ module Fog
135
148
  setup_credentials(options)
136
149
  @connection_options = options[:connection_options] || {}
137
150
 
138
- options[:region] ||= 'us-east-1'
139
- @host = options[:host] || "rds.#{options[:region]}.amazonaws.com"
151
+ @region = options[:region] || 'us-east-1'
152
+ @host = options[:host] || "rds.#{@region}.amazonaws.com"
140
153
  @path = options[:path] || '/'
141
154
  @persistent = options[:persistent] || false
142
155
  @port = options[:port] || 443
@@ -144,6 +157,10 @@ module Fog
144
157
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
145
158
  end
146
159
 
160
+ def owner_id
161
+ @owner_id ||= Fog::AWS[:rds].security_groups.get('default').owner_id
162
+ end
163
+
147
164
  def reload
148
165
  @connection.reset
149
166
  end
@@ -156,7 +173,7 @@ module Fog
156
173
  @aws_session_token = options[:aws_session_token]
157
174
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
158
175
 
159
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
176
+ @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
160
177
  end
161
178
 
162
179
  def request(params)
@@ -174,7 +191,7 @@ module Fog
174
191
  :host => @host,
175
192
  :path => @path,
176
193
  :port => @port,
177
- :version => '2012-01-15' #'2011-04-01'
194
+ :version => '2012-09-17' #'2011-04-01'
178
195
  }
179
196
  )
180
197
 
@@ -23,20 +23,36 @@ module Fog
23
23
  # * 'DefaultCooldown'<~Integer> - The amount of time, in seconds,
24
24
  # after a scaling activity completes before any further trigger-
25
25
  # related scaling activities can start.
26
- # * 'DesiredCapacity'<~Integer> - The number of EC2 instances that
27
- # should be running in the group. For more information, see
28
- # set_desired_capacity.
26
+ # * 'DesiredCapacity'<~Integer> - The number of Amazon EC2 instances
27
+ # that should be running in the group.
29
28
  # * 'HealthCheckGracePeriod'<~Integer> - Length of time in seconds
30
- # after a new EC2 instance comes into service that Auto Scaling
31
- # starts checking its health.
29
+ # after a new Amazon EC2 instance comes into service that Auto
30
+ # Scaling starts checking its health.
32
31
  # * 'HealthCheckType'<~String> - The service you want the health
33
32
  # status from, Amazon EC2 or Elastic Load Balancer. Valid values
34
33
  # are "EC2" or "ELB".
35
34
  # * 'LoadBalancerNames'<~Array> - A list of LoadBalancers to use.
36
35
  # * 'PlacementGroup'<~String> - Physical location of your cluster
37
36
  # placement group created in Amazon EC2.
38
- # * 'VPCZoneIdentifier'<~String> - Subnet identifier of the Virtual
39
- # Private Cloud.
37
+ # * 'Tags'<~Array>:
38
+ # * tag<~Hash>:
39
+ # * 'Key'<~String> - The key of the tag.
40
+ # * 'PropagateAtLaunch'<~Boolean> - Specifies whether the new tag
41
+ # will be applied to instances launched after the tag is
42
+ # created. The same behavior applies to updates: If you change
43
+ # a tag, the changed tag will be applied to all instances
44
+ # launched after you made the change.
45
+ # * 'ResourceId'<~String>: The name of the AutoScaling group.
46
+ # * 'ResourceType'<~String>: The kind of resource to which the
47
+ # tag is applied. Currently, Auto Scaling supports the
48
+ # auto-scaling-group resource type.
49
+ # * 'Value'<~String>: The value of the tag.
50
+ # * 'TerminationPolicies'<~Array> - A standalone termination policy
51
+ # or a list of termination policies used to select the instance to
52
+ # terminate. The policies are executed in the order that they are
53
+ # listed.
54
+ # * 'VPCZoneIdentifier'<~String> - A comma-separated list of subnet
55
+ # identifiers of Amazon Virtual Private Clouds (Amazon VPCs).
40
56
  #
41
57
  # ==== Returns
42
58
  # * response<~Excon::Response>:
@@ -56,10 +72,13 @@ module Fog
56
72
  if tags = options.delete('Tags')
57
73
  tags.each_with_index do |tag, i|
58
74
  tag.each do |key, value|
59
- options["Tags.member.#{i + 1}.#{key.to_s.capitalize}"] = value
75
+ options["Tags.member.#{i+1}.#{key}"] = value unless value.nil?
60
76
  end
61
77
  end
62
78
  end
79
+ if termination_policies = options.delete('TerminationPolicies')
80
+ options.merge!(AWS.indexed_param('TerminationPolicies.member.%d', [*termination_policies]))
81
+ end
63
82
  request({
64
83
  'Action' => 'CreateAutoScalingGroup',
65
84
  'AutoScalingGroupName' => auto_scaling_group_name,
@@ -75,18 +94,18 @@ module Fog
75
94
  class Mock
76
95
 
77
96
  def create_auto_scaling_group(auto_scaling_group_name, availability_zones, launch_configuration_name, max_size, min_size, options = {})
78
- if data[:auto_scaling_groups].has_key?(auto_scaling_group_name)
97
+ if self.data[:auto_scaling_groups].has_key?(auto_scaling_group_name)
79
98
  raise Fog::AWS::AutoScaling::IdentifierTaken.new("AutoScalingGroup by this name already exists - A group with the name #{auto_scaling_group_name} already exists")
80
99
  end
81
- unless data[:launch_configurations].has_key?(launch_configuration_name)
100
+ unless self.data[:launch_configurations].has_key?(launch_configuration_name)
82
101
  raise Fog::AWS::AutoScaling::ValidationError.new('Launch configuration name not found - null')
83
102
  end
84
- data[:auto_scaling_groups][auto_scaling_group_name] = {
85
- 'AutoScalingGroupARN' => "arn:aws:autoscaling:eu-west-1:000000000000:autoScalingGroup:00000000-0000-0000-0000-000000000000:autoScalingGroupName/#{auto_scaling_group_name}",
86
- 'AutoScalingGroupName' => launch_configuration_name,
87
- 'AvailabilityZones' => availability_zones.to_a,
103
+ self.data[:auto_scaling_groups][auto_scaling_group_name] = {
104
+ 'AutoScalingGroupARN' => Fog::AWS::Mock.arn('autoscaling', self.data[:owner_id], "autoScalingGroup:00000000-0000-0000-0000-000000000000:autoScalingGroupName/#{auto_scaling_group_name}", @region),
105
+ 'AutoScalingGroupName' => auto_scaling_group_name,
106
+ 'AvailabilityZones' => [*availability_zones],
88
107
  'CreatedTime' => Time.now.utc,
89
- 'DefaultCooldown' => 0,
108
+ 'DefaultCooldown' => 300,
90
109
  'DesiredCapacity' => 0,
91
110
  'EnabledMetrics' => [],
92
111
  'HealthCheckGracePeriod' => 0,
@@ -98,7 +117,8 @@ module Fog
98
117
  'MinSize' => min_size,
99
118
  'PlacementGroup' => nil,
100
119
  'SuspendedProcesses' => [],
101
- 'TerminationPolicies' => [],
120
+ 'Tags' => [],
121
+ 'TerminationPolicies' => ['Default'],
102
122
  'VPCZoneIdentifier' => nil
103
123
  }.merge!(options)
104
124
 
@@ -6,7 +6,7 @@ module Fog
6
6
 
7
7
  require 'fog/aws/parsers/auto_scaling/basic'
8
8
 
9
- # Creates a new launch configuration. Once created, the new launch
9
+ # Creates a new launch configuration. When created, the new launch
10
10
  # configuration is available for immediate use.
11
11
  #
12
12
  # ==== Parameters
@@ -23,17 +23,24 @@ module Fog
23
23
  # * 'Ebs.VolumeSize'<~Integer> - The volume size, in GigaBytes.
24
24
  # * 'VirtualName'<~String> - The virtual name associated with the
25
25
  # device.
26
- # * 'IamInstanceProfile'<~String> The name or the Amazon Resource Name (ARN) of the instance profile associated with the IAM role for the instance
27
- # * 'InstanceMonitoring.Enabled'<~Boolean> - Enable/Disable detailed monitoring, default is enabled
26
+ # * 'IamInstanceProfile'<~String> The name or the Amazon Resource
27
+ # Name (ARN) of the instance profile associated with the IAM role
28
+ # for the instance.
29
+ # * 'InstanceMonitoring.Enabled'<~Boolean> - Enables detailed
30
+ # monitoring, which is enabled by default.
28
31
  # * 'KernelId'<~String> - The ID of the kernel associated with the
29
- # EC2 AMI.
30
- # * 'KeyName'<~String> - The name of the EC2 key pair.
32
+ # Amazon EC2 AMI.
33
+ # * 'KeyName'<~String> - The name of the Amazon EC2 key pair.
31
34
  # * 'RamdiskId'<~String> - The ID of the RAM disk associated with the
32
- # EC2 AMI.
35
+ # Amazon EC2 AMI.
33
36
  # * 'SecurityGroups'<~Array> - The names of the security groups with
34
- # which to associate EC2 instances.
35
- # * 'UserData'<~String> - User data available to the launched EC2
36
- # instances.
37
+ # which to associate Amazon EC2 or Amazon VPC instances.
38
+ # * 'SpotPrice'<~String> - The maximum hourly price to be paid for
39
+ # any Spot Instance launched to fulfill the request. Spot Instances
40
+ # are launched when the price you specify exceeds the current Spot
41
+ # market price.
42
+ # * 'UserData'<~String> - The user data available to the launched
43
+ # Amazon EC2 instances.
37
44
  #
38
45
  # ==== Returns
39
46
  # * response<~Excon::Response>:
@@ -72,10 +79,10 @@ module Fog
72
79
  class Mock
73
80
 
74
81
  def create_launch_configuration(image_id, instance_type, launch_configuration_name, options = {})
75
- if data[:launch_configurations].has_key?(launch_configuration_name)
82
+ if self.data[:launch_configurations].has_key?(launch_configuration_name)
76
83
  raise Fog::AWS::AutoScaling::IdentifierTaken.new("Launch Configuration by this name already exists - A launch configuration already exists with the name #{launch_configuration_name}")
77
84
  end
78
- data[:launch_configurations][launch_configuration_name] = {
85
+ self.data[:launch_configurations][launch_configuration_name] = {
79
86
  'BlockDeviceMappings' => [],
80
87
  'CreatedTime' => Time.now.utc,
81
88
  'ImageId' => image_id,
@@ -83,7 +90,7 @@ module Fog
83
90
  'InstanceType' => instance_type,
84
91
  'KernelId' => nil,
85
92
  'KeyName' => nil,
86
- 'LaunchConfigurationARN' => "arn:aws:autoscaling:eu-west-1:000000000000:launchConfiguration:00000000-0000-0000-0000-000000000000:launchConfigurationName/#{launch_configuration_name}",
93
+ 'LaunchConfigurationARN' => Fog::AWS::Mock.arn('autoscaling', self.data[:owner_id], "launchConfiguration:00000000-0000-0000-0000-000000000000:launchConfigurationName/#{launch_configuration_name}", @region),
87
94
  'LaunchConfigurationName' => launch_configuration_name,
88
95
  'RamdiskId' => nil,
89
96
  'SecurityGroups' => [],
@@ -0,0 +1,63 @@
1
+ module Fog
2
+ module AWS
3
+ class AutoScaling
4
+
5
+ class Real
6
+
7
+ require 'fog/aws/parsers/auto_scaling/basic'
8
+
9
+ # Creates new tags or updates existing tags for an Auto Scaling group.
10
+ #
11
+ # ==== Parameters
12
+ # * tags<~Array>:
13
+ # * tag<~Hash>:
14
+ # * Key<~String> - The key of the tag.
15
+ # * PropagateAtLaunch<~Boolean> - Specifies whether the new tag
16
+ # will be applied to instances launched after the tag is created.
17
+ # The same behavior applies to updates: If you change a tag, the
18
+ # changed tag will be applied to all instances launched after you
19
+ # made the change.
20
+ # * ResourceId<~String> - The name of the Auto Scaling group.
21
+ # * ResourceType<~String> - The kind of resource to which the tag
22
+ # is applied. Currently, Auto Scaling supports the
23
+ # auto-scaling-group resource type.
24
+ # * Value<~String> - The value of the tag.
25
+ #
26
+ # ==== Returns
27
+ # * response<~Excon::Response>:
28
+ # * body<~Hash>:
29
+ # * 'ResponseMetadata'<~Hash>:
30
+ # * 'RequestId'<~String> - Id of request
31
+ #
32
+ # ==== See Also
33
+ # http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_CreateOrUpdateTags.html
34
+ #
35
+ def create_or_update_tags(tags)
36
+ params = {}
37
+ tags.each_with_index do |tag, i|
38
+ tag.each do |key, value|
39
+ params["Tags.member.#{i+1}.#{key}"] = value unless value.nil?
40
+ end
41
+ end
42
+ request({
43
+ 'Action' => 'CreateOrUpdateTags',
44
+ :parser => Fog::Parsers::AWS::AutoScaling::Basic.new
45
+ }.merge!(params))
46
+ end
47
+
48
+ end
49
+
50
+ class Mock
51
+
52
+ def create_or_update_tags(tags)
53
+ if tags.to_a.empty?
54
+ raise Fog::AWS::AutoScaling::ValidationError.new("1 validation error detected: Value null at 'tags' failed to satisfy constraint: Member must not be null")
55
+ end
56
+ raise Fog::Mock::NotImplementedError
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -12,6 +12,11 @@ module Fog
12
12
  # ==== Parameters
13
13
  # * auto_scaling_group_name<~String> - The name of the Auto Scaling
14
14
  # group.
15
+ # * options<~Hash>:
16
+ # * 'ForceDelete'<~Boolean> - Starting with API version 2011-01-01,
17
+ # specifies that the Auto Scaling group will be deleted along with
18
+ # all instances associated with the group, without waiting for all
19
+ # instances to be terminated.
15
20
  #
16
21
  # ==== Returns
17
22
  # * response<~Excon::Response>:
@@ -22,23 +27,25 @@ module Fog
22
27
  # ==== See Also
23
28
  # http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_DeleteAutoScalingGroup.html
24
29
  #
25
- def delete_auto_scaling_group(auto_scaling_group_name)
30
+ def delete_auto_scaling_group(auto_scaling_group_name, options = {})
26
31
  request({
27
32
  'Action' => 'DeleteAutoScalingGroup',
28
33
  'AutoScalingGroupName' => auto_scaling_group_name,
29
34
  :parser => Fog::Parsers::AWS::AutoScaling::Basic.new
30
- })
35
+ }.merge!(options))
31
36
  end
32
37
 
33
38
  end
34
39
 
35
40
  class Mock
36
41
 
37
- def delete_auto_scaling_group(auto_scaling_group_name)
42
+ def delete_auto_scaling_group(auto_scaling_group_name, options = {})
38
43
  unless self.data[:auto_scaling_groups].delete(auto_scaling_group_name)
39
44
  raise Fog::AWS::AutoScaling::ValidationError, "The auto scaling group '#{auto_scaling_group_name}' does not exist."
40
45
  end
41
46
 
47
+ self.data[:notification_configurations].delete(auto_scaling_group_name)
48
+
42
49
  response = Excon::Response.new
43
50
  response.status = 200
44
51
  response.body = {