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
@@ -0,0 +1,31 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ # Delete a record from the specified DNS zone
7
+ # ==== Parameters
8
+ # * record_id<~Integer> - Id of DNS record to delete
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>: - HTTP status code will be result
12
+ def delete_record(record_id)
13
+ request(
14
+ :expects => 200,
15
+ :method => 'DELETE',
16
+ :path => "records/#{record_id}.xml"
17
+ )
18
+ end
19
+
20
+ end
21
+
22
+ class Mock
23
+
24
+ def delete_record(record_id)
25
+ Fog::Mock.not_implemented
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ # Delete a zone from Slicehost's DNS
7
+ # ==== Parameters
8
+ # * zone_id<~Integer> - Id of zone to delete
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>: - HTTP status code will be result
12
+ def delete_zone(zone_id)
13
+ request(
14
+ :expects => 200,
15
+ :method => 'DELETE',
16
+ :path => "zones/#{zone_id}.xml"
17
+ )
18
+ end
19
+
20
+ end
21
+
22
+ class Mock
23
+
24
+ def delete_zone(zone_id)
25
+ Fog::Mock.not_implemented
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ require 'fog/slicehost/parsers/dns/get_record'
7
+
8
+ # Get an individual DNS record from the specified zone
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Hash>:
13
+ # * 'record_type'<~String> - type of DNS record to create (A, CNAME, etc)
14
+ # * 'zone_id'<~Integer> - ID of the zone to update
15
+ # * 'name'<~String> - host name this DNS record is for
16
+ # * 'data'<~String> - data for the DNS record (ie for an A record, the IP address)
17
+ # * 'ttl'<~Integer> - time to live in seconds
18
+ # * 'active'<~String> - whether this record is active or not ('Y' or 'N')
19
+ # * 'aux'<~String> - extra data required by the record
20
+ def get_record( record_id)
21
+ request(
22
+ :expects => 200,
23
+ :method => 'GET',
24
+ :parser => Fog::Parsers::Slicehost::DNS::GetRecords.new,
25
+ :path => "records/#{record_id}.xml"
26
+ )
27
+ end
28
+
29
+ end
30
+
31
+ class Mock
32
+
33
+ def get_record(record_id)
34
+ Fog::Mock.not_implemented
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ require 'fog/slicehost/parsers/dns/get_records'
7
+
8
+ # Get all the DNS records across all the DNS zones for this account
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Array>:
13
+ # * 'addresses'<~Array> - Ip addresses for the slice
14
+ # * 'backup-id'<~Integer> - Id of backup slice was booted from
15
+ # * 'flavor_id'<~Integer> - Id of flavor slice was booted from
16
+ # * 'id'<~Integer> - Id of the slice
17
+ # * 'image-id'<~Integer> - Id of image slice was booted from
18
+ # * 'name'<~String> - Name of the slice
19
+ # * 'progress'<~Integer> - Progress of current action, in percentage
20
+ # * 'status'<~String> - Current status of the slice
21
+ def get_records
22
+ request(
23
+ :expects => 200,
24
+ :method => 'GET',
25
+ :parser => Fog::Parsers::Slicehost::DNS::GetRecords.new,
26
+ :path => "records.xml"
27
+ )
28
+ end
29
+
30
+ end
31
+
32
+ class Mock
33
+
34
+ def get_records
35
+ Fog::Mock.not_implemented
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ require 'fog/slicehost/parsers/dns/get_zone'
7
+
8
+ # Get details of a DNS zone
9
+ #
10
+ # ==== Parameters
11
+ # * zone_id<~Integer> - Id of zone to lookup
12
+ #
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'origin'<~String> - domain name to host (ie example.com)
17
+ # * 'id'<~Integer> - Id of the zone
18
+ # * 'ttl'<~Integer> - TimeToLive (ttl) for the domain, in seconds (> 60)
19
+ # * 'active'<~String> - whether zone is active in Slicehost DNS server - 'Y' or 'N'
20
+ def get_zone(zone_id)
21
+ request(
22
+ :expects => 200,
23
+ :method => 'GET',
24
+ :parser => Fog::Parsers::Slicehost::DNS::GetZone.new,
25
+ :path => "/zones/#{zone_id}.xml"
26
+ )
27
+ end
28
+
29
+ end
30
+
31
+ class Mock
32
+
33
+ def get_zone(zone_id)
34
+ Fog::Mock.not_implemented
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Slicehost
3
+ class DNS
4
+ class Real
5
+
6
+ require 'fog/slicehost/parsers/dns/get_zones'
7
+
8
+ # Get list of all DNS zones hosted on Slicehost (for this account)
9
+ #
10
+ # ==== Returns
11
+ # * response<~Excon::Response>:
12
+ # * body<~Hash>:
13
+ # * 'zones'<~Array>
14
+ # * 'origin'<~String> - domain name to host (ie example.com)
15
+ # * 'id'<~Integer> - Id of the zone
16
+ # * 'ttl'<~Integer> - TimeToLive (ttl) for the domain, in seconds (> 60)
17
+ # * 'active'<~String> - whether zone is active in Slicehost DNS server - 'Y' or 'N'
18
+ def get_zones
19
+ request(
20
+ :expects => 200,
21
+ :method => 'GET',
22
+ :parser => Fog::Parsers::Slicehost::DNS::GetZones.new,
23
+ :path => 'zones.xml'
24
+ )
25
+ end
26
+
27
+ end
28
+
29
+ class Mock
30
+
31
+ def get_zones
32
+ Fog::Mock.not_implemented
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,6 @@
1
1
  require 'nokogiri'
