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
@@ -2,21 +2,7 @@ module Fog
2
2
  class Vcloud
3
3
  module Terremark
4
4
  class Ecloud
5
- class Real
6
-
7
- def add_node(nodes_uri, node_data)
8
- validate_node_data(node_data)
9
-
10
- request(
11
- :body => generate_node_request(node_data),
12
- :expects => 200,
13
- :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml'},
14
- :method => 'POST',
15
- :uri => nodes_uri,
16
- :parse => true
17
- )
18
- end
19
-
5
+ module Shared
20
6
  private
21
7
 
22
8
  def generate_node_request(node_data)
@@ -43,7 +29,25 @@ module Fog
43
29
  end
44
30
  end
45
31
 
32
+ class Real
33
+ include Shared
34
+
35
+ def add_node(nodes_uri, node_data)
36
+ validate_node_data(node_data)
37
+
38
+ request(
39
+ :body => generate_node_request(node_data),
40
+ :expects => 200,
41
+ :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml'},
42
+ :method => 'POST',
43
+ :uri => nodes_uri,
44
+ :parse => true
45
+ )
46
+ end
47
+ end
48
+
46
49
  class Mock
50
+ include Shared
47
51
 
48
52
  def add_node(nodes_uri, node_data)
49
53
  validate_node_data(node_data)
@@ -2,7 +2,8 @@ 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
8
  def generate_internet_service_response(service_data,ip_address_data)
8
9
  builder = Builder::XmlMarkup.new
@@ -34,6 +35,10 @@ module Fog
34
35
  raise ArgumentError.new("Required Internet Service data missing: #{(valid_opts - ip_address_data.keys).map(&:inspect).join(", ")}")
35
36
  end
36
37
  end
38
+ end
39
+
40
+ class Real
41
+ include Shared
37
42
 
38
43
  def configure_internet_service(internet_service_uri, service_data, ip_address_data)
39
44
  validate_internet_service_data(service_data, true)
@@ -58,6 +63,8 @@ module Fog
58
63
  end
59
64
 
60
65
  class Mock
66
+ include Shared
67
+
61
68
  #
62
69
  # Based on
63
70
  # http://support.theenterprisecloud.com/kb/default.asp?id=583&Lang=1&SID=
@@ -2,7 +2,23 @@ module Fog
2
2
  class Vcloud
3
3
  module Terremark
4
4
  class Ecloud
5
+ module Shared
6
+ private
7
+
8
+ def generate_configure_node_request(node_data)
9
+ builder = Builder::XmlMarkup.new
10
+ builder.NodeService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
11
+ :xmlns => "urn:tmrk:eCloudExtensions-2.0") {
12
+ builder.Name(node_data[:name])
13
+ builder.Enabled(node_data[:enabled].to_s)
14
+ builder.Description(node_data[:description])
15
+ }
16
+ end
17
+
18
+ end
19
+
5
20
  class Real
21
+ include Shared
6
22
 
7
23
  def configure_node(node_uri, node_data)
8
24
  validate_node_data(node_data, true)
@@ -17,21 +33,10 @@ module Fog
17
33
  )
18
34
  end
19
35
 
20
- private
21
-
22
- def generate_configure_node_request(node_data)
23
- builder = Builder::XmlMarkup.new
24
- builder.NodeService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
25
- :xmlns => "urn:tmrk:eCloudExtensions-2.0") {
26
- builder.Name(node_data[:name])
27
- builder.Enabled(node_data[:enabled].to_s)
28
- builder.Description(node_data[:description])
29
- }
30
- end
31
-
32
36
  end
33
37
 
34
38
  class Mock
39
+ include Shared
35
40
 
36
41
  def configure_node(node_uri, node_data)
37
42
  node_uri = ensure_unparsed(node_uri)
@@ -9,7 +9,35 @@ module Fog
9
9
 
10
10
  class Mock
11
11
  def get_catalog(catalog_uri)
