fog 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. data/Gemfile.lock +6 -6
  2. data/README.rdoc +7 -1
  3. data/bin/fog +4 -3
  4. data/fog.gemspec +39 -24
  5. data/lib/fog.rb +4 -12
  6. data/lib/fog/aws.rb +14 -5
  7. data/lib/fog/aws/compute.rb +26 -9
  8. data/lib/fog/aws/elb.rb +3 -2
  9. data/lib/fog/aws/models/compute/address.rb +2 -1
  10. data/lib/fog/aws/models/compute/addresses.rb +11 -9
  11. data/lib/fog/aws/models/compute/flavor.rb +1 -1
  12. data/lib/fog/aws/models/compute/flavors.rb +13 -11
  13. data/lib/fog/aws/models/compute/image.rb +2 -1
  14. data/lib/fog/aws/models/compute/images.rb +7 -9
  15. data/lib/fog/aws/models/compute/key_pair.rb +1 -1
  16. data/lib/fog/aws/models/compute/key_pairs.rb +10 -8
  17. data/lib/fog/aws/models/compute/security_group.rb +1 -1
  18. data/lib/fog/aws/models/compute/security_groups.rb +11 -9
  19. data/lib/fog/aws/models/compute/server.rb +10 -3
  20. data/lib/fog/aws/models/compute/servers.rb +14 -8
  21. data/lib/fog/aws/models/compute/snapshot.rb +3 -2
  22. data/lib/fog/aws/models/compute/snapshots.rb +11 -16
  23. data/lib/fog/aws/models/compute/tag.rb +36 -0
  24. data/lib/fog/aws/models/compute/tags.rb +34 -0
  25. data/lib/fog/aws/models/compute/volume.rb +11 -10
  26. data/lib/fog/aws/models/compute/volumes.rb +11 -9
  27. data/lib/fog/aws/models/storage/directories.rb +1 -1
  28. data/lib/fog/aws/models/storage/directory.rb +1 -1
  29. data/lib/fog/aws/models/storage/file.rb +3 -2
  30. data/lib/fog/aws/models/storage/files.rb +1 -7
  31. data/lib/fog/aws/parsers/compute/describe_availability_zones.rb +4 -2
  32. data/lib/fog/aws/parsers/compute/describe_images.rb +23 -13
  33. data/lib/fog/aws/parsers/compute/describe_instances.rb +34 -8
  34. data/lib/fog/aws/parsers/compute/describe_security_groups.rb +4 -3
  35. data/lib/fog/aws/parsers/compute/describe_snapshots.rb +33 -13
  36. data/lib/fog/aws/parsers/compute/describe_tags.rb +30 -0
  37. data/lib/fog/aws/parsers/compute/describe_volumes.rb +17 -3
  38. data/lib/fog/aws/parsers/compute/run_instances.rb +4 -4
  39. data/lib/fog/aws/parsers/storage/get_bucket.rb +1 -1
  40. data/lib/fog/aws/parsers/storage/get_bucket_logging.rb +1 -1
  41. data/lib/fog/aws/parsers/storage/get_bucket_object_versions.rb +3 -3
  42. data/lib/fog/aws/requests/compute/create_snapshot.rb +1 -0
  43. data/lib/fog/aws/requests/compute/create_tags.rb +78 -0
  44. data/lib/fog/aws/requests/compute/delete_tags.rb +45 -0
  45. data/lib/fog/aws/requests/compute/describe_addresses.rb +27 -19
  46. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +31 -25
  47. data/lib/fog/aws/requests/compute/describe_images.rb +11 -18
  48. data/lib/fog/aws/requests/compute/describe_instances.rb +125 -53
  49. data/lib/fog/aws/requests/compute/describe_key_pairs.rb +29 -21
  50. data/lib/fog/aws/requests/compute/describe_regions.rb +28 -23
  51. data/lib/fog/aws/requests/compute/describe_reserved_instances.rb +8 -4
  52. data/lib/fog/aws/requests/compute/describe_security_groups.rb +48 -19
  53. data/lib/fog/aws/requests/compute/describe_snapshots.rb +72 -35
  54. data/lib/fog/aws/requests/compute/describe_tags.rb +42 -0
  55. data/lib/fog/aws/requests/compute/describe_volumes.rb +67 -36
  56. data/lib/fog/aws/requests/compute/run_instances.rb +10 -3
  57. data/lib/fog/aws/simpledb.rb +3 -1
  58. data/lib/fog/aws/storage.rb +17 -8
  59. data/lib/fog/bluebox/models/compute/flavor.rb +1 -1
  60. data/lib/fog/bluebox/models/compute/flavors.rb +1 -1
  61. data/lib/fog/bluebox/models/compute/image.rb +1 -1
  62. data/lib/fog/bluebox/models/compute/images.rb +1 -1
  63. data/lib/fog/bluebox/models/compute/server.rb +8 -6
  64. data/lib/fog/bluebox/models/compute/servers.rb +1 -1
  65. data/lib/fog/bluebox/requests/compute/get_blocks.rb +1 -1
  66. data/lib/fog/core.rb +11 -0
  67. data/lib/fog/{attributes.rb → core/attributes.rb} +0 -0
  68. data/lib/fog/{bin.rb → core/bin.rb} +1 -1
  69. data/lib/fog/{collection.rb → core/collection.rb} +4 -0
  70. data/lib/fog/{connection.rb → core/connection.rb} +0 -0
  71. data/lib/fog/{credentials.rb → core/credentials.rb} +2 -0
  72. data/lib/fog/{deprecation.rb → core/deprecation.rb} +0 -0
  73. data/lib/fog/{errors.rb → core/errors.rb} +0 -0
  74. data/lib/fog/{hmac.rb → core/hmac.rb} +0 -0
  75. data/lib/fog/{model.rb → core/model.rb} +0 -0
  76. data/lib/fog/{parser.rb → core/parser.rb} +0 -0
  77. data/lib/fog/{provider.rb → core/provider.rb} +0 -0
  78. data/lib/fog/{service.rb → core/service.rb} +1 -0
  79. data/lib/fog/{ssh.rb → core/ssh.rb} +7 -7
  80. data/lib/fog/go_grid.rb +1 -1
  81. data/lib/fog/go_grid/compute.rb +6 -1
  82. data/lib/fog/go_grid/models/compute/image.rb +60 -0
  83. data/lib/fog/go_grid/models/compute/images.rb +33 -0
  84. data/lib/fog/go_grid/models/compute/server.rb +56 -0
  85. data/lib/fog/go_grid/models/compute/servers.rb +35 -0
  86. data/lib/fog/go_grid/requests/compute/grid_image_get.rb +41 -0
  87. data/lib/fog/go_grid/requests/compute/grid_image_list.rb +6 -1
  88. data/lib/fog/go_grid/requests/compute/grid_server_power.rb +2 -2
  89. data/lib/fog/google/models/storage/directories.rb +1 -1
  90. data/lib/fog/google/models/storage/directory.rb +1 -1
  91. data/lib/fog/google/models/storage/file.rb +3 -2
  92. data/lib/fog/google/models/storage/files.rb +1 -7
  93. data/lib/fog/google/parsers/storage/get_bucket.rb +1 -1
  94. data/lib/fog/linode/requests/compute/avail_linodeplans.rb +2 -2
  95. data/lib/fog/local/models/storage/directories.rb +1 -1
  96. data/lib/fog/local/models/storage/directory.rb +1 -1
  97. data/lib/fog/local/models/storage/file.rb +2 -2
  98. data/lib/fog/local/models/storage/files.rb +2 -5
  99. data/lib/fog/local/storage.rb +1 -1
  100. data/lib/fog/new_servers/compute.rb +1 -1
  101. data/lib/fog/rackspace/models/compute/flavor.rb +1 -3
  102. data/lib/fog/rackspace/models/compute/flavors.rb +1 -1
  103. data/lib/fog/rackspace/models/compute/image.rb +2 -1
  104. data/lib/fog/rackspace/models/compute/images.rb +1 -1
  105. data/lib/fog/rackspace/models/compute/server.rb +12 -11
  106. data/lib/fog/rackspace/models/compute/servers.rb +1 -1
  107. data/lib/fog/rackspace/models/storage/directories.rb +1 -1
  108. data/lib/fog/rackspace/models/storage/directory.rb +1 -1
  109. data/lib/fog/rackspace/models/storage/file.rb +4 -4
  110. data/lib/fog/rackspace/models/storage/files.rb +1 -1
  111. data/lib/fog/rackspace/requests/compute/create_image.rb +2 -2
  112. data/lib/fog/rackspace/requests/compute/delete_image.rb +1 -1
  113. data/lib/fog/rackspace/requests/compute/delete_server.rb +1 -1
  114. data/lib/fog/rackspace/requests/compute/get_server_details.rb +1 -1
  115. data/lib/fog/rackspace/requests/compute/list_addresses.rb +1 -1
  116. data/lib/fog/rackspace/requests/compute/list_images_detail.rb +2 -2
  117. data/lib/fog/rackspace/requests/compute/list_private_addresses.rb +1 -1
  118. data/lib/fog/rackspace/requests/compute/list_public_addresses.rb +1 -1
  119. data/lib/fog/rackspace/requests/compute/update_server.rb +1 -1
  120. data/lib/fog/rackspace/requests/storage/put_object.rb +4 -3
  121. data/lib/fog/slicehost/models/compute/flavor.rb +1 -1
  122. data/lib/fog/slicehost/models/compute/flavors.rb +1 -1
  123. data/lib/fog/slicehost/models/compute/image.rb +1 -1
  124. data/lib/fog/slicehost/models/compute/images.rb +1 -1
  125. data/lib/fog/slicehost/models/compute/server.rb +3 -1
  126. data/lib/fog/slicehost/models/compute/servers.rb +1 -1
  127. data/lib/fog/terremark/ecloud.rb +34 -33
  128. data/lib/fog/terremark/models/shared/address.rb +1 -1
  129. data/lib/fog/terremark/models/shared/network.rb +1 -1
  130. data/lib/fog/terremark/models/shared/server.rb +1 -1
  131. data/lib/fog/terremark/models/shared/servers.rb +1 -1
  132. data/lib/fog/terremark/models/shared/task.rb +1 -1
  133. data/lib/fog/terremark/models/shared/tasks.rb +1 -1
  134. data/lib/fog/terremark/models/shared/vdc.rb +1 -1
  135. data/lib/fog/terremark/parser.rb +1 -0
  136. data/lib/fog/terremark/vcloud.rb +4 -4
  137. data/lib/fog/vcloud.rb +15 -7
  138. data/lib/fog/vcloud/terremark/ecloud.rb +15 -3
  139. data/lib/fog/vcloud/terremark/ecloud/models/firewall_acls.rb +1 -1
  140. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +1 -1
  141. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +1 -1
  142. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +1 -1
  143. data/lib/fog/vcloud/terremark/ecloud/models/nodes.rb +1 -1
  144. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
  145. data/lib/fog/vcloud/terremark/ecloud/models/servers.rb +1 -1
  146. data/lib/fog/vcloud/terremark/ecloud/models/tasks.rb +1 -1
  147. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +1 -1
  148. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +55 -49
  149. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +19 -15
  150. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +8 -1
  151. data/lib/fog/vcloud/terremark/ecloud/requests/configure_node.rb +17 -12
  152. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog.rb +29 -1
  153. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog_item.rb +38 -2
  154. data/lib/fog/vcloud/terremark/ecloud/requests/get_customization_options.rb +8 -2
  155. data/lib/fog/vcloud/terremark/ecloud/requests/instantiate_vapp_template.rb +46 -4
  156. data/spec/aws/models/compute/server_spec.rb +2 -0
  157. data/spec/aws/requests/simpledb/select_spec.rb +1 -0
  158. data/spec/spec_helper.rb +1 -1
  159. data/spec/vcloud/spec_helper.rb +1 -1
  160. data/spec/vcloud/terremark/ecloud/requests/get_catalog_item_spec.rb +62 -0
  161. data/spec/vcloud/terremark/ecloud/requests/get_catalog_spec.rb +44 -0
  162. data/spec/vcloud/terremark/ecloud/requests/get_customization_options_spec.rb +39 -0
  163. data/spec/vcloud/terremark/ecloud/requests/instantiate_vapp_template_spec.rb +73 -0
  164. data/tests/aws/requests/compute/address_tests.rb +2 -6
  165. data/tests/aws/requests/compute/availability_zone_tests.rb +3 -10
  166. data/tests/aws/requests/compute/image_tests.rb +4 -9
  167. data/tests/aws/requests/compute/instance_tests.rb +7 -8
  168. data/tests/aws/requests/compute/key_pair_tests.rb +2 -6
  169. data/tests/aws/requests/compute/region_tests.rb +2 -9
  170. data/tests/aws/requests/compute/security_group_tests.rb +3 -7
  171. data/tests/aws/requests/compute/snapshot_tests.rb +4 -7
  172. data/tests/aws/requests/compute/tag_tests.rb +49 -0
  173. data/tests/aws/requests/compute/volume_tests.rb +2 -6
  174. data/tests/aws/requests/storage/bucket_tests.rb +48 -0
  175. data/tests/aws/requests/storage/object_tests.rb +63 -0
  176. data/tests/bluebox/requests/compute/block_tests.rb +24 -11
  177. data/tests/bluebox/requests/compute/product_tests.rb +3 -0
  178. data/tests/bluebox/requests/compute/template_tests.rb +3 -0
  179. data/tests/go_grid/helper.rb +0 -0
  180. data/tests/go_grid/requests/compute/image_tests.rb +0 -0
  181. data/tests/helper.rb +5 -1
  182. data/tests/linode/requests/compute/datacenter_tests.rb +1 -0
  183. data/tests/linode/requests/compute/distribution_tests.rb +2 -0
  184. data/tests/linode/requests/compute/linode_tests.rb +6 -0
  185. data/tests/linode/requests/compute/linodeplans_tests.rb +2 -0
  186. data/tests/lorem.txt +1 -0
  187. data/tests/rackspace/requests/compute/flavor_tests.rb +4 -0
  188. data/tests/rackspace/requests/compute/image_tests.rb +12 -4
  189. data/tests/rackspace/requests/compute/server_tests.rb +9 -0
  190. data/tests/slicehost/requests/compute/backup_tests.rb +1 -0
  191. data/tests/slicehost/requests/compute/flavor_tests.rb +3 -0
  192. data/tests/slicehost/requests/compute/image_tests.rb +3 -0
  193. data/tests/slicehost/requests/compute/slice_tests.rb +14 -2
  194. metadata +42 -27
  195. data/spec/aws/requests/storage/delete_bucket_spec.rb +0 -35
  196. data/spec/aws/requests/storage/delete_object_spec.rb +0 -36
  197. data/spec/aws/requests/storage/get_object_spec.rb +0 -58
  198. data/spec/aws/requests/storage/get_service_spec.rb +0 -32
  199. data/spec/aws/requests/storage/head_object_spec.rb +0 -26
  200. data/spec/aws/requests/storage/put_bucket_spec.rb +0 -19
  201. data/spec/aws/requests/storage/put_object_spec.rb +0 -43
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Slicehost
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/slicehost/models/compute/image'
3
3
 