2
+
3
+ require File.join(File.dirname(__FILE__), 'core')
2
4
  require 'fog/core/parser'
3
5
 
4
6
  require 'fog/terremark/shared'
@@ -32,10 +32,8 @@ module Fog
32
32
  end
33
33
 
34
34
  class Real
35
- # NOTE: When this vbecomes a service, take care to pass the &inject_parameter_specs
36
- # block on call to requires and recognizes
37
- requires :terremark_ecloud_password, :terremark_ecloud_username
38
- recognizes :host, :path, :port, :scheme, :persistent
35
+ # requires :terremark_ecloud_password, :terremark_ecloud_username
36
+ # recognizes :host, :path, :port, :scheme, :persistent
39
37
 
40
38
  include Fog::Terremark::Shared::Real
41
39
  include Fog::Terremark::Shared::Parser
@@ -1,4 +1,6 @@
1
1
  require 'nokogiri'
2
+
3
+ require File.join(File.dirname(__FILE__), 'core')
2
4
  require 'fog/core/parser'
3
5
 
4
6
  require 'builder'
@@ -19,8 +21,8 @@ end
19
21
  module Fog
20
22
  class Vcloud < Fog::Service
21
23
 
22
- requires :username, :password, :module, :versions_uri, &inject_parameter_specs
23
- recognizes :version, :persistent, &inject_parameter_specs
24
+ requires :username, :password, :versions_uri
25
+ recognizes :version, :persistent
24
26
 
25
27
  model_path 'fog/vcloud/models'
26
28
  model :vdc
@@ -38,7 +38,9 @@ module Vcloud
38
38
  def [](service)
39
39
  @@connections ||= Hash.new do |hash, key|
40
40
  if credentials = Fog.credentials[:vcloud][key]
41
- hash[key] = eval(credentials[:module]).new(credentials)
41
+ credentials = credentials.dup
42
+ _module_ = eval(credentials.delete(:module))
43
+ hash[key] = _module_.new(credentials)
42
44
  else
43
45
  raise ArgumentError.new("Unregistered service: :#{key}. Registered services are: #{Vcloud.registered_services}")
44
46
  end
@@ -47,17 +47,7 @@ module Fog
47
47
  end
48
48
 
49
49
  def inspect
