fog 0.3.31 → 0.3.32

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 (192) hide show
  1. data/.document +3 -0
  2. data/.gitignore +10 -0
  3. data/Gemfile.lock +1 -4
  4. data/README.rdoc +29 -37
  5. data/Rakefile +5 -25
  6. data/bin/fog +1 -3
  7. data/examples/dns_methods.rb +389 -0
  8. data/examples/storage.rb +103 -0
  9. data/fog.gemspec +4 -778
  10. data/lib/fog.rb +5 -66
  11. data/lib/fog/aws.rb +3 -0
  12. data/lib/fog/aws/bin.rb +7 -2
  13. data/lib/fog/aws/cdn.rb +2 -2
  14. data/lib/fog/aws/compute.rb +2 -2
  15. data/lib/fog/aws/dns.rb +101 -0
  16. data/lib/fog/aws/elb.rb +2 -2
  17. data/lib/fog/aws/iam.rb +2 -2
  18. data/lib/fog/aws/models/compute/image.rb +1 -0
  19. data/lib/fog/aws/models/compute/server.rb +1 -1
  20. data/lib/fog/aws/models/compute/servers.rb +1 -13
  21. data/lib/fog/aws/parsers/compute/describe_images.rb +36 -34
  22. data/lib/fog/aws/parsers/dns/change_resource_record_sets.rb +26 -0
  23. data/lib/fog/aws/parsers/dns/create_hosted_zone.rb +55 -0
  24. data/lib/fog/aws/parsers/dns/delete_hosted_zone.rb +25 -0
  25. data/lib/fog/aws/parsers/dns/get_change.rb +26 -0
  26. data/lib/fog/aws/parsers/dns/get_hosted_zone.rb +43 -0
  27. data/lib/fog/aws/parsers/dns/list_hosted_zones.rb +35 -0
  28. data/lib/fog/aws/parsers/dns/list_resource_record_sets.rb +46 -0
  29. data/lib/fog/aws/requests/compute/describe_images.rb +1 -0
  30. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +90 -0
  31. data/lib/fog/aws/requests/dns/create_hosted_zone.rb +68 -0
  32. data/lib/fog/aws/requests/dns/delete_hosted_zone.rb +48 -0
  33. data/lib/fog/aws/requests/dns/get_change.rb +47 -0
  34. data/lib/fog/aws/requests/dns/get_hosted_zone.rb +51 -0
  35. data/lib/fog/aws/requests/dns/list_hosted_zones.rb +63 -0
  36. data/lib/fog/aws/requests/dns/list_resource_record_sets.rb +68 -0
  37. data/lib/fog/aws/requests/storage/get_object_url.rb +2 -2
  38. data/lib/fog/aws/requests/storage/put_object_url.rb +2 -2
  39. data/lib/fog/aws/requests/storage/sync_clock.rb +28 -0
  40. data/lib/fog/aws/simpledb.rb +2 -2
  41. data/lib/fog/aws/storage.rb +5 -3
  42. data/lib/fog/bluebox.rb +2 -0
  43. data/lib/fog/bluebox/compute.rb +2 -2
  44. data/lib/fog/brightbox.rb +2 -0
  45. data/lib/fog/brightbox/compute.rb +2 -2
  46. data/lib/fog/core.rb +21 -1
  47. data/lib/fog/core/bin.rb +3 -1
  48. data/lib/fog/core/compute.rb +1 -0
  49. data/lib/fog/core/credentials.rb +72 -50
  50. data/lib/fog/core/deprecation.rb +11 -5
  51. data/lib/fog/core/mock.rb +34 -0
  52. data/lib/fog/core/model.rb +9 -1
  53. data/lib/fog/core/service.rb +40 -26
  54. data/lib/fog/core/storage.rb +1 -0
  55. data/lib/fog/core/time.rb +21 -0
  56. data/lib/fog/core/wait_for.rb +17 -0
  57. data/lib/fog/go_grid.rb +2 -0
  58. data/lib/fog/go_grid/compute.rb +2 -2
  59. data/lib/fog/google.rb +2 -0
  60. data/lib/fog/google/requests/storage/get_bucket.rb +6 -5
  61. data/lib/fog/google/requests/storage/get_object_url.rb +4 -4
  62. data/lib/fog/google/requests/storage/put_object_url.rb +4 -4
  63. data/lib/fog/google/storage.rb +4 -3
  64. data/lib/fog/linode.rb +3 -0
  65. data/lib/fog/linode/bin.rb +5 -3
  66. data/lib/fog/linode/compute.rb +6 -2
  67. data/lib/fog/linode/dns.rb +80 -0
  68. data/lib/fog/linode/requests/dns/domain_create.rb +52 -0
  69. data/lib/fog/linode/requests/dns/domain_delete.rb +35 -0
  70. data/lib/fog/linode/requests/dns/domain_list.rb +50 -0
  71. data/lib/fog/linode/requests/dns/domain_resource_create.rb +53 -0
  72. data/lib/fog/linode/requests/dns/domain_resource_delete.rb +36 -0
  73. data/lib/fog/linode/requests/dns/domain_resource_list.rb +48 -0
  74. data/lib/fog/linode/requests/dns/domain_resource_update.rb +54 -0
  75. data/lib/fog/linode/requests/dns/domain_update.rb +48 -0
  76. data/lib/fog/local.rb +2 -0
  77. data/lib/fog/local/storage.rb +3 -3
  78. data/lib/fog/new_servers.rb +2 -0
  79. data/lib/fog/new_servers/compute.rb +2 -2
  80. data/lib/fog/rackspace.rb +2 -0
  81. data/lib/fog/rackspace/cdn.rb +2 -2
  82. data/lib/fog/rackspace/compute.rb +2 -2
  83. data/lib/fog/rackspace/storage.rb +2 -2
  84. data/lib/fog/slicehost.rb +3 -0
  85. data/lib/fog/slicehost/bin.rb +2 -0
  86. data/lib/fog/slicehost/compute.rb +2 -2
  87. data/lib/fog/slicehost/dns.rb +84 -0
  88. data/lib/fog/slicehost/parsers/dns/create_record.rb +26 -0
  89. data/lib/fog/slicehost/parsers/dns/create_zone.rb +26 -0
  90. data/lib/fog/slicehost/parsers/dns/get_record.rb +26 -0
  91. data/lib/fog/slicehost/parsers/dns/get_records.rb +30 -0
  92. data/lib/fog/slicehost/parsers/dns/get_zone.rb +26 -0
  93. data/lib/fog/slicehost/parsers/dns/get_zones.rb +30 -0
  94. data/lib/fog/slicehost/requests/compute/create_slice.rb +2 -2
  95. data/lib/fog/slicehost/requests/compute/delete_slice.rb +3 -17
  96. data/lib/fog/slicehost/requests/dns/create_record.rb +61 -0
  97. data/lib/fog/slicehost/requests/dns/create_zone.rb +54 -0
  98. data/lib/fog/slicehost/requests/dns/delete_record.rb +31 -0
  99. data/lib/fog/slicehost/requests/dns/delete_zone.rb +31 -0
  100. data/lib/fog/slicehost/requests/dns/get_record.rb +40 -0
  101. data/lib/fog/slicehost/requests/dns/get_records.rb +41 -0
  102. data/lib/fog/slicehost/requests/dns/get_zone.rb +40 -0
  103. data/lib/fog/slicehost/requests/dns/get_zones.rb +38 -0
  104. data/lib/fog/terremark.rb +2 -0
  105. data/lib/fog/terremark/ecloud.rb +2 -4
  106. data/lib/fog/vcloud.rb +4 -2
  107. data/lib/fog/vcloud/bin.rb +3 -1
  108. data/lib/fog/vcloud/mock_data_classes.rb +77 -11
  109. data/lib/fog/vcloud/terremark/ecloud.rb +22 -7
  110. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_service.rb +60 -0
  111. data/lib/fog/vcloud/terremark/ecloud/models/backup_internet_services.rb +36 -0
  112. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +28 -13
  113. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +2 -2
  114. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +1 -1
  115. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +4 -1
  116. data/lib/fog/vcloud/terremark/ecloud/models/server.rb +5 -5
  117. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +6 -2
  118. data/lib/fog/vcloud/terremark/ecloud/requests/add_backup_internet_service.rb +111 -0
  119. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +2 -4
  120. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +1 -3
  121. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +39 -27
  122. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network.rb +1 -2
  123. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network_ip.rb +21 -6
  124. data/lib/fog/vcloud/terremark/ecloud/requests/delete_vapp.rb +2 -1
  125. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +34 -17
  126. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_extensions.rb +12 -10
  127. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ip.rb +15 -10
  128. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +1 -12
  129. data/lib/fog/zerigo.rb +15 -0
  130. data/lib/fog/zerigo/bin.rb +25 -0
  131. data/lib/fog/zerigo/dns.rb +96 -0
  132. data/lib/fog/zerigo/parsers/dns/count_hosts.rb +24 -0
  133. data/lib/fog/zerigo/parsers/dns/count_zones.rb +24 -0
  134. data/lib/fog/zerigo/parsers/dns/create_host.rb +26 -0
  135. data/lib/fog/zerigo/parsers/dns/create_zone.rb +26 -0
  136. data/lib/fog/zerigo/parsers/dns/find_hosts.rb +30 -0
  137. data/lib/fog/zerigo/parsers/dns/get_host.rb +26 -0
  138. data/lib/fog/zerigo/parsers/dns/get_zone.rb +56 -0
  139. data/lib/fog/zerigo/parsers/dns/get_zone_stats.rb +26 -0
  140. data/lib/fog/zerigo/parsers/dns/list_hosts.rb +30 -0
  141. data/lib/fog/zerigo/parsers/dns/list_zones.rb +30 -0
  142. data/lib/fog/zerigo/requests/dns/count_hosts.rb +36 -0
  143. data/lib/fog/zerigo/requests/dns/count_zones.rb +36 -0
  144. data/lib/fog/zerigo/requests/dns/create_host.rb +70 -0
  145. data/lib/fog/zerigo/requests/dns/create_zone.rb +97 -0
  146. data/lib/fog/zerigo/requests/dns/delete_host.rb +32 -0
  147. data/lib/fog/zerigo/requests/dns/delete_zone.rb +33 -0
  148. data/lib/fog/zerigo/requests/dns/find_hosts.rb +63 -0
  149. data/lib/fog/zerigo/requests/dns/get_host.rb +47 -0
  150. data/lib/fog/zerigo/requests/dns/get_zone.rb +57 -0
  151. data/lib/fog/zerigo/requests/dns/get_zone_stats.rb +44 -0
  152. data/lib/fog/zerigo/requests/dns/list_hosts.rb +48 -0
  153. data/lib/fog/zerigo/requests/dns/list_zones.rb +53 -0
  154. data/lib/fog/zerigo/requests/dns/update_host.rb +60 -0
  155. data/lib/fog/zerigo/requests/dns/update_zone.rb +78 -0
  156. data/spec/spec_helper.rb +0 -5
  157. data/spec/vcloud/spec_helper.rb +3 -2
  158. data/spec/vcloud/terremark/ecloud/models/backup_internet_service_spec.rb +49 -0
  159. data/spec/vcloud/terremark/ecloud/models/backup_internet_services_spec.rb +29 -0
  160. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +32 -13
  161. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +7 -4
  162. data/spec/vcloud/terremark/ecloud/models/server_spec.rb +20 -0
  163. data/spec/vcloud/terremark/ecloud/requests/add_backup_internet_service_spec.rb +60 -0
  164. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +3 -0
  165. data/spec/vcloud/terremark/ecloud/requests/configure_network_ip_spec.rb +55 -0
  166. data/spec/vcloud/terremark/ecloud/requests/delete_vapp_spec.rb +9 -0
  167. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +60 -14
  168. data/spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb +2 -0
  169. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +3 -3
  170. data/tests/aws/requests/compute/image_tests.rb +15 -14
  171. data/tests/aws/requests/dns/dns_tests.rb +276 -0
  172. data/tests/brightbox/requests/compute/account_tests.rb +20 -9
  173. data/tests/brightbox/requests/compute/api_client_tests.rb +12 -4
  174. data/tests/brightbox/requests/compute/cloud_ip_tests.rb +20 -6
  175. data/tests/brightbox/requests/compute/image_tests.rb +9 -4
  176. data/tests/brightbox/requests/compute/interface_tests.rb +8 -2
  177. data/tests/brightbox/requests/compute/server_tests.rb +17 -5
  178. data/tests/brightbox/requests/compute/server_type_tests.rb +8 -4
  179. data/tests/brightbox/requests/compute/user_tests.rb +13 -5
  180. data/tests/brightbox/requests/compute/zone_tests.rb +8 -4
  181. data/tests/core/attribute_tests.rb +45 -0
  182. data/tests/helper.rb +0 -2
  183. data/tests/linode/requests/dns/dns_tests.rb +262 -0
  184. data/tests/rackspace/requests/compute/address_tests.rb +1 -1
  185. data/tests/rackspace/requests/compute/image_tests.rb +1 -1
  186. data/tests/slicehost/requests/dns_tests/dns_tests.rb +279 -0
  187. data/tests/zerigo/helper.rb +0 -0
  188. data/tests/zerigo/requests/dns/dns_tests.rb +374 -0
  189. metadata +280 -36
  190. data/spec/compact_progress_bar_formatter.rb +0 -195
  191. data/spec/core/attributes_spec.rb +0 -52
  192. data/spec/lorem.txt +0 -1