4
4
  module Fog
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Slicehost
@@ -70,7 +70,9 @@ module Fog
70
70
  end
71
71
 
72
72
  def save
73
+ raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
73
74
  requires :flavor_id, :image_id, :name
75
+
74
76
  data = connection.create_slice(@flavor_id, @image_id, @name)
75
77
  merge_attributes(data.body)
76
78
  true
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/slicehost/models/compute/server'
3
3
 
4
4
  module Fog
@@ -1,39 +1,40 @@
1
1
  module Fog
2
2
  module Terremark
3
- module Ecloud
3
+ module Ecloud
4
4
 
5
- module Bin
6
- end
5
+ module Bin
6
+ end
7
7
 
8
- module Defaults
9
- HOST = 'services.enterprisecloud.terremark.com'
10
- PATH = '/api/v0.8a-ext2.0'
11
- PORT = 443
12
- SCHEME = 'https'
13
- end
8
+ module Defaults
9
+ HOST = 'services.enterprisecloud.terremark.com'
10
+ PATH = '/api/v0.8a-ext2.0'
11
+ PORT = 443
12
+ SCHEME = 'https'
13
+ end
14
14
 
15
- extend Fog::Terremark::Shared
15
+ extend Fog::Terremark::Shared
16
16
 
17
- def self.new(options={})
17
+ def self.new(options={})
18
18
 