50
- "<#{self.class.name} #{object_id} data=#{super} method_data=#{method_data.inspect}>"
51
- end
52
-
53
- private
54
-
55
- def unique_methods
56
- (public_methods - self.class.superclass.public_instance_methods).reject {|m| m.to_s =~ /!$/ }
57
- end
58
-
59
- def method_data
60
- (unique_methods + [:href]).sort_by(&:to_s).find_all {|m| method(m).arity == 0 }.inject({}) {|md, m| md.update(m => send(m)) }
50
+ "<#{self.class.name} #{object_id} data=#{super}>"
61
51
  end
62
52
  end
63
53
 
@@ -131,6 +121,14 @@ module Fog
131
121
  find_href_in(href, all_vdc_internet_service_collections)
132
122
  end
133
123
 
124
+ def all_backup_internet_services
125
+ all_vdc_internet_service_collections.map(&:backup_internet_services).flatten
126
+ end
127
+
128
+ def backup_internet_service_from_href(href)
129
+ find_href_in(href, all_backup_internet_services)
130
+ end
131
+
134
132
  def all_public_ip_collections
135
133
  all_vdcs.map {|v| v.public_ip_collection }.flatten
136
134
  end
@@ -434,6 +432,10 @@ module Fog
434
432
  def rnat
435
433
  self[:rnat] || _parent._parent.rnat
436
434
  end
435
+
436
+ def rnat_set?
437
+ !!self[:rnat]
438
+ end
437
439
  end
438
440
 
439
441
  class MockNetworkExtensions < Base
@@ -456,6 +458,18 @@ module Fog
456
458
  def rnat
457
459
  _parent.rnat
458
460
  end
461
+
462
+ def type
463
+ self[:type] || "DMZ"
464
+ end
465
+
466
+ def vlan
467
+ object_id.to_s
468
+ end
469
+
470
+ def friendly_name
471
+ "#{name} (#{type}_#{object_id})"
472
+ end
459
473
  end
460
474
 
461
475
  class MockVirtualMachine < Base
@@ -495,6 +509,12 @@ module Fog
495
509
  disks.inject(0) {|s, d| s + d.vcloud_size }
496
510
  end
497
511
 
512
+ def network_ip
513
+ if network = _parent.networks.detect {|n| n.ip_collection.items[ip] }
514
+ network.ip_collection.items[ip]
515
+ end
516
+ end
517
+
498
518
  # from fog ecloud server's _compose_vapp_data
499
519
  def to_configure_vapp_hash