@@ -28,8 +28,7 @@ module Fog
28
28
 
29
29
  def generate_configure_network_request(network_data)
30
30
  builder = Builder::XmlMarkup.new
31
- builder.Network(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
32
- :xmlns => "urn:tmrk:eCloudExtensions-2.3") {
31
+ builder.Network(ecloud_xmlns) {
33
32
  builder.Id(network_data[:id])
34
33
  builder.Href(network_data[:href])
35
34
  builder.Name(network_data[:name])
@@ -2,14 +2,19 @@ module Fog
2
2
  class Vcloud
3
3
  module Terremark
4
4
  class Ecloud
5
- class Real
5
+ module Shared
6
+ private
6
7
 
7
- def validate_network_ip_data(network_ip_data, configure=false)
8
+ def validate_network_ip_data(network_ip_data)
8
9
  valid_opts = [:id, :href, :name, :status, :server, :rnat]
9
10
  unless valid_opts.all? { |opt| network_ip_data.keys.include?(opt) }
10
11
  raise ArgumentError.new("Required data missing: #{(valid_opts - network_ip_data.keys).map(&:inspect).join(", ")}")
11
12
  end
12
13
  end
14
+ end
15
+
16
+ class Real
17
+ include Shared
13
18
 
14
19
  def configure_network_ip(network_ip_uri, network_ip_data)
15
20
  validate_network_ip_data(network_ip_data)
@@ -28,8 +33,7 @@ module Fog
28
33
 
29
34
  def generate_configure_network_ip_request(network_ip_data)
30
35
  builder = Builder::XmlMarkup.new
31
- builder.IpAddress(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
32
- :xmlns => "urn:tmrk:eCloudExtensions-2.3") {
36
+ builder.IpAddress(ecloud_xmlns) {
33
37
  builder.Id(network_ip_data[:id])
34
38
  builder.Href(network_ip_data[:href])
35
39
  builder.Name(network_ip_data[:name])
@@ -38,13 +42,24 @@ module Fog
38
42
  builder.RnatAddress(network_ip_data[:rnat])
39
43
  }
40
44
  end
41
-
42
45
  end
43
46
 
44
47
  class Mock
48
+ include Shared
45
49
 
46
50
  def configure_network_ip(network_ip_uri, network_ip_data)
47
- Fog::Mock.not_implemented
51
+ validate_network_ip_data(network_ip_data)
52
+
53
+ if network_ip = mock_data.network_ip_from_href(network_ip_uri)
54
+ network_ip[:rnat] = network_ip_data[:rnat]
55
+
56
+ builder = Builder::XmlMarkup.new
57
+ xml = network_ip_response(builder, network_ip, ecloud_xmlns)
58
+
59
+ mock_it 200, xml, { 'Content-Type' => 'application/vnd.tmrk.ecloud.ip+xml' }
60
+ else
61
+ mock_error 200, "401 Unauthorized"
62
+ end
48
63
  end
49
64
  end
50
65
  end
@@ -13,7 +13,8 @@ module Fog
13
13
  vdc = virtual_machine._parent
14
14
 
15
15
  if vdc.internet_service_collection.items.detect {|is| is.node_collection.items.any? {|isn| isn.ip_address == virtual_machine.ip } } ||
16
- virtual_machine.status != 2
16
+ virtual_machine.status != 2 ||
17
+ virtual_machine.network_ip.rnat_set?
17
18
  mock_it 202, '', {}
18
19
  else
19
20
  vdc.virtual_machines.delete(virtual_machine)
@@ -38,26 +38,43 @@ module Fog
38
38
  def generate_internet_services(services)
39
39
  builder = Builder::XmlMarkup.new
40
40
 
41
- builder.InternetServices(:xmlns => "urn:tmrk:eCloudExtensions-2.3",:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {|xml|
41
+ builder.InternetServices("xmlns" => "urn:tmrk:eCloudExtensions-2.5", "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {|xml|
42
42
  services.each do |service|
43
- xml.InternetService {
44
- xml.Id service.object_id
45
- xml.Href service.href
46
- xml.Name service.name
47
- xml.PublicIpAddress {
48
- xml.Id service._parent._parent.object_id
49
- xml.Href service._parent._parent.href
50
- xml.Name service._parent._parent.name
51
- }
52
- xml.Port service.port
53
- xml.Protocol service.protocol
54
- xml.Enabled service.enabled
55
- xml.Timeout service.timeout
56
- xml.Description service.description
57
- xml.RedirectURL service.redirect_url
58
- xml.Monitor
43
+ generate_internet_service(xml, service)
44
+ end
45
+ }
46
+ end
47
+
48
+ def generate_internet_service(xml, service, by_itself = false)
49
+ xml.InternetService(by_itself ? { "xmlns" => "urn:tmrk:eCloudExtensions-2.5", "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" } : {}) {
50
+ xml.Id service.object_id
51
+ xml.Href service.href
52
+ xml.Name service.name
53
+ if MockDataClasses::MockBackupInternetService === service
54
+ xml.PublicIpAddress "i:nil" => true
55
+ else
56
+ xml.PublicIpAddress {
57
+ xml.Id service._parent._parent.object_id
58
+ xml.Href service._parent._parent.href
59
+ xml.Name service._parent._parent.name
59
60
  }
60
61
  end
62
+ xml.Port service.port
63
+ xml.Protocol service.protocol
64
+ xml.Enabled service.enabled
65
+ xml.Timeout service.timeout
66
+ xml.Description service.description
67
+ xml.RedirectURL service.redirect_url
68
+ xml.Monitor "i:nil" => true
69
+ xml.IsBackupService MockDataClasses::MockBackupInternetService === service
70
+ if MockDataClasses::MockPublicIpInternetService === service && service.backup_service
71
+ xml.BackupService do
72
+ xml.Href service.backup_service.href
73
+ end
74
+ else
75
+ xml.BackupService "i:nil" => true
76
+ end
77
+ xml.BackupOf
61
78
  }
62
79
  end
63
80
  end
@@ -12,16 +12,18 @@ module Fog
12
12
  def get_network_extensions(network_extension_uri)
13
13
  if network_extension = mock_data.network_extension_from_href(ensure_unparsed(network_extension_uri))
14
14
  xml = Builder::XmlMarkup.new
15
- mock_it 200,
16
- xml.Network(:xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
17
- xml.Address network_extension.address
18
- xml.RnatAddress network_extension.rnat
19
- xml.Href network_extension.href
20
- xml.Id network_extension.object_id
21
- xml.Name network_extension.name
22
- xml.GatewayAddress network_extension.gateway
23
- xml.BroadcastAddress network_extension.broadcast
24
- }, { 'Content-Type' => "application/vnd.tmrk.ecloud.network+xml" }
15
+ mock_it 200, xml.Network(ecloud_xmlns) {
16
+ xml.Address network_extension.address
17
+ xml.RnatAddress network_extension.rnat
18
+ xml.Href network_extension.href
19
+ xml.Id network_extension.object_id
20
+ xml.Name network_extension.name
21
+ xml.GatewayAddress network_extension.gateway
22
+ xml.BroadcastAddress network_extension.broadcast
23
+ xml.NetworkType network_extension.type
24
+ xml.Vlan network_extension.vlan
25
+ xml.FriendlyName network_extension.friendly_name
26
+ }, { 'Content-Type' => "application/vnd.tmrk.ecloud.network+xml" }
25
27
  else
26
28
  mock_error 200, "401 Unauthorized"
27
29
  end
@@ -16,16 +16,7 @@ module Fog
16
16
  def get_network_ip(network_ip_uri)
17
17
  if network_ip = mock_data.network_ip_from_href(network_ip_uri)
18
18
  builder = Builder::XmlMarkup.new
19
- xml = builder.IpAddress(ecloud_xmlns) do
20
- builder.Id network_ip.object_id
21
- builder.Href network_ip.href
22
- builder.Name network_ip.name
23
-
24
- builder.Status network_ip.status
25
- if network_ip.used_by
26
- builder.Server network_ip.used_by
27
- end
28
- end
19
+ xml = network_ip_response(builder, network_ip, ecloud_xmlns)
29
20
 
30
21
  mock_it 200, xml, { 'Content-Type' => 'application/vnd.tmrk.ecloud.ip+xml' }
31
22
  else
@@ -33,6 +24,20 @@ module Fog
33
24
  end
34
25
  end
35
26
 
27
+ def network_ip_response(builder, network_ip, xmlns = {})
28
+ builder.IpAddress(xmlns) do
29
+ builder.Id network_ip.object_id
30
+ builder.Href network_ip.href
31
+ builder.Name network_ip.name
32
+
33
+ builder.Status network_ip.status
34
+ if network_ip.used_by
35
+ builder.Server network_ip.used_by.name
36
+ end
37
+
38
+ builder.RnatAddress(network_ip.rnat)
39
+ end
40
+ end
36
41
  end
37
42
  end
38
43
  end
@@ -20,18 +20,7 @@ module Fog
20
20
  builder = Builder::XmlMarkup.new
21
21
  xml = builder.IpAddresses do
22
22
  network_ip_collection.ordered_ips.each do |network_ip|
23
- builder.IpAddress do
24
- builder.Name network_ip.name
25
- builder.Href network_ip.href
26
-
27
- if network_ip.used_by
28
- builder.Status("Assigned")
29
- builder.Server(network_ip.used_by.name)
30
- else
31
- builder.Status("Available")
32
- end
33
- builder.RnatAddress(network_ip.rnat)
34
- end
23
+ network_ip_response(builder, network_ip)
35
24
  end
36
25
  end
37
26
 
@@ -0,0 +1,15 @@
1
+ require 'nokogiri'
2
+
3
+ require File.join(File.dirname(__FILE__), 'core')
4
+ require 'fog/core/parser'
5
+
6
+ module Fog
7
+ module Zerigo
8
+
9
+ extend Fog::Provider
10
+
11
+ service_path 'fog/zerigo'
12
+ service :dns
13
+
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ class Zerigo < Fog::Bin
2
+ class << self
3
+
4
+ def class_for(key)
5
+ case key
6
+ when :dns
7
+ Fog::Zerigo::DNS
8
+ else
9
+ raise ArgumentError, "Unrecognized service: #{key}"
10
+ end
11
+ end
12
+
13
+ def [](service)
14
+ @@connections ||= Hash.new do |hash, key|
15
+ hash[key] = class_for(key).new
16
+ end
17
+ @@connections[service]
18
+ end
19
+
20
+ def services
21
+ [:dns]
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,96 @@
1
+ module Fog
2
+ module Zerigo
3
+ class DNS < Fog::Service
4
+
5
+ requires :zerigo_email, :zerigo_token
6
+ recognizes :timeout, :persistent
7
+
8
+ # model_path 'fog/zerigo/models/dns'
9
+ # model :server
10
+ # collection :servers
11
+
12
+ request_path 'fog/zerigo/requests/dns'
13
+ request :list_zones
14
+ request :count_zones
15
+ request :get_zone
16
+ request :get_zone_stats
17
+ request :create_zone
18
+ request :update_zone
19
+ request :delete_zone
20
+ request :list_hosts
21
+ request :find_hosts
22
+ request :count_hosts
23
+ request :get_host
24
+ request :create_host
25
+ request :update_host
26
+ request :delete_host
27
+
28
+ class Mock
29
+
30
+ def self.data
31
+ @data ||= Hash.new do |hash, key|
32
+ hash[key] = {}
33
+ end
34
+ end
35
+
36
+ def self.reset_data(keys=data.keys)
37
+ for key in [*keys]
38
+ data.delete(key)
39
+ end
40
+ end
41
+
42
+ def initialize(options={})
43
+ @zerigo_email = options[:zerigo_email]
44
+ @zerigo_token = options[:zerigo_token]
45
+ @data = self.class.data[@zerigo_email]
46
+ @data = self.class.data[@zerigo_password]
47
+ end
48
+
49
+ end
50
+
51
+ class Real
52
+
53
+ def initialize(options={})
54
+ @zerigo_email = options[:zerigo_email]
55
+ @zerigo_token = options[:zerigo_token]
56
+ @host = options[:host] || "ns.zerigo.com"
57
+ @port = options[:port] || 80
58
+ @scheme = options[:scheme] || 'http'
59
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
60
+ end
61
+
62
+ def reload
63
+ @connection.reset
64
+ end
65
+
66
+ def request(params)
67
+ params[:headers] ||= {}
68
+ key= "#{@zerigo_email}:#{@zerigo_token}"
69
+ params[:headers].merge!({
70
+ 'Authorization' => "Basic #{Base64.encode64(key).delete("\r\n")}"
71
+ })
72
+ case params[:method]
73
+ when 'DELETE', 'GET', 'HEAD'
74
+ params[:headers]['Accept'] = 'application/xml'
75
+ when 'POST', 'PUT'
76
+ params[:headers]['Content-Type'] = 'application/xml'
77
+ end
78
+
79
+ begin
80
+ response = @connection.request(params.merge!({:host => @host}))
81
+ rescue Excon::Errors::HTTPStatusError => error
82
+ raise case error
83
+ when Excon::Errors::NotFound
84
+ Fog::Zerigo::DNS::NotFound.slurp(error)
85
+ else
86
+ error
87
+ end
88
+ end
89
+
90
+ response
91
+ end
92
+
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Parsers
3
+ module Zerigo
4
+ module DNS
5
+
6
+ class CountHosts < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = {}
10
+ end
11
+
12
+ def end_element(name)
13
+ case name
14
+ when 'count'
15
+ @response[name] = @value.to_i
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Parsers
3
+ module Zerigo
4
+ module DNS
5
+
6
+ class CountZones < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = {}
10
+ end
11
+
12
+ def end_element(name)
13
+ case name
14
+ when 'count'
15
+ @response[name] = @value.to_i
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Parsers
3
+ module Zerigo
4
+ module DNS
5
+
6
+ class CreateHost < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = {}
10
+ end
11
+
12
+ def end_element(name)
13
+ case name
14
+ when 'id', 'priority', 'ttl', 'zone-id'
15
+ @response[name] = @value.to_i
16
+ when 'data', 'fqdn', 'host-type', 'hostname', 'notes', 'zone-id', 'created-at', 'updated-at'
17
+ @response[name] = @value
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end