19
- unless @required
20
- shared_requires
21
- @required = true
22
- end
19
+ unless @required
20
+ shared_requires
21
+ @required = true
22
+ end
23
23
 
24
- check_shared_options(options)
24
+ check_shared_options(options)
25
25
 
26
- if Fog.mocking?
26
+ if Fog.mocking?
27
27
  Fog::Terremark::Ecloud::Mock.new(options)
28
28
  else
29
29
  Fog::Terremark::Ecloud::Real.new(options)
30
30
  end
31
- end
32
31
 
33
- class Real
32
+ end
33
+
34
+ class Real
34
35
 
35
- include Fog::Terremark::Shared::Real
36
- include Fog::Terremark::Shared::Parser
36
+ include Fog::Terremark::Shared::Real
37
+ include Fog::Terremark::Shared::Parser
37
38
 
38
39
  def initialize(options={})
39
40
  @terremark_password = options[:terremark_ecloud_password]
@@ -47,18 +48,18 @@ module Fog
47
48
 
48
49
  end
49
50
 
50
- class Mock
51
- include Fog::Terremark::Shared::Mock
52
- include Fog::Terremark::Shared::Parser
53
-
54
- def initialize(option = {})
55
- super
56
- @base_url = Fog::Terremark::Ecloud::Defaults::SCHEME + "://" +
57
- Fog::Terremark::Ecloud::Defaults::HOST +
58
- Fog::Terremark::Ecloud::Defaults::PATH
59
- @data = self.class.data[:terremark_ecloud_username]
60
- end
61
- end
51
+ class Mock
52
+ include Fog::Terremark::Shared::Mock
53
+ include Fog::Terremark::Shared::Parser
54
+
55
+ def initialize(option = {})
56
+ super
57
+ @base_url = Fog::Terremark::Ecloud::Defaults::SCHEME + "://" +
58
+ Fog::Terremark::Ecloud::Defaults::HOST +
59
+ Fog::Terremark::Ecloud::Defaults::PATH
60
+ @data = self.class.data[:terremark_ecloud_username]
61
+ end
62
+ end
62
63
 