500
520
  {
@@ -574,10 +594,52 @@ module Fog
574
594
  end
575
595
 
576
596
  def items
597
+ public_ip_internet_services + backup_internet_services
598
+ end
599
+
600
+ def public_ip_internet_services
577
601
  _parent.public_ip_collection.items.inject([]) do |services, public_ip|
578
602
  services + public_ip.internet_service_collection.items
579
603
  end
580
604
  end
605
+
606
+ def backup_internet_services
607
+ @backup_internet_services ||= []
608
+ end
609
+ end
610
+
611
+ class MockBackupInternetService < Base
612
+ def name
613
+ self[:name] || "Backup Internet Service #{object_id}"
614
+ end
615
+
616
+ def protocol
617
+ self[:protocol]
618
+ end
619
+
620
+ def port
621
+ 0
622
+ end
623
+
624
+ def enabled
625
+ self[:enabled].to_s.downcase != "false"
626
+ end
627
+
628
+ def timeout
629
+ self[:timeout] || 2
630
+ end
631
+
632
+ def description
633
+ self[:description] || "Description for Backup Service #{name}"
634
+ end
635
+
636
+ def redirect_url
637
+ nil
638
+ end
639
+
640
+ def node_collection
641
+ @node_collection ||= MockPublicIpInternetServiceNodes.new({}, self)
642
+ end
581
643
  end
582
644
 
583
645
  class MockFirewallAcls < Base
@@ -652,6 +714,10 @@ module Fog
652
714
  def monitor
653
715
  nil
654
716
  end
717
+
718
+ def backup_service
719
+ self[:backup_service]
720
+ end
655
721
  end
656
722
 
657
723
  class MockPublicIpInternetServiceNodes < Base
@@ -3,6 +3,9 @@ module Fog
3
3
  module Terremark
4
4
  class Ecloud < Fog::Vcloud
5
5
 
6
+ requires :username, :password, :versions_uri
7
+ recognizes :version
8
+
6
9
  model_path 'fog/vcloud/terremark/ecloud/models'
7
10
  model :catalog_item
8
11
  model :catalog
@@ -10,6 +13,8 @@ module Fog
10
13
  collection :firewall_acls
11
14
  model :internet_service
12
15
  collection :internet_services
16
+ model :backup_internet_service
17
+ collection :backup_internet_services
13
18
  model :ip
14
19
  collection :ips
15
20
  model :network
@@ -27,6 +32,7 @@ module Fog
27
32
 
28
33
  request_path 'fog/vcloud/terremark/ecloud/requests'
29
34
  request :add_internet_service
35
+ request :add_backup_internet_service
30
36
  request :add_node
31
37
  request :clone_vapp
32
38
  request :configure_internet_service
@@ -62,13 +68,23 @@ module Fog
62
68
  request :power_reset
63
69
  request :power_shutdown
64
70
 
71
+ module Shared
72
+ def ecloud_xmlns
73
+ {
74
+ "xmlns" => "urn:tmrk:eCloudExtensions-2.5",
75
+ "xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance"
76
+ }
77
+ end
78
+ end
79
+
65
80
  class Mock < Fog::Vcloud::Mock
81
+ include Shared
66
82
 
67
83
  def initialize(options={})
68
84
  end
69
85
 
70
86
  def self.base_url
71
- "https://fakey.com/api/v0.8b-ext2.3"
87
+ "https://fakey.com/api/v0.8b-ext2.5"
72
88
  end
73
89
 
74
90
  def self.data_reset
@@ -79,7 +95,7 @@ module Fog
79
95
  def self.data( base_url = self.base_url )
80
96
  @mock_data ||= Fog::Vcloud::Mock.data(base_url).tap do |vcloud_mock_data|
81
97
  vcloud_mock_data.versions.clear
82
- vcloud_mock_data.versions << MockVersion.new(:version => "v0.8b-ext2.3")
98
+ vcloud_mock_data.versions << MockVersion.new(:version => "v0.8b-ext2.5")
83
99
 
84
100
  vcloud_mock_data.organizations.detect {|o| o.name == "Boom Inc." }.tap do |mock_organization|
85
101
  mock_organization.vdcs.detect {|v| v.name == "Boomstick" }.tap do |mock_vdc|
@@ -128,6 +144,8 @@ module Fog
128
144
  end
129
145
 
130
146
  mock_vdc.public_ip_collection.items << MockPublicIp.new(:name => "99.1.9.7")
147
+
148
+ mock_vdc.internet_service_collection.backup_internet_services << MockBackupInternetService.new({ :port => 10000, :protocol => "TCP"}, self)
131
149
  end
132
150
 
133
151
  mock_organization.vdcs.detect {|v| v.name == "Rock-n-Roll" }.tap do |mock_vdc|
@@ -149,19 +167,16 @@ module Fog
149
167
  end
150
168
  end
151
169
 
152
- def ecloud_xmlns
153
- { :xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" }
154
- end
155
-
156
170
  def mock_data
157
171
  Fog::Vcloud::Terremark::Ecloud::Mock.data
158
172
  end
159
173
  end
160
174
 
161
175
  class Real < Fog::Vcloud::Real
176
+ include Shared
162
177
 
163
178
  def supporting_versions
164
- ["v0.8b-ext2.3", "0.8b-ext2.3"]
179
+ ["v0.8b-ext2.5", "0.8b-ext2.5"]
165
180
  end
166
181
 
167
182
  end