fog 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. data/.gitignore +2 -1
  2. data/Rakefile +90 -1
  3. data/bin/fog +5 -1
  4. data/changelog.txt +156 -0
  5. data/docs/_layouts/default.html +1 -0
  6. data/docs/about/press.markdown +4 -0
  7. data/docs/compute/index.markdown +4 -0
  8. data/docs/storage/index.markdown +4 -0
  9. data/fog.gemspec +3 -3
  10. data/lib/fog.rb +1 -1
  11. data/lib/fog/aws/iam.rb +7 -6
  12. data/lib/fog/aws/models/rds/server.rb +27 -23
  13. data/lib/fog/aws/parsers/iam/get_group.rb +2 -2
  14. data/lib/fog/aws/requests/iam/update_server_certificate.rb +37 -0
  15. data/lib/fog/bin.rb +2 -1
  16. data/lib/fog/bin/dynect.rb +30 -0
  17. data/lib/fog/bin/rackspace.rb +4 -0
  18. data/lib/fog/cdn.rb +4 -0
  19. data/lib/fog/cdn/aws.rb +6 -0
  20. data/lib/fog/cdn/parsers/aws/get_invalidation_list.rb +43 -0
  21. data/lib/fog/cdn/parsers/aws/get_streaming_distribution_list.rb +59 -0
  22. data/lib/fog/cdn/parsers/aws/streaming_distribution.rb +59 -0
  23. data/lib/fog/cdn/requests/aws/delete_streaming_distribution.rb +28 -0
  24. data/lib/fog/cdn/requests/aws/get_invalidation_list.rb +42 -0
  25. data/lib/fog/cdn/requests/aws/get_streaming_distribution.rb +50 -0
  26. data/lib/fog/cdn/requests/aws/get_streaming_distribution_list.rb +59 -0
  27. data/lib/fog/cdn/requests/aws/post_streaming_distribution.rb +78 -0
  28. data/lib/fog/cdn/requests/aws/put_streaming_distribution_config.rb +83 -0
  29. data/lib/fog/compute.rb +6 -2
  30. data/lib/fog/compute/aws.rb +12 -1
  31. data/lib/fog/compute/brightbox.rb +22 -12
  32. data/lib/fog/compute/models/aws/image.rb +5 -0
  33. data/lib/fog/compute/models/aws/server.rb +19 -22
  34. data/lib/fog/compute/models/aws/tag.rb +1 -1
  35. data/lib/fog/compute/models/bluebox/server.rb +2 -18
  36. data/lib/fog/compute/models/brightbox/account.rb +1 -1
  37. data/lib/fog/compute/models/brightbox/server.rb +2 -2
  38. data/lib/fog/compute/models/go_grid/server.rb +2 -18
  39. data/lib/fog/compute/models/linode/server.rb +5 -5
  40. data/lib/fog/compute/models/ninefold/server.rb +2 -2
  41. data/lib/fog/compute/models/rackspace/server.rb +2 -18
  42. data/lib/fog/compute/models/server.rb +27 -0
  43. data/lib/fog/compute/models/slicehost/server.rb +2 -18
  44. data/lib/fog/compute/models/storm_on_demand/server.rb +3 -3
  45. data/lib/fog/compute/models/voxel/server.rb +2 -2
  46. data/lib/fog/compute/parsers/aws/describe_images.rb +15 -3
  47. data/lib/fog/compute/parsers/aws/describe_instances.rb +1 -1
  48. data/lib/fog/compute/parsers/aws/describe_security_groups.rb +31 -7
  49. data/lib/fog/compute/requests/aws/describe_images.rb +33 -14
  50. data/lib/fog/compute/requests/aws/describe_volumes.rb +1 -0
  51. data/lib/fog/compute/requests/aws/modify_image_attribute.rb +39 -0
  52. data/lib/fog/compute/requests/aws/modify_instance_attribute.rb +37 -0
  53. data/lib/fog/compute/requests/aws/modify_snapshot_attribute.rb +10 -10
  54. data/lib/fog/compute/requests/aws/register_image.rb +54 -13
  55. data/lib/fog/compute/requests/aws/run_instances.rb +5 -0
  56. data/lib/fog/compute/requests/aws/stop_instances.rb +2 -1
  57. data/lib/fog/compute/requests/brightbox/activate_console_server.rb +2 -8
  58. data/lib/fog/compute/requests/brightbox/add_listeners_load_balancer.rb +2 -8
  59. data/lib/fog/compute/requests/brightbox/add_nodes_load_balancer.rb +2 -8
  60. data/lib/fog/compute/requests/brightbox/create_api_client.rb +2 -8
  61. data/lib/fog/compute/requests/brightbox/create_cloud_ip.rb +2 -8
  62. data/lib/fog/compute/requests/brightbox/create_image.rb +2 -8
  63. data/lib/fog/compute/requests/brightbox/create_load_balancer.rb +2 -8
  64. data/lib/fog/compute/requests/brightbox/create_server.rb +2 -8
  65. data/lib/fog/compute/requests/brightbox/destroy_api_client.rb +2 -8
  66. data/lib/fog/compute/requests/brightbox/destroy_cloud_ip.rb +2 -8
  67. data/lib/fog/compute/requests/brightbox/destroy_image.rb +2 -8
  68. data/lib/fog/compute/requests/brightbox/destroy_load_balancer.rb +2 -8
  69. data/lib/fog/compute/requests/brightbox/destroy_server.rb +2 -8
  70. data/lib/fog/compute/requests/brightbox/get_account.rb +2 -8
  71. data/lib/fog/compute/requests/brightbox/get_api_client.rb +2 -8
  72. data/lib/fog/compute/requests/brightbox/get_cloud_ip.rb +2 -8
  73. data/lib/fog/compute/requests/brightbox/get_image.rb +2 -8
  74. data/lib/fog/compute/requests/brightbox/get_interface.rb +2 -8
  75. data/lib/fog/compute/requests/brightbox/get_load_balancer.rb +2 -8
  76. data/lib/fog/compute/requests/brightbox/get_server.rb +2 -8
  77. data/lib/fog/compute/requests/brightbox/get_server_type.rb +2 -8
  78. data/lib/fog/compute/requests/brightbox/get_user.rb +2 -8
  79. data/lib/fog/compute/requests/brightbox/get_zone.rb +2 -8
  80. data/lib/fog/compute/requests/brightbox/list_api_clients.rb +2 -8
  81. data/lib/fog/compute/requests/brightbox/list_cloud_ips.rb +2 -8
  82. data/lib/fog/compute/requests/brightbox/list_images.rb +2 -8
  83. data/lib/fog/compute/requests/brightbox/list_load_balancers.rb +2 -8
  84. data/lib/fog/compute/requests/brightbox/list_server_types.rb +2 -8
  85. data/lib/fog/compute/requests/brightbox/list_servers.rb +2 -8
  86. data/lib/fog/compute/requests/brightbox/list_users.rb +2 -8
  87. data/lib/fog/compute/requests/brightbox/list_zones.rb +2 -8
  88. data/lib/fog/compute/requests/brightbox/map_cloud_ip.rb +2 -8
  89. data/lib/fog/compute/requests/brightbox/remove_listeners_load_balancer.rb +2 -8
  90. data/lib/fog/compute/requests/brightbox/remove_nodes_load_balancer.rb +2 -8
  91. data/lib/fog/compute/requests/brightbox/reset_ftp_password_account.rb +2 -8
  92. data/lib/fog/compute/requests/brightbox/shutdown_server.rb +2 -8
  93. data/lib/fog/compute/requests/brightbox/snapshot_server.rb +2 -8
  94. data/lib/fog/compute/requests/brightbox/start_server.rb +2 -8
  95. data/lib/fog/compute/requests/brightbox/stop_server.rb +2 -8
  96. data/lib/fog/compute/requests/brightbox/unmap_cloud_ip.rb +2 -8
  97. data/lib/fog/compute/requests/brightbox/update_account.rb +2 -8
  98. data/lib/fog/compute/requests/brightbox/update_api_client.rb +2 -8
  99. data/lib/fog/compute/requests/brightbox/update_image.rb +2 -8
  100. data/lib/fog/compute/requests/brightbox/update_load_balancer.rb +2 -8
  101. data/lib/fog/compute/requests/brightbox/update_server.rb +2 -8
  102. data/lib/fog/compute/requests/brightbox/update_user.rb +2 -8
  103. data/lib/fog/core.rb +1 -0
  104. data/lib/fog/core/credentials.rb +1 -1
  105. data/lib/fog/core/errors.rb +3 -1
  106. data/lib/fog/core/json.rb +20 -0
  107. data/lib/fog/core/provider.rb +3 -1
  108. data/lib/fog/core/service.rb +5 -0
  109. data/lib/fog/dns.rb +8 -1
  110. data/lib/fog/dns/dynect.rb +80 -0
  111. data/lib/fog/dns/models/dynect/record.rb +67 -0
  112. data/lib/fog/dns/models/dynect/records.rb +53 -0
  113. data/lib/fog/dns/models/dynect/zone.rb +60 -0
  114. data/lib/fog/dns/models/dynect/zones.rb +29 -0
  115. data/lib/fog/dns/requests/dynect/delete_record.rb +24 -0
  116. data/lib/fog/dns/requests/dynect/delete_zone.rb +21 -0
  117. data/lib/fog/dns/requests/dynect/get_node_list.rb +23 -0
  118. data/lib/fog/dns/requests/dynect/get_record.rb +25 -0
  119. data/lib/fog/dns/requests/dynect/get_zone.rb +22 -0
  120. data/lib/fog/dns/requests/dynect/post_record.rb +27 -0
  121. data/lib/fog/dns/requests/dynect/post_session.rb +36 -0
  122. data/lib/fog/dns/requests/dynect/post_zone.rb +32 -0
  123. data/lib/fog/dns/requests/dynect/put_zone.rb +26 -0
  124. data/lib/fog/dns/zerigo.rb +1 -1
  125. data/lib/fog/providers.rb +1 -0
  126. data/lib/fog/providers/dynect.rb +14 -0
  127. data/lib/fog/providers/rackspace.rb +1 -0
  128. data/lib/fog/rackspace/load_balancers.rb +179 -0
  129. data/lib/fog/rackspace/models/load_balancers/access_rule.rb +39 -0
  130. data/lib/fog/rackspace/models/load_balancers/access_rules.rb +29 -0
  131. data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +216 -0
  132. data/lib/fog/rackspace/models/load_balancers/load_balancers.rb +27 -0
  133. data/lib/fog/rackspace/models/load_balancers/node.rb +58 -0
  134. data/lib/fog/rackspace/models/load_balancers/nodes.rb +29 -0
  135. data/lib/fog/rackspace/models/load_balancers/virtual_ip.rb +35 -0
  136. data/lib/fog/rackspace/models/load_balancers/virtual_ips.rb +32 -0
  137. data/lib/fog/rackspace/requests/load_balancers/create_access_rule.rb +24 -0
  138. data/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb +26 -0
  139. data/lib/fog/rackspace/requests/load_balancers/create_node.rb +27 -0
  140. data/lib/fog/rackspace/requests/load_balancers/create_virtual_ip.rb +20 -0
  141. data/lib/fog/rackspace/requests/load_balancers/delete_access_rule.rb +15 -0
  142. data/lib/fog/rackspace/requests/load_balancers/delete_all_access_rules.rb +15 -0
  143. data/lib/fog/rackspace/requests/load_balancers/delete_load_balancer.rb +15 -0
  144. data/lib/fog/rackspace/requests/load_balancers/delete_node.rb +15 -0
  145. data/lib/fog/rackspace/requests/load_balancers/delete_nodes.rb +17 -0
  146. data/lib/fog/rackspace/requests/load_balancers/delete_virtual_ip.rb +15 -0
  147. data/lib/fog/rackspace/requests/load_balancers/get_connection_logging.rb +15 -0
  148. data/lib/fog/rackspace/requests/load_balancers/get_connection_throttling.rb +15 -0
  149. data/lib/fog/rackspace/requests/load_balancers/get_load_balancer.rb +15 -0
  150. data/lib/fog/rackspace/requests/load_balancers/get_load_balancer_usage.rb +21 -0
  151. data/lib/fog/rackspace/requests/load_balancers/get_monitor.rb +15 -0
  152. data/lib/fog/rackspace/requests/load_balancers/get_node.rb +15 -0
  153. data/lib/fog/rackspace/requests/load_balancers/get_session_persistence.rb +15 -0
  154. data/lib/fog/rackspace/requests/load_balancers/get_usage.rb +20 -0
  155. data/lib/fog/rackspace/requests/load_balancers/list_access_rules.rb +15 -0
  156. data/lib/fog/rackspace/requests/load_balancers/list_algorithms.rb +15 -0
  157. data/lib/fog/rackspace/requests/load_balancers/list_load_balancers.rb +15 -0
  158. data/lib/fog/rackspace/requests/load_balancers/list_nodes.rb +15 -0
  159. data/lib/fog/rackspace/requests/load_balancers/list_protocols.rb +15 -0
  160. data/lib/fog/rackspace/requests/load_balancers/list_virtual_ips.rb +15 -0
  161. data/lib/fog/rackspace/requests/load_balancers/remove_connection_throttling.rb +15 -0
  162. data/lib/fog/rackspace/requests/load_balancers/remove_monitor.rb +15 -0
  163. data/lib/fog/rackspace/requests/load_balancers/remove_session_persistence.rb +15 -0
  164. data/lib/fog/rackspace/requests/load_balancers/set_connection_logging.rb +21 -0
  165. data/lib/fog/rackspace/requests/load_balancers/set_connection_throttling.rb +22 -0
  166. data/lib/fog/rackspace/requests/load_balancers/set_monitor.rb +31 -0
  167. data/lib/fog/rackspace/requests/load_balancers/set_session_persistence.rb +21 -0
  168. data/lib/fog/rackspace/requests/load_balancers/update_load_balancer.rb +24 -0
  169. data/lib/fog/rackspace/requests/load_balancers/update_node.rb +26 -0
  170. data/lib/fog/storage.rb +5 -1
  171. data/lib/fog/storage/aws.rb +3 -0
  172. data/lib/fog/storage/models/aws/directory.rb +1 -3
  173. data/lib/fog/storage/models/aws/file.rb +1 -1
  174. data/lib/fog/storage/models/google/file.rb +1 -1
  175. data/lib/fog/storage/models/local/file.rb +8 -6
  176. data/lib/fog/storage/models/ninefold/file.rb +0 -1
  177. data/lib/fog/storage/requests/aws/copy_object.rb +1 -1
  178. data/lib/fog/storage/requests/aws/get_bucket.rb +14 -11
  179. data/lib/fog/storage/requests/aws/post_object_hidden_fields.rb +2 -4
  180. data/tests/aws/models/rds/server_tests.rb +4 -4
  181. data/tests/compute/models/aws/server_tests.rb +15 -1
  182. data/tests/compute/requests/aws/helper.rb +0 -4
  183. data/tests/compute/requests/aws/image_tests.rb +40 -9
  184. data/tests/compute/requests/brightbox/account_tests.rb +1 -1
  185. data/tests/compute/requests/brightbox/helper.rb +3 -0
  186. data/tests/compute/requests/brightbox/load_balancer_tests.rb +1 -1
  187. data/tests/compute/requests/voxel/server_tests.rb +2 -2
  188. data/tests/dns/helper.rb +18 -0
  189. data/tests/dns/models/record_tests.rb +3 -2
  190. data/tests/dns/models/records_tests.rb +2 -2
  191. data/tests/dns/models/zone_tests.rb +2 -2
  192. data/tests/dns/models/zones_tests.rb +1 -1
  193. data/tests/dns/requests/bluebox/dns_tests.rb +0 -12
  194. data/tests/dns/requests/dnsimple/dns_tests.rb +0 -12
  195. data/tests/dns/requests/dnsmadeeasy/dns_tests.rb +0 -12
  196. data/tests/dns/requests/dynect/dns_tests.rb +132 -0
  197. data/tests/dns/requests/linode/dns_tests.rb +1 -13
  198. data/tests/dns/requests/slicehost/dns_tests.rb +1 -13
  199. data/tests/helper.rb +1 -1
  200. data/tests/helpers/collection_helper.rb +2 -2
  201. data/tests/helpers/formats_helper.rb +2 -0
  202. data/tests/helpers/mock_helper.rb +4 -1
  203. data/tests/rackspace/helper.rb +24 -0
  204. data/tests/rackspace/load_balancer_tests.rb +21 -0
  205. data/tests/rackspace/models/access_list_tests.rb +12 -0
  206. data/tests/rackspace/models/access_lists_tests.rb +12 -0
  207. data/tests/rackspace/models/load_balancer_tests.rb +116 -0
  208. data/tests/rackspace/models/load_balancers_tests.rb +19 -0
  209. data/tests/rackspace/models/node_tests.rb +19 -0
  210. data/tests/rackspace/models/nodes_tests.rb +12 -0
  211. data/tests/rackspace/models/virtual_ip_tests.rb +16 -0
  212. data/tests/rackspace/models/virtual_ips_tests.rb +12 -0
  213. data/tests/rackspace/requests/access_list_tests.rb +56 -0
  214. data/tests/rackspace/requests/algorithm_tests.rb +19 -0
  215. data/tests/rackspace/requests/connection_logging_tests.rb +25 -0
  216. data/tests/rackspace/requests/connection_throttling_tests.rb +37 -0
  217. data/tests/rackspace/requests/helper.rb +112 -0
  218. data/tests/rackspace/requests/load_balancer_tests.rb +63 -0
  219. data/tests/rackspace/requests/load_balancer_usage_tests.rb +19 -0
  220. data/tests/rackspace/requests/monitor_tests.rb +46 -0
  221. data/tests/rackspace/requests/node_tests.rb +87 -0
  222. data/tests/rackspace/requests/protocol_tests.rb +21 -0
  223. data/tests/rackspace/requests/session_persistence_tests.rb +33 -0
  224. data/tests/rackspace/requests/usage_tests.rb +17 -0
  225. data/tests/rackspace/requests/virtual_ip_tests.rb +40 -0
  226. data/tests/storage/requests/aws/bucket_tests.rb +53 -0
  227. metadata +127 -8
  228. data/lib/fog/compute/requests/aws/modify_image_attributes.rb +0 -37