63
64
  end
64
65
  end
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Terremark
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Terremark
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Terremark
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/terremark/models/shared/server'
3
3
 
4
4
  module Fog
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Terremark
@@ -1,4 +1,4 @@
1
- require 'fog/collection'
1
+ require 'fog/core/collection'
2
2
  require 'fog/terremark/models/shared/server'
3
3
 
4
4
  module Fog
@@ -1,4 +1,4 @@
1
- require 'fog/model'
1
+ require 'fog/core/model'
2
2
 
3
3
  module Fog
4
4
  module Terremark
@@ -3,6 +3,7 @@ module Fog
3
3
  module Shared
4
4
  module Parser
5
5
 
6
+ remove_method :parse
6
7
  def parse(data)
7
8
  case data['type']
8
9
  when 'application/vnd.vmware.vcloud.vApp+xml'
@@ -25,9 +25,9 @@ module Fog
25
25
 
26
26
  if Fog.mocking?
27
27
  Fog::Terremark::Vcloud::Mock.new(options)
28
- else
28
+ else
29
29
  Fog::Terremark::Vcloud::Real.new(options)
30
- end
30
+ end
31
31
  end
32
32
 
33
33
  class Real
@@ -91,7 +91,7 @@ module Fog
91
91
  nil
92
92
  end