12
- Fog::Mock.not_implemented
12
+ catalog_uri = ensure_unparsed(catalog_uri)
13
+ xml = nil
14
+
15
+ if vdc = vdc_from_uri(catalog_uri)
16
+ builder = Builder::XmlMarkup.new
17
+
18
+ xml = builder.Catalog(xmlns.merge(
19
+ :type => "application/vnd.vmware.vcloud.catalog+xml",
20
+ :href => catalog_uri,
21
+ :name => vdc[:catalog][:name]
22
+ )) do |xml|
23
+ xml.CatalogItems do |xml|
24
+ vdc[:catalog][:items].each do |catalog_item|
25
+ xml.CatalogItem(
26
+ :type => "application/vnd.vmware.vcloud.catalogItem+xml",
27
+ :href => "#{self.class.base_url}/catalogItem/#{catalog_item[:id]}-#{vdc[:id]}",
28
+ :name => catalog_item[:name]
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ if xml
36
+ mock_it 200,
37
+ xml, { 'Content-Type' => 'application/vnd.vmware.vcloud.catalog+xml' }
38
+ else
39
+ mock_error 200, "401 Unauthorized"
40
+ end
13
41
  end
14
42
  end
15
43
  end
@@ -8,8 +8,44 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
- def get_catalog(catalog_uri)
12
- Fog::Mock.not_implemented
11
+
12
+ #
13
+ # Based on
14
+ # http://support.theenterprisecloud.com/kb/default.asp?id=542&Lang=1&SID=
15
+ #
16
+
17
+ def get_catalog_item(catalog_item_uri)
18
+ catalog_item_id, vdc_id = catalog_item_uri.split("/").last.split("-")
19
+ xml = nil
20
+
21
+ if vdc = vdc_from_id(vdc_id)
22
+ if catalog_item = vdc[:catalog][:items].detect {|ci| ci[:id] == catalog_item_id }
23
+ builder = Builder::XmlMarkup.new
24
+
25
+ xml = builder.CatalogItem(xmlns.merge(:href => catalog_item_uri, :name => catalog_item[:name])) do
26
+ builder.Link(
27
+ :rel => "down",
28
+ :href => Fog::Vcloud::Terremark::Ecloud::Mock.catalog_item_customization_href(:id => catalog_item_id),
29
+ :type => "application/vnd.tmrk.ecloud.catalogItemCustomizationParameters+xml",
30
+ :name => "Customization Options"
31
+ )
32
+
33
+ builder.Entity(
34
+ :href => Fog::Vcloud::Terremark::Ecloud::Mock.vapp_template_href(:id => catalog_item_id),
35
+ :type => "application/vnd.vmware.vcloud.vAppTemplate+xml",
36
+ :name => catalog_item[:name]
37
+ )
38
+
39
+ builder.Property(0, :key => "LicensingCost")
40
+ end
41
+ end
42
+ end
43
+
44
+ if xml
45
+ mock_it 200, xml, {'Content-Type' => 'application/vnd.vmware.vcloud.catalogItem+xml'}
46
+ else
47
+ mock_error 200, "401 Unauthorized"
48
+ end
13
49
  end
14
50
  end
15
51
  end
@@ -8,8 +8,14 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
- def get_customization_options( options_uri )
12
- Fog::Mock.not_implemented
11
+ def get_customization_options(options_uri)
12
+ builder = Builder::XmlMarkup.new
13
+ xml = builder.CustomizationParameters(xmlns) do
14
+ builder.CustomizeNetwork "true"
15
+ builder.CustomizePassword "false"
16
+ end
17
+
18
+ mock_it 200, xml, "Content-Type" => "application/vnd.tmrk.ecloud.catalogItemCustomizationParameters+xml"
13
19
  end
14
20
  end
15
21
  end
@@ -2,8 +2,8 @@ module Fog
2
2
  class Vcloud
3
3
  module Terremark
4
4
  class Ecloud
5
-
6
- class Real
5
+ module Shared
6
+ private
7
7
 
8
8
  def validate_instantiate_vapp_template_options(catalog_item_uri, options)
9
9
  valid_opts = [:name, :vdc_uri, :network_uri, :cpus, :memory, :row, :group]
@@ -74,6 +74,10 @@ module Fog
74
74
  }
75
75
  }
76
76
  end
77
+ end
78
+
79
+ class Real
80
+ include Shared
77
81
 
78
82
  def instantiate_vapp_template(catalog_item_uri, options = {})