@@ -3,14 +3,8 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def reset_ftp_password_account(options = {})
7
- request(
8
- :expects => [200],
9
- :method => 'POST',
10
- :path => "/1.0/account/reset_ftp_password",
11
- :headers => {"Content-Type" => "application/json"},
12
- :body => MultiJson.encode(options)
13
- )
6
+ def reset_ftp_password_account
7
+ request("post", "/1.0/account/reset_ftp_password", [200])
14
8
  end
15
9
 
16
10
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def shutdown_server(identifier, options = {})
6
+ def shutdown_server(identifier)
7
7
  return nil if identifier.nil? || identifier == ""
8
- request(
9
- :expects => [202],
10
- :method => 'POST',
11
- :path => "/1.0/servers/#{identifier}/shutdown",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("post", "/1.0/servers/#{identifier}/shutdown", [202])
15
9
  end
16
10
 
17
11
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def snapshot_server(identifier, options = {})
6
+ def snapshot_server(identifier)
7
7
  return nil if identifier.nil? || identifier == ""
8
- request(
9
- :expects => [202],
10
- :method => 'POST',
11
- :path => "/1.0/servers/#{identifier}/snapshot",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("post", "/1.0/servers/#{identifier}/snapshot", [202])
15
9
  end
16
10
 
17
11
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def start_server(identifier, options = {})
6
+ def start_server(identifier)
7
7
  return nil if identifier.nil? || identifier == ""
8
- request(
9
- :expects => [202],
10
- :method => 'POST',
11
- :path => "/1.0/servers/#{identifier}/start",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("post", "/1.0/servers/#{identifier}/start", [202])
15
9
  end
16
10
 
17
11
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def stop_server(identifier, options = {})
6
+ def stop_server(identifier)
7
7
  return nil if identifier.nil? || identifier == ""
8
- request(
9
- :expects => [202],
10
- :method => 'POST',
11
- :path => "/1.0/servers/#{identifier}/stop",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("post", "/1.0/servers/#{identifier}/stop", [202])
15
9
  end
16
10
 
17
11
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def unmap_cloud_ip(identifier, options = {})
6
+ def unmap_cloud_ip(identifier)
7
7
  return nil if identifier.nil? || identifier == ""
8
- request(
9
- :expects => [202],
10
- :method => 'POST',
11
- :path => "/1.0/cloud_ips/#{identifier}/unmap",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("post", "/1.0/cloud_ips/#{identifier}/unmap", [202])
15
9
  end
16
10
 
17
11
  end
@@ -3,15 +3,9 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_account(options = {})
6
+ def update_account(options)
7
7
  return nil if options.empty? || options.nil?
8
- request(
9
- :expects => [200],
10
- :method => 'PUT',
11
- :path => "/1.0/account",
12
- :headers => {"Content-Type" => "application/json"},
13
- :body => MultiJson.encode(options)
14
- )
8
+ request("put", "/1.0/account", [200], options)
15
9
  end
16
10
 
17
11
  end
@@ -3,16 +3,10 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_api_client(identifier, options = {})
6
+ def update_api_client(identifier, options)
7
7
  return nil if identifier.nil? || identifier == ""
8
8
  return nil if options.empty? || options.nil?
9
- request(
10
- :expects => [200],
11
- :method => 'PUT',
12
- :path => "/1.0/api_clients/#{identifier}",
13
- :headers => {"Content-Type" => "application/json"},
14
- :body => MultiJson.encode(options)
15
- )
9
+ request("put", "/1.0/api_clients/#{identifier}", [200], options)
16
10
  end
17
11
 
18
12
  end
@@ -3,16 +3,10 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_image(identifier, options = {})
6
+ def update_image(identifier, options)
7
7
  return nil if identifier.nil? || identifier == ""
8
8
  return nil if options.empty? || options.nil?
9
- request(
10
- :expects => [200],
11
- :method => 'PUT',
12
- :path => "/1.0/images/#{identifier}",
13
- :headers => {"Content-Type" => "application/json"},
14
- :body => MultiJson.encode(options)
15
- )
9
+ request("put", "/1.0/images/#{identifier}", [200], options)
16
10
  end
17
11
 
18
12
  end
@@ -3,16 +3,10 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_load_balancer(identifier, options = {})
6
+ def update_load_balancer(identifier, options)
7
7
  return nil if identifier.nil? || identifier == ""
8
8
  return nil if options.empty? || options.nil?
9
- request(
10
- :expects => [202],
11
- :method => 'PUT',
12
- :path => "/1.0/load_balancers/#{identifier}",
13
- :headers => {"Content-Type" => "application/json"},
14
- :body => MultiJson.encode(options)
15
- )
9
+ request("put", "/1.0/load_balancers/#{identifier}", [202], options)
16
10
  end
17
11
 
18
12
  end
@@ -3,16 +3,10 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_server(identifier, options = {})
6
+ def update_server(identifier, options)
7
7
  return nil if identifier.nil? || identifier == ""
8
8
  return nil if options.empty? || options.nil?
9
- request(
10
- :expects => [200],
11
- :method => 'PUT',
12
- :path => "/1.0/servers/#{identifier}",
13
- :headers => {"Content-Type" => "application/json"},
14
- :body => MultiJson.encode(options)
15
- )
9
+ request("put", "/1.0/servers/#{identifier}", [200], options)
16
10
  end
17
11
 
18
12
  end
@@ -3,16 +3,10 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def update_user(identifier, options = {})
6
+ def update_user(identifier, options)
7
7
  return nil if identifier.nil? || identifier == ""
8
8
  return nil if options.empty? || options.nil?
9
- request(
10
- :expects => [200],
11
- :method => 'PUT',
12
- :path => "/1.0/users/#{identifier}",
13
- :headers => {"Content-Type" => "application/json"},
14
- :body => MultiJson.encode(options)
15
- )
9
+ request("put", "/1.0/users/#{identifier}", [200], options)
16
10
  end
17
11
 
18
12
  end
data/lib/fog/core.rb CHANGED
@@ -23,6 +23,7 @@ require 'fog/core/credentials'
23
23
  require 'fog/core/deprecation'
24
24
  require 'fog/core/errors'
25
25
  require 'fog/core/hmac'
26
+ require 'fog/core/json'
26
27
  require 'fog/core/model'
27
28
  require 'fog/core/mock'
28
29
  require 'fog/core/parser' # FIXME: would be better to only load when nokogiri is required
@@ -44,7 +44,7 @@ module Fog
44
44
  end
45
45
  end
46
46
  end
47
-
47
+
48
48
  def self.symbolize_credentials(args)
49
49
  if args.is_a? Hash
50
50
  Hash[ *args.collect do |key, value|
@@ -16,6 +16,8 @@ module Fog
16
16
 
17
17
  class NotFound < Fog::Errors::Error; end
18
18
 
19
+ class LoadError < LoadError; end
20
+
19
21
  # @return [String] The error message that will be raised, if credentials cannot be found
20
22
  def self.missing_credentials
21
23
  missing_credentials_message = <<-YML
@@ -68,7 +70,7 @@ An alternate file may be used by placing its path in the FOG_RC environment vari
68
70
  #######################################################
69
71
 
70
72
  YML
71
- raise(LoadError.new(missing_credentials_message))
73
+ raise(Fog::Errors::LoadError.new(missing_credentials_message))
72
74
  end
73
75
 
74
76
  end
@@ -0,0 +1,20 @@
1
+ module Fog
2
+ module JSON
3
+
4
+ def self.sanitize(data)
5
+ case data
6
+ when Array
7
+ data.map {|datum| sanitize(datum)}
8
+ when Hash
9
+ for key, value in data
10
+ data[key] = sanitize(value)
11
+ end
12
+ when ::Time
13
+ data.strftime("%Y-%m-%dT%H:%M:%SZ")
14
+ else
15
+ data
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -6,7 +6,9 @@ module Fog
6
6
  end
7
7
 
8
8
  def service(new_service, path)
9
- services << new_service
9
+ Fog.services[new_service] ||= []
10
+ Fog.services[new_service] << self.to_s.split('::').last.downcase.to_sym
11
+ self.services << new_service
10
12
  require File.join('fog', path)
11
13
  end
12
14
 
@@ -1,4 +1,9 @@
1
1
  module Fog
2
+
3
+ def self.services
4
+ @services ||= {}
5
+ end
6
+
2
7
  class Service
3
8
 
4
9
  class Error < Fog::Errors::Error; end
data/lib/fog/dns.rb CHANGED
@@ -20,6 +20,9 @@ module Fog
20
20
  when :dnsmadeeasy
21
21
  require 'fog/dns/dnsmadeeasy'
22
22
  Fog::DNS::DNSMadeEasy.new(attributes)
23
+ when :dynect
24
+ require 'fog/dns/dynect'
25
+ Fog::DNS::Dynect.new(attributes)
23
26
  when :linode
24
27
  require 'fog/dns/linode'
25
28
  Fog::DNS::Linode.new(attributes)
@@ -34,9 +37,13 @@ module Fog
34
37
  end
35
38
  end
36
39
 
40
+ def self.providers
41
+ Fog.services[:dns]
42
+ end
43
+
37
44
  def self.zones
38
45
  zones = []
39
- for provider in [:aws, :bluebox, :dnsimple, :dnsmadeeasy, :linode, :slicehost, :zerigo]
46
+ for provider in self.providers
40
47
  begin
41
48
  zones.concat(self[provider].zones)
42
49
  rescue # ignore any missing credentials/etc
@@ -0,0 +1,80 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect < Fog::Service
4
+
5
+ requires :dynect_customer, :dynect_username, :dynect_password
6
+ recognizes :timeout, :persistent
7
+ recognizes :provider # remove post deprecation
8
+
9
+ model_path 'fog/dns/models/dynect'
10
+ model :record
11
+ collection :records
12
+ model :zone
13
+ collection :zones
14
+
15
+ request_path 'fog/dns/requests/dynect'
16
+ request :delete_record
17
+ request :delete_zone
18
+ request :get_node_list
19
+ request :get_record
20
+ request :get_zone
21
+ request :post_record
22
+ request :post_session
23
+ request :post_zone
24
+ request :put_zone
25
+
26
+ class Mock
27
+
28
+ def initialize(options={})
29
+ @dynect_customer = options[:dynect_customer]
30
+ @dynect_username = options[:dynect_username]
31
+ @dynect_password = options[:dynect_password]
32
+ end
33
+
34
+ end
35
+
36
+ class Real
37
+ def initialize(options={})
38
+ require 'multi_json'
39
+
40
+ @dynect_customer = options[:dynect_customer]
41
+ @dynect_username = options[:dynect_username]
42
+ @dynect_password = options[:dynect_password]
43
+
44
+ @host = "api2.dynect.net"
45
+ @port = options[:port] || 443
46
+ @path = options[:path] || '/REST'
47
+ @scheme = options[:scheme] || 'https'
48
+ @version = options[:version] || '2.3.1'
49
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent] || true)
50
+ end
51
+
52
+ def auth_token
53
+ @auth_token ||= post_session.body['data']['token']
54
+ end
55
+
56
+ def request(params)
57
+ begin
58
+ params[:headers] ||= {}
59
+ params[:headers]['Content-Type'] = 'application/json'
60
+ params[:headers]['API-Version'] = @version
61
+ params[:headers]['Auth-Token'] = auth_token unless params[:path] == "Session"
62
+ params[:path] = "#{@path}/#{params[:path]}"
63
+ response = @connection.request(params.merge!({:host => @host}))
64
+
65
+ unless response.body.empty?
66
+ response.body = MultiJson.decode(response.body)
67
+ end
68
+ response
69
+
70
+ rescue Excon::Errors::HTTPStatusError => error
71
+ raise error
72
+ end
73
+
74
+ response
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,67 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module DNS
5
+ class Dynect
6
+
7
+ class Record < Fog::Model
8
+ extend Fog::Deprecation
9
+
10
+ identity :id
11
+ attribute :name, :aliases => [:fqdn, 'fqdn']
12
+ attribute :rdata
13
+ attribute :serial_style
14
+ attribute :ttl
15
+ attribute :type, :aliases => 'record_type'
16
+ attribute :value
17
+
18
+ def destroy
19
+ requires :identity, :name, :type, :zone
20
+ connection.delete_record(type, zone.identity, name, identity)
21
+ true
22
+ end
23
+
24
+ def save
25
+ requires :name, :type, :value, :zone
26
+
27
+ options = {
28
+ :ttl => ttl
29
+ }
30
+ options.delete_if {|key, value| value.nil?}
31
+
32
+ data = connection.post_record(type, zone.identity, name, {'address' => value}, options).body['data']
33
+ # avoid overwriting zone object with zone string
34
+ data = data.reject {|key, value| key == 'zone'}
35
+ merge_attributes(data)
36
+
37
+ zone.publish
38
+ records = connection.get_record(type, zone.identity, name).body['data']
39
+ # data in format ['/REST/xRecord/domain/fqdn/identity]
40
+ records.map! do |record|
41
+ tokens = record.split('/')
42
+ {
43
+ :identity => tokens.last,
44
+ :type => tokens[2][0...-6] # everything before 'Record'
45
+ }
46
+ end
47
+ record = records.detect {|record| record[:type] == type}
48
+ merge_attributes(record)
49
+
50
+ true
51
+ end
52
+
53
+ def zone
54
+ @zone
55
+ end
56
+
57
+ private
58
+
59
+ def zone=(new_zone)
60
+ @zone = new_zone
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
67
+ end