93
93
  end
94
- end
94
+ end
95
95
 
96
96
  class Mock
97
97
  include Fog::Terremark::Shared::Mock
@@ -106,7 +106,7 @@ module Fog
106
106
  end
107
107
  end
108
108
 
109
- end
109
+ end
110
110
  end
111
111
  end
112
112
 
@@ -31,6 +31,7 @@ module Fog
31
31
  class UnsupportedVersion < Exception ; end
32
32
 
33
33
  module Shared
34
+ attr_reader :versions_uri
34
35
 
35
36
  def default_organization_uri
36
37
  @default_organization_uri ||= begin
@@ -81,9 +82,6 @@ module Fog
81
82
  include Shared
82
83
  extend Fog::Vcloud::Generators
83
84
 
84
- attr_accessor :login_uri
85
- attr_reader :versions_uri
86
-
87
85
  def supporting_versions
88
86
  ["0.8"]
89
87
  end
@@ -295,6 +293,14 @@ module Fog
295
293
  :storage => { :used => "105", :allocated => "200" },
296
294
  :cpu => { :allocated => "10000" },
297
295
  :memory => { :allocated => "20480" },
296
+ :catalog => {
297
+ :name => "The catalog",
298
+ :items => [
299
+ { :id => "0", :name => "Item 0" },
300
+ { :id => "1", :name => "Item 1" },
301
+ { :id => "2", :name => "Item 2" },
302
+ ]
303
+ },
298
304
  :networks => [
299
305
  { :id => "31",
300
306
  :href => "#{base_url}/network/31",
@@ -367,9 +373,11 @@ module Fog
367
373
 
368
374
  def vdc_from_uri(uri)
369
375
  match = Regexp.new(%r:.*/vdc/(\d+):).match(uri.to_s)
370
- if match
371
- mock_data[:organizations].map { |org| org[:vdcs] }.flatten.detect { |vdc| vdc[:id] == match[1] }
372
- end
376
+ match && vdc_from_id(match[1])
377
+ end
378
+
379
+ def vdc_from_id(id)
380
+ mock_data[:organizations].map { |org| org[:vdcs] }.flatten.detect { |vdc| vdc[:id] == id }
373
381
  end
374
382
 
375
383
  def ip_from_uri(uri)
@@ -415,4 +423,4 @@ module Fog
415
423
  end
416
424
 
417
425
  require 'fog/vcloud/terremark/ecloud'
418
- require 'fog/vcloud/terremark/vcloud'
426
+ require 'fog/vcloud/terremark/vcloud'
@@ -102,7 +102,7 @@ module Fog
102
102
  { :id => "72", :href => extension_url + "/internetService/72", :port => "7000", :protocol => 'HTTP', :enabled => "true",
103
103
  :timeout => "2", :name => 'An SSH Map', :description => 'SSH 1', :redirect_url => '',
104
104
  :nodes => [ {:id => "83", :href => extension_url + "/nodeService/83", :ip_address => "1.2.3.5",
105
- :name => "SSH", :port => "22", :enabled => "true", :description => "web ssh" }
105
+ :name => "SSH", :port => "22", :enabled => "true", :description => "web ssh" }
106
106
  ] }
107
107
  ]
