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
@@ -0,0 +1,53 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/dns/models/dynect/record'
3
+
4
+ module Fog
5
+ module DNS
6
+ class Dynect
7
+
8
+ class Records < Fog::Collection
9
+
10
+ attribute :zone
11
+
12
+ model Fog::DNS::Dynect::Record
13
+
14
+ def all
15
+ requires :zone
16
+ data = []
17
+ connection.get_node_list(zone.domain).body['data'].each do |fqdn|
18
+ records = connection.get_record('ANY', zone.domain, fqdn).body['data']
19
+
20
+ # data in format ['/REST/xRecord/domain/fqdn/identity]
21
+ records.map! do |record|
22
+ tokens = record.split('/')
23
+ {
24
+ :identity => tokens.last,
25
+ :fqdn => fqdn,
26
+ :type => tokens[2][0...-6] # everything before 'Record'
27
+ }
28
+ end
29
+
30
+ data.concat(records)
31
+ end
32
+
33
+ # leave out the default, read only records
34
+ data = data.reject {|record| ['NS', 'SOA'].include?(record[:type])}
35
+
36
+ load(data)
37
+ end
38
+
39
+ def get(record_id)
40
+ # FIXME: can this be done more efficiently?
41
+ all.detect {|record| record.identity == record_id}
42
+ end
43
+
44
+ def new(attributes = {})
45
+ requires :zone
46
+ super({ :zone => zone }.merge!(attributes))
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,60 @@
1
+ require 'fog/core/model'
2
+ require 'fog/dns/models/dynect/records'
3
+
4
+ module Fog
5
+ module DNS
6
+ class Dynect
7
+
8
+ class Zone < Fog::Model
9
+
10
+ identity :domain
11
+
12
+ attribute :domain, :aliases => 'zone'
13
+ attribute :email, :aliases => 'rname'
14
+ attribute :serial
15
+ attribute :serial_style
16
+ attribute :ttl
17
+ attribute :type, :aliases => 'zone_type'
18
+
19
+ def initialize(attributes={})
20
+ self.ttl ||= 3600
21
+ super
22
+ end
23
+
24
+ def destroy
25
+ requires :domain
26
+ connection.delete_zone(domain)
27
+ true
28
+ end
29
+
30
+ undef_method :domain=
31
+ def domain=(new_domain)
32
+ attributes[:domain] = new_domain.split('/').last
33
+ end
34
+
35
+ def publish
36
+ requires :identity
37
+ data = connection.put_zone(identity, :publish => true)
38
+ true
39
+ end
40
+
41
+ def records
42
+ @records ||= Fog::DNS::Dynect::Records.new(:zone => self, :connection => connection)
43
+ end
44
+
45
+ def nameservers
46
+ raise 'nameservers Not Implemented'
47
+ end
48
+
49
+ def save
50
+ requires :domain, :email, :ttl
51
+ data = connection.post_zone(email, ttl, domain).body['data']
52
+ merge_attributes(data)
53
+ true
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,29 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/dns/models/dynect/zone'
3
+
4
+ module Fog
5
+ module DNS
6
+ class Dynect
7
+
8
+ class Zones < Fog::Collection
9
+
10
+ model Fog::DNS::Dynect::Zone
11
+
12
+ def all
13
+ data = connection.get_zone.body['data'].map do |zone|
14
+ { :domain => zone }
15
+ end
16
+ load(data)
17
+ end
18
+
19
+ def get(zone_id)
20
+ new(connection.get_zone('zone' => zone_id).body['data'])
21
+ rescue Excon::Errors::NotFound
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Delete a record
7
+ #
8
+ # ==== Parameters
9
+ # * type<~String> - type of record in ['AAAA', 'ANY', 'A', 'CNAME', 'DHCID', 'DNAME', 'DNSKEY', 'DS', 'KEY', 'LOC', 'MX', 'NSA', 'NS', 'PTR', 'PX', 'RP', 'SOA', 'SPF', 'SRV', 'SSHFP', 'TXT']
10
+ # * zone<~String> - zone of record
11
+ # * fqdn<~String> - fqdn of record
12
+ # * record_id<~String> - id of record
13
+
14
+ def delete_record(type, zone, fqdn, record_id)
15
+ request(
16
+ :expects => 200,
17
+ :method => :delete,
18
+ :path => ["#{type.to_s.upcase}Record", zone, fqdn, record_id].join('/')
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Delete a zone
7
+ #
8
+ # ==== Parameters
9
+ # * zone<~String> - zone to host
10
+
11
+ def delete_zone(zone)
12
+ request(
13
+ :expects => 200,
14
+ :method => :delete,
15
+ :path => "Zone/#{zone}"
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Get one or more node lists
7
+ #
8
+ # ==== Parameters
9
+ # * zone<~String> - zone to lookup node lists for
10
+ # * options<~Hash>
11
+ # * fqdn<~String> - fully qualified domain name of node to lookup
12
+
13
+ def get_node_list(zone, options = {})
14
+ request(
15
+ :expects => 200,
16
+ :method => :get,
17
+ :path => ['NodeList', zone, options['fqdn']].compact.join('/')
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # List records of a given type
7
+ #
8
+ # ==== Parameters
9
+ # * type<~String> - type of record in ['AAAA', 'ANY', 'A', 'CNAME', 'DHCID', 'DNAME', 'DNSKEY', 'DS', 'KEY', 'LOC', 'MX', 'NSA', 'NS', 'PTR', 'PX', 'RP', 'SOA', 'SPF', 'SRV', 'SSHFP', 'TXT']
10
+ # * zone<~String> - name of zone to lookup
11
+ # * fqdn<~String> - name of fqdn to lookup
12
+ # * options<~Hash>:
13
+ # * record_id<~String> - id of record
14
+
15
+ def get_record(type, zone, fqdn, options = {})
16
+ request(
17
+ :expects => 200,
18
+ :method => :get,
19
+ :path => ["#{type.to_s.upcase}Record", zone, fqdn, options['record_id']].compact.join('/')
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Get one or more zones
7
+ #
8
+ # ==== Parameters
9
+ # * options<~Hash>:
10
+ # * zone<~String> - name of zone to lookup, or omit to return list of zones
11
+
12
+ def get_zone(options = {})
13
+ request(
14
+ :expects => 200,
15
+ :method => :get,
16
+ :path => ['Zone', options['zone']].compact.join('/')
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Create a record
7
+ #
8
+ # ==== Parameters
9
+ # * type<~String> - type of record in ['AAAA', 'ANY', 'A', 'CNAME', 'DHCID', 'DNAME', 'DNSKEY', 'DS', 'KEY', 'LOC', 'MX', 'NSA', 'NS', 'PTR', 'PX', 'RP', 'SOA', 'SPF', 'SRV', 'SSHFP', 'TXT']
10
+ # * zone<~String> - zone of record
11
+ # * rdata<~Hash> - rdata for record
12
+ # * options<~Hash>: (options vary by type, listing below includes common parameters)
13
+ # * ttl<~Integer> - ttl for the record, defaults to zone ttl
14
+
15
+ def post_record(type, zone, fqdn, rdata, options = {})
16
+ options.merge!('rdata' => rdata)
17
+ request(
18
+ :body => MultiJson.encode(options),
19
+ :expects => 200,
20
+ :method => :post,
21
+ :path => ["#{type.to_s.upcase}Record", zone, fqdn].join('/')
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ def post_session
7
+ request(
8
+ :expects => 200,
9
+ :method => :post,
10
+ :path => "Session",
11
+ :body => MultiJson.encode({
12
+ :customer_name => @dynect_customer,
13
+ :user_name => @dynect_username,
14
+ :password => @dynect_password
15
+ })
16
+ )
17
+ end
18
+ end
19
+
20
+ class Mock
21
+
22
+ def post_session
23
+ response = Excon::Response.new
24
+ response.status = 200
25
+ response.body = {
26
+ 'API-Version' => '2.3.1',
27
+ 'Auth-Token' => 'thetoken=='
28
+ }
29
+ response
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,32 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Create a zone
7
+ #
8
+ # ==== Parameters
9
+ # * rname<~String> - administrative contact
10
+ # * ttl<~Integer> - time to live (in seconds) for records in this zone
11
+ # * zone<~String> - name of zone to host
12
+ # * options<~Hash>:
13
+ # * serial_style<~String> - style of serial number, in ['day', 'epoch', 'increment', 'minute']. Defaults to increment
14
+
15
+ def post_zone(rname, ttl, zone, options = {})
16
+ body = MultiJson.encode({
17
+ :rname => rname,
18
+ :token => auth_token,
19
+ :ttl => ttl
20
+ }.merge!(options))
21
+
22
+ request(
23
+ :body => body,
24
+ :expects => 200,
25
+ :method => :post,
26
+ :path => 'Zone/' << zone
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module DNS
3
+ class Dynect
4
+ class Real
5
+
6
+ # Update a zone
7
+ #
8
+ # ==== Parameters
9
+ # * zone<~String> - name or id of zone
10
+ # * options<~Hash>:
11
+ # * freeze<~Boolean> - causes zone to become frozen
12
+ # * publish<~Boolean> - causes all pending changes to be pushed to nameservers
13
+ # * thaw<~Boolean> - causes zone to cease being frozen
14
+
15
+ def put_zone(zone, options = {})
16
+ request(
17
+ :body => MultiJson.encode(options),
18
+ :expects => 200,
19
+ :method => :put,
20
+ :path => 'Zone/' << zone
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,7 +3,7 @@ module Fog
3
3
  class Zerigo < Fog::Service
4
4
 
5
5
  requires :zerigo_email, :zerigo_token
6
- recognizes :timeout, :persistent
6
+ recognizes :host, :persistent, :port, :scheme, :timeout
7
7
 
8
8
  model_path 'fog/dns/models/zerigo'
9
9
  model :record
data/lib/fog/providers.rb CHANGED
@@ -11,6 +11,7 @@ require 'fog/providers/bluebox'
11
11
  require 'fog/providers/brightbox'
12
12
  require 'fog/providers/dnsimple'
13
13
  require 'fog/providers/dnsmadeeasy'
14
+ require 'fog/providers/dynect'
14
15
  require 'fog/providers/ecloud'
15
16
  require 'fog/providers/go_grid'
16
17
  require 'fog/providers/google'
@@ -0,0 +1,14 @@
1
+ require 'nokogiri'
2
+
3
+ require 'fog/core'
4
+ require 'fog/core/parser'
5
+
6
+ module Fog
7
+ module Dynect
8
+
9
+ extend Fog::Provider
10
+
11
+ service(:dns, 'dns/dynect')
12
+
13
+ end
14
+ end
@@ -8,6 +8,7 @@ module Fog
8
8
  service(:cdn, 'cdn/rackspace')
9
9
  service(:compute, 'compute/rackspace')
10
10
  service(:storage, 'storage/rackspace')
11
+ service(:load_balancers, 'rackspace/load_balancers')
11
12
 
12
13
  def self.authenticate(options)
13
14
  rackspace_auth_url = options[:rackspace_auth_url] || "auth.api.rackspacecloud.com"
@@ -0,0 +1,179 @@
1
+ module Fog
2
+ module Rackspace
3
+ class LoadBalancers < Fog::Service
4
+
5
+ class ServiceError < Fog::Errors::Error
6
+ attr_reader :response_data
7
+
8
+ def self.slurp(error)
9
+ if error.response.body.empty?
10
+ data = nil
11
+ message = nil
12
+ else
13
+ data = MultiJson.decode(error.response.body)
14
+ message = data['message']
15
+ end
16
+
17
+ new_error = super(error, message)
18
+ new_error.instance_variable_set(:@response_data, data)
19
+ new_error
20
+ end
21
+ end
22
+
23
+ class InternalServerError < ServiceError; end
24
+
25
+ class BadRequest < ServiceError
26
+ #TODO - Need to find a bette way to print out these validation errors when they are thrown
27
+ attr_reader :validation_errors
28
+
29
+ def self.slurp(error)
30
+ new_error = super(error)
31
+ unless new_error.response_data.nil?
32
+ new_error.instance_variable_set(:@validation_errors, new_error.response_data['validationErrors'])
33
+ end
34
+ new_error
35
+ end
36
+ end
37
+
38
+ DFW_ENDPOINT = 'https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/'
39
+ ORD_ENDPOINT = 'https://ord.loadbalancers.api.rackspacecloud.com/v1.0/'
40
+ LON_ENDPOINT = 'https://lon.loadbalancers.api.rackspacecloud.com/v1.0/'
41
+
42
+ requires :rackspace_api_key, :rackspace_username
43
+ recognizes :rackspace_auth_url
44
+ recognizes :rackspace_auth_token
45
+
46
+ model_path 'fog/rackspace/models/load_balancers'
47
+ collection :load_balancers
48
+ model :load_balancer
49
+ collection :nodes
50
+ model :node
51
+ collection :virtual_ips
52
+ model :virtual_ip
53
+ collection :access_rules
54
+ model :access_rule
55
+
56
+ request_path 'fog/rackspace/requests/load_balancers'
57
+ request :create_load_balancer
58
+ request :get_load_balancer
59
+ request :list_load_balancers
60
+ request :update_load_balancer
61
+ request :delete_load_balancer
62
+ request :create_node
63
+ request :list_nodes
64
+ request :get_node
65
+ request :update_node
66
+ request :delete_node
67
+ request :delete_nodes
68
+ request :create_virtual_ip
69
+ request :list_virtual_ips
70
+ request :delete_virtual_ip
71
+ request :list_protocols
72
+ request :list_algorithms
73
+ request :get_connection_logging
74
+ request :set_connection_logging
75
+ request :create_access_rule
76
+ request :list_access_rules
77
+ request :delete_access_rule
78
+ request :delete_all_access_rules
79
+ request :get_session_persistence
80
+ request :set_session_persistence
81
+ request :remove_session_persistence
82
+ request :get_connection_throttling
83
+ request :remove_connection_throttling
84
+ request :set_connection_throttling
85
+ request :get_monitor
86
+ request :set_monitor
87
+ request :remove_monitor
88
+ request :get_usage
89
+ request :get_load_balancer_usage
90
+
91
+ module Shared
92
+
93
+ def algorithms
94
+ list_algorithms.body['algorithms'].collect { |i| i['name'] }
95
+ end
96
+
97
+ def protocols
98
+ list_protocols.body['protocols']
99
+ end
100
+
101
+ def usage(options = {})
102
+ get_usage(options).body
103
+ end
104
+
105
+ end
106
+
107
+ class Mock
108
+ include Shared
109
+
110
+ def initialize(options={})
111
+ @rackspace_api_key = options[:rackspace_api_key]
112
+ @rackspace_username = options[:rackspace_username]
113
+ @rackspace_auth_url = options[:rackspace_auth_url]
114
+ end
115
+
116
+ end
117
+
118
+ class Real
119
+ include Shared
120
+
121
+ def initialize(options={})
122
+ require 'multi_json'
123
+ @rackspace_api_key = options[:rackspace_api_key]
124
+ @rackspace_username = options[:rackspace_username]
125
+ @rackspace_auth_url = options[:rackspace_auth_url]
126
+ @rackspace_must_reauthenticate = false
127
+ uri = URI.parse(options[:rackspace_lb_endpoint] || DFW_ENDPOINT)
128
+ @host = uri.host
129
+ @path = uri.path
130
+ @port = uri.port
131
+ @scheme = uri.scheme
132
+
133
+ authenticate
134
+
135
+ @connection = Fog::Connection.new(uri.to_s, options[:persistent])
136
+ end
137
+
138
+ def request(params)
139
+ #TODO - Unify code with other rackspace services
140
+ begin
141
+ response = @connection.request(params.merge!({
142
+ :headers => {
143
+ 'Content-Type' => 'application/json',
144
+ 'X-Auth-Token' => @auth_token
145
+ }.merge!(params[:headers] || {}),
146
+ :host => @host,
147
+ :path => "#{@path}/#{params[:path]}"
148
+ }))
149
+ rescue Excon::Errors::NotFound => error
150
+ raise NotFound.slurp error
151
+ rescue Excon::Errors::BadRequest => error
152
+ raise BadRequest.slurp error
153
+ rescue Excon::Errors::InternalServerError => error
154
+ raise InternalServerError.slurp error
155
+ rescue Excon::Errors::HTTPStatusError => error
156
+ raise ServiceError.slurp error
157
+ end
158
+ unless response.body.empty?
159
+ response.body = MultiJson.decode(response.body)
160
+ end
161
+ response
162
+ end
163
+
164
+ def authenticate
165
+ options = {
166
+ :rackspace_api_key => @rackspace_api_key,
167
+ :rackspace_username => @rackspace_username,
168
+ :rackspace_auth_url => @rackspace_auth_url
169
+ }
170
+ credentials = Fog::Rackspace.authenticate(options)
171
+ @auth_token = credentials['X-Auth-Token']
172
+ account_id = credentials['X-Server-Management-Url'].match(/.*\/([\d]+)$/)[1]
173
+ @path = "#{@path}/#{account_id}"
174
+ end
175
+
176
+ end
177
+ end
178
+ end
179
+ end