79
83
  validate_instantiate_vapp_template_options(catalog_item_uri, options)
@@ -90,8 +94,46 @@ module Fog
90
94
  end
91
95
 
92
96
  class Mock
93
- def instantiate_vapp_template(vdc_uri)
94
- Fog::Mock.not_implemented
97
+ include Shared
98
+
99
+ #
100
+ # Based on
101
+ # http://support.theenterprisecloud.com/kb/default.asp?id=554&Lang=1&SID=
102
+ #
103
+
104
+ def instantiate_vapp_template(catalog_item_uri, options = {})
105
+ validate_instantiate_vapp_template_options(catalog_item_uri, options)
106
+
107
+ xml = nil
108
+ if vdc = vdc_from_uri(options[:vdc_uri])
109
+ id = rand(1000)
110
+ vapp_uri = Fog::Vcloud::Terremark::Ecloud::Mock.vapp_href(:id => id)
111
+ options.update(:id => id.to_s, :href => vapp_uri)
112
+ vdc[:vms] << options
113
+
114
+ xml = generate_instantiate_vapp_template_response(vdc[:href], options[:name], vapp_uri)
115
+ end
116
+
117
+ if xml
118
+ mock_it 200, xml, {'Content-Type' => 'application/xml'}
119
+ else
120
+ mock_error 200, "401 Unauthorized"
121
+ end
122
+ end
123
+
124
+ private
125
+
126
+ def generate_instantiate_vapp_template_response(vdc_uri, vapp_name, vapp_uri)
127
+ builder = Builder::XmlMarkup.new
128
+ builder.VApp(xmlns.merge(
129
+ :href => vapp_uri,
130
+ :type => "application/vnd.vmware.vcloud.vApp+xml",
131
+ :name => vapp_name,
132
+ :status => 0,
133
+ :size => 4
134
+ )) {
135
+ builder.Link(:rel => "up", :href => vdc_uri, :type => "application/vnd.vmware.vcloud.vdc+xml")
136
+ }
95
137
  end
96
138
  end
97
139
  end
@@ -23,6 +23,7 @@ describe 'Fog::AWS::Compute::Server' do
23
23
  it "should remap attributes from parser" do
24
24
  server = @servers.new({
25
25
  'amiLaunchIndex' => 'ami_launch_index',
26
+ 'clientToken' => 'client_token',
26
27
  'dnsName' => 'dns_name',
27
28
  'imageId' => 'image_id',
28
29
  'instanceId' => 'instance_id',
@@ -35,6 +36,7 @@ describe 'Fog::AWS::Compute::Server' do
35
36
  'ramdiskId' => 'ramdisk_id'
36
37
  })
37
38
  server.ami_launch_index.should == 'ami_launch_index'
39
+ server.client_token.should == 'client_token'
38
40
  server.dns_name.should == 'dns_name'
39
41
  server.image_id.should == 'image_id'
40
42
  server.id.should == 'instance_id'
@@ -13,6 +13,7 @@ describe 'SimpleDB.select' do
13
13
  end
14
14
 
15
15
  it 'should return multi-value attributes when present' do
16
+ pending if Fog.mocking?
16
17
  @item = "someitem_fog_domain_#{Time.now.to_i}"
17
18
  AWS[:sdb].put_attributes(@domain_name, @item, { "attr" => "foo" })
18
19
  AWS[:sdb].put_attributes(@domain_name, @item, { "attr" => "foo2" })
@@ -2,7 +2,7 @@ require 'spec'
2
2
  require 'open-uri'
3
3
  require 'fog'
4
4
  Fog.bin = true
5
- require 'fog/bin'
5
+ require 'fog/core/bin'
6
6
  require 'fog/vcloud/bin'
7
7
 
8
8
  if ENV["FOG_MOCK"] == "true"
@@ -21,7 +21,7 @@ srand 1234
21
21
 
22
22
  current_directory = File.dirname(__FILE__)
23
23
  require "#{current_directory}/../../lib/fog"
24
- require "#{current_directory}/../../lib/fog/bin"
24
+ require "#{current_directory}/../../lib/fog/core/bin"
25
25
 
26
26
  Fog.mock! if ENV['FOG_MOCK']
27
27
 
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
+ subject { @vcloud }
6
+
7
+ it { should respond_to :get_catalog_item }
8
+
9
+ describe "#get_catalog_item" do
10
+ context "with a valid catalog_item_uri" do
11
+ before { @catalog_item = @vcloud.get_catalog_item(@vcloud.vdcs.first.catalog.first.href) }
12
+ subject { @catalog_item }
13
+ let(:catalog_item_id) { @catalog_item.body[:href].split("/").last.split("-").first }
14
+
15
+ it_should_behave_like "all responses"
16
+ it { should have_headers_denoting_a_content_type_of "application/vnd.vmware.vcloud.catalogItem+xml" }
17
+
18
+ describe "#body" do
19
+ subject { @catalog_item.body }
20
+
21
+ it { should have(8).items }
22
+
23
+ it_should_behave_like "it has the standard vcloud v0.8 xmlns attributes" # 3 keys
24
+
25
+ its(:name) { should == "Item 0" }
26
+
27
+ it { should include :Entity }
28
+ it { should include :Link }
29
+ it { should include :Property }
30
+
31
+ describe "Entity" do
32
+ subject { @catalog_item.body[:Entity] }
33
+
34
+ it { should have(3).items }
35
+
36
+ its(:name) { should == "Item 0" }
37
+ its(:type) { should == "application/vnd.vmware.vcloud.vAppTemplate+xml" }
38
+ its(:href) { should == Fog::Vcloud::Terremark::Ecloud::Mock.vapp_template_href(:id => catalog_item_id) }
39
+ end
40
+
41
+ describe "Link" do
42
+ subject { @catalog_item.body[:Link] }
43
+
44
+ it { should have(4).items }
45
+
46
+ its(:rel) { should == "down" }
47
+ its(:href) { should == Fog::Vcloud::Terremark::Ecloud::Mock.catalog_item_customization_href(:id => catalog_item_id) }
48
+ its(:name) { should == "Customization Options" }
49
+ its(:type) { should == "application/vnd.tmrk.ecloud.catalogItemCustomizationParameters+xml" }
50
+ end
51
+ end
52
+ end
53
+
54
+ context "with a catalog uri that doesn't exist" do
55
+ subject { lambda { @vcloud.get_catalog(URI.parse('https://www.fakey.com/api/v0.8/vdc/999/catalog')) } }
56
+
57
+ it_should_behave_like "a request for a resource that doesn't exist"
58
+ end
59
+ end
60
+ end
61
+ else
62
+ end
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
2
+
3
+ if Fog.mocking?
4
+ describe "Fog::Vcloud, initialized w/ the TMRK Ecloud module", :type => :mock_tmrk_ecloud_request do
5
+ subject { @vcloud }
6
+
7
+ it { should respond_to :get_catalog }
8
+
9
+ describe "#get_catalog" do
10
+ context "with a valid vdc catalog_uri" do
11
+ before { @catalog = @vcloud.get_catalog(@mock_vdc[:href] + "/catalog") }
12
+ subject { @catalog }
13
+
14
+ it_should_behave_like "all responses"
15
+ it { should have_headers_denoting_a_content_type_of "application/vnd.vmware.vcloud.catalog+xml" }
16
+
17
+ describe "#body" do
18
+ subject { @catalog.body }
19
+
20
+ it { should have(7).items }
21
+
22
+ it_should_behave_like "it has the standard vcloud v0.8 xmlns attributes" # 3 keys
23
+
24
+ its(:name) { should == "The catalog" }
25
+
26
+ it { should include :CatalogItems }
27
+
28
+ describe "CatalogItems" do
29
+ subject { @catalog.body[:CatalogItems] }
30
+
31
+ it { should have(1).items }
32
+ end
33
+ end
34
+ end
35
+
36
+ context "with a catalog uri that doesn't exist" do
37
+ subject { lambda { @vcloud.get_catalog(URI.parse('https://www.fakey.com/api/v0.8/vdc/999/catalog')) } }
38
+
39
+ it_should_behave_like "a request for a resource that doesn't exist"
40
+ end
41
+ end
42
+ end
43
+ else
44
+ end