108
108
  },
@@ -157,6 +157,18 @@ module Fog
157
157
  "#{base_url}/extensions/internetService/#{internet_service[:id]}"
158
158
  end
159
159
 
160
+ def self.vapp_href(options)
161
+ "#{base_url}/vapp/#{options[:id]}"
162
+ end
163
+
164
+ def self.vapp_template_href(options)
165
+ "#{base_url}/vappTemplate/#{options[:id]}"
166
+ end
167
+
168
+ def self.catalog_item_customization_href(options)
169
+ "#{base_url}/extensions/template/#{options[:id]}/options/customization"
170
+ end
171
+
160
172
  def ecloud_xmlns
161
173
  { :xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" }
162
174
  end
@@ -167,8 +179,8 @@ module Fog
167
179
 
168
180
  def mock_ip_and_service_from_service_url(uri)
169
181
  if ip = mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.compact.detect { |pip| pip[:services].detect { |service| service[:href] == uri } }
170
- if service = ip[:services].detect { |service| service[:href] == uri }
171
- [ip, service]
182
+ if desired_service = ip[:services].detect { |service| service[:href] == uri }
183
+ [ip, desired_service]
172
184
  else
173
185
  [ip, nil]
174
186
  end
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/firewall_acl'
1
+ require 'fog/vcloud/terremark/ecloud/models/firewall_acl'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/internet_service'
1
+ require 'fog/vcloud/terremark/ecloud/models/internet_service'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/ip'
1
+ require 'fog/vcloud/terremark/ecloud/models/ip'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/network'
1
+ require 'fog/vcloud/terremark/ecloud/models/network'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/node'
1
+ require 'fog/vcloud/terremark/ecloud/models/node'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/public_ip'
1
+ require 'fog/vcloud/terremark/ecloud/models/public_ip'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/server'
1
+ require 'fog/vcloud/terremark/ecloud/models/server'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/task'
1
+ require 'fog/vcloud/terremark/ecloud/models/task'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -1,4 +1,4 @@
1
- require 'lib/fog/vcloud/terremark/ecloud/models/vdc'
1
+ require 'fog/vcloud/terremark/ecloud/models/vdc'
2
2
 
3
3
  module Fog
4
4
  class Vcloud
@@ -2,7 +2,60 @@ module Fog
2
2
  class Vcloud
3
3
  module Terremark
4
4
  class Ecloud
5
+ module Shared
6
+ def validate_internet_service_monitor(monitor)
7
+ #FIXME: Refactor this type of function into something generic
8
+ required_opts = [:type, :url_send_string, :http_headers, :receive_string, :is_enabled]
9
+
10
+ unless required_opts.all? { |opt| monitor.keys.include?(opt) && monitor[opt] }
11
+ raise ArgumentError.new("Required Monitor data missing: #{(required_opts - monitor.keys).map(&:inspect).join(", ")}")
12
+ end
13
+
14
+ unless ['HTTP','ECV'].include?(monitor[:type])
15
+ raise ArgumentError.new("Supported monitor types are: ECV & HTTP")
16
+ end
17
+
18
+ unless monitor[:http_headers].is_a?(Array) || monitor[:http_headers].is_a?(String)
19
+ raise ArgumentError.new("Monitor :http_headers must be a String or Array")
20
+ end
21
+
22
+ unless [true, false, "true", "false"].include?(monitor[:is_enabled])
23
+ raise ArgumentError.new("Monitor :is_enabled must be true or false")
24
+ end
25
+ end
26
+
27
+ def validate_internet_service_data(service_data, configure=false)
28
+ required_opts = [:name, :protocol, :port, :description, :enabled]
29
+ if configure
30
+ required_opts + [ :id, :href, :timeout ]
31
+ end
32
+ unless required_opts.all? { |opt| service_data.keys.include?(opt) }
33
+ raise ArgumentError.new("Required Internet Service data missing: #{(required_opts - service_data.keys).map(&:inspect).join(", ")}")
34
+ end
35
+ end
36
+ end
37
+
5
38
  class Real
39
+ include Shared
40
+
41
+ def add_internet_service(internet_services_uri, service_data)
42
+ validate_internet_service_data(service_data)
43
+ if monitor = service_data[:monitor]
44
+ validate_internet_service_monitor(monitor)
45
+ ensure_monitor_defaults!(monitor)
46
+ end
47
+
48
+ request(
49
+ :body => generate_internet_service_request(service_data),
50
+ :expects => 200,
51
+ :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
52
+ :method => 'POST',
53
+ :uri => internet_services_uri,
54
+ :parse => true
55
+ )
56
+ end
57
+
58
+ private
6
59
 
7
60
  def generate_internet_service_request(service_data)
8
61
  builder = Builder::XmlMarkup.new
@@ -35,37 +88,6 @@ module Fog
35
88
  }
36
89
  end
37
90
 
38
- def validate_internet_service_data(service_data, configure=false)
39
- required_opts = [:name, :protocol, :port, :description, :enabled]
40
- if configure
41
- required_opts + [ :id, :href, :timeout ]
42
- end
43
- unless required_opts.all? { |opt| service_data.keys.include?(opt) }
44
- raise ArgumentError.new("Required Internet Service data missing: #{(required_opts - service_data.keys).map(&:inspect).join(", ")}")
45
- end
46
- end
47
-
48
- def validate_internet_service_monitor(monitor)
49
- #FIXME: Refactor this type of function into something generic
50
- required_opts = [:type, :url_send_string, :http_headers, :receive_string, :is_enabled]
51
-
52
- unless required_opts.all? { |opt| monitor.keys.include?(opt) && monitor[opt] }
53
- raise ArgumentError.new("Required Monitor data missing: #{(required_opts - monitor.keys).map(&:inspect).join(", ")}")
54
- end
55
-
56
- unless ['HTTP','ECV'].include?(monitor[:type])
57
- raise ArgumentError.new("Supported monitor types are: ECV & HTTP")
58
- end
59
-
60
- unless monitor[:http_headers].is_a?(Array) || monitor[:http_headers].is_a?(String)
61
- raise ArgumentError.new("Monitor :http_headers must be a String or Array")
62
- end
63
-
64
- unless [true, false, "true", "false"].include?(monitor[:is_enabled])
65
- raise ArgumentError.new("Monitor :is_enabled must be true or false")
66
- end
67
- end
68
-
69
91
  def ensure_monitor_defaults!(monitor)
70
92
  if monitor[:http_headers].is_a?(String)
71
93
  monitor[:http_headers] = [ monitor[:http_headers] ]
@@ -87,27 +109,11 @@ module Fog
87
109
  monitor[:interval] = 5
88
110
  end
89
111
  end
90
-
91
- def add_internet_service(internet_services_uri, service_data)
92
- validate_internet_service_data(service_data)
93
- if monitor = service_data[:monitor]
94
- validate_internet_service_monitor(monitor)
95
- ensure_monitor_defaults!(monitor)
96
- end
97
-
98
- request(
99
- :body => generate_internet_service_request(service_data),
100
- :expects => 200,
101
- :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
102
- :method => 'POST',
103
- :uri => internet_services_uri,
104
- :parse => true
105
- )
106
- end
107
-
108
112
  end
109
113
 
110
114
  class Mock
115
+ include Shared
116
+
111
117
  #
112
118
  # Based on
113
119
  # http://support.theenterprisecloud.com/kb/default.asp?id=561&Lang=1&SID=