fog 0.3.16 → 0.3.17

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 (112) hide show
  1. data/Gemfile.lock +1 -1
  2. data/README.rdoc +17 -12
  3. data/fog.gemspec +10 -5
  4. data/lib/fog.rb +1 -1
  5. data/lib/fog/aws/models/storage/directory.rb +22 -0
  6. data/lib/fog/aws/models/storage/file.rb +15 -0
  7. data/lib/fog/aws/storage.rb +8 -0
  8. data/lib/fog/core/collection.rb +9 -8
  9. data/lib/fog/core/compute.rb +1 -1
  10. data/lib/fog/google/models/storage/directory.rb +23 -1
  11. data/lib/fog/google/models/storage/file.rb +16 -1
  12. data/lib/fog/google/parsers/storage/access_control_list.rb +16 -14
  13. data/lib/fog/local/models/storage/directory.rb +8 -0
  14. data/lib/fog/local/models/storage/file.rb +4 -0
  15. data/lib/fog/rackspace/cdn.rb +3 -3
  16. data/lib/fog/rackspace/models/storage/directory.rb +18 -0
  17. data/lib/fog/rackspace/models/storage/file.rb +7 -0
  18. data/lib/fog/rackspace/requests/cdn/{get_cdn_containers.rb → get_containers.rb} +3 -3
  19. data/lib/fog/rackspace/requests/cdn/{head_cdn_container.rb → head_container.rb} +3 -3
  20. data/lib/fog/rackspace/requests/cdn/{put_cdn_container.rb → put_container.rb} +3 -3
  21. data/lib/fog/rackspace/storage.rb +10 -0
  22. data/lib/fog/vcloud.rb +32 -153
  23. data/lib/fog/vcloud/collection.rb +18 -0
  24. data/lib/fog/vcloud/mock_data_classes.rb +701 -0
  25. data/lib/fog/vcloud/requests/get_network.rb +8 -8
  26. data/lib/fog/vcloud/requests/get_organization.rb +10 -10
  27. data/lib/fog/vcloud/requests/get_vdc.rb +18 -18
  28. data/lib/fog/vcloud/requests/get_versions.rb +3 -3
  29. data/lib/fog/vcloud/requests/login.rb +2 -2
  30. data/lib/fog/vcloud/terremark/ecloud.rb +65 -109
  31. data/lib/fog/vcloud/terremark/ecloud/models/catalog.rb +1 -0
  32. data/lib/fog/vcloud/terremark/ecloud/models/firewall_acls.rb +1 -0
  33. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +1 -0
  34. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +1 -1
  35. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +1 -0
  36. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +3 -2
  37. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +1 -0
  38. data/lib/fog/vcloud/terremark/ecloud/models/nodes.rb +1 -0
  39. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -0
  40. data/lib/fog/vcloud/terremark/ecloud/models/server.rb +20 -8
  41. data/lib/fog/vcloud/terremark/ecloud/models/servers.rb +1 -0
  42. data/lib/fog/vcloud/terremark/ecloud/models/tasks.rb +1 -0
  43. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +2 -0
  44. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +4 -8
  45. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +4 -7
  46. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +18 -20
  47. data/lib/fog/vcloud/terremark/ecloud/requests/configure_node.rb +6 -7
  48. data/lib/fog/vcloud/terremark/ecloud/requests/configure_vapp.rb +40 -9
  49. data/lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb +2 -10
  50. data/lib/fog/vcloud/terremark/ecloud/requests/delete_node.rb +2 -6
  51. data/lib/fog/vcloud/terremark/ecloud/requests/delete_vapp.rb +13 -1
  52. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog.rb +6 -6
  53. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog_item.rb +6 -7
  54. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +34 -33
  55. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +23 -24
  56. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_extensions.rb +10 -13
  57. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ip.rb +15 -19
  58. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +20 -22
  59. data/lib/fog/vcloud/terremark/ecloud/requests/get_node.rb +12 -15
  60. data/lib/fog/vcloud/terremark/ecloud/requests/get_nodes.rb +11 -12
  61. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb +5 -4
  62. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb +9 -8
  63. data/lib/fog/vcloud/terremark/ecloud/requests/get_vapp.rb +33 -17
  64. data/lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb +54 -53
  65. data/lib/fog/vcloud/terremark/ecloud/requests/instantiate_vapp_template.rb +13 -19
  66. data/lib/fog/vcloud/terremark/ecloud/requests/power_off.rb +9 -2
  67. data/lib/fog/vcloud/terremark/ecloud/requests/power_on.rb +2 -4
  68. data/spec/vcloud/bin_spec.rb +3 -6
  69. data/spec/vcloud/models/vdc_spec.rb +8 -8
  70. data/spec/vcloud/requests/get_network_spec.rb +8 -8
  71. data/spec/vcloud/requests/get_organization_spec.rb +9 -9
  72. data/spec/vcloud/requests/get_vdc_spec.rb +7 -7
  73. data/spec/vcloud/requests/get_versions_spec.rb +1 -1
  74. data/spec/vcloud/requests/login_spec.rb +2 -2
  75. data/spec/vcloud/spec_helper.rb +45 -30
  76. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +10 -14
  77. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +5 -8
  78. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +2 -2
  79. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +15 -16
  80. data/spec/vcloud/terremark/ecloud/models/node_spec.rb +7 -7
  81. data/spec/vcloud/terremark/ecloud/models/nodes_spec.rb +1 -1
  82. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +4 -8
  83. data/spec/vcloud/terremark/ecloud/models/server_spec.rb +42 -0
  84. data/spec/vcloud/terremark/ecloud/models/vdc_spec.rb +7 -7
  85. data/spec/vcloud/terremark/ecloud/models/vdcs_spec.rb +1 -1
  86. data/spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb +13 -18
  87. data/spec/vcloud/terremark/ecloud/requests/add_node_spec.rb +9 -5
  88. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +5 -7
  89. data/spec/vcloud/terremark/ecloud/requests/configure_node_spec.rb +22 -28
  90. data/spec/vcloud/terremark/ecloud/requests/configure_vapp_spec.rb +71 -0
  91. data/spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb +7 -9
  92. data/spec/vcloud/terremark/ecloud/requests/delete_node_spec.rb +3 -7
  93. data/spec/vcloud/terremark/ecloud/requests/delete_vapp_spec.rb +83 -0
  94. data/spec/vcloud/terremark/ecloud/requests/get_catalog_item_spec.rb +6 -5
  95. data/spec/vcloud/terremark/ecloud/requests/get_catalog_spec.rb +2 -2
  96. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +31 -42
  97. data/spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb +4 -7
  98. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +1 -1
  99. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +19 -11
  100. data/spec/vcloud/terremark/ecloud/requests/get_node_spec.rb +8 -8
  101. data/spec/vcloud/terremark/ecloud/requests/get_nodes_spec.rb +11 -11
  102. data/spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb +4 -5
  103. data/spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb +6 -6
  104. data/spec/vcloud/terremark/ecloud/requests/get_vapp_spec.rb +36 -19
  105. data/spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb +21 -18
  106. data/spec/vcloud/terremark/ecloud/requests/instantiate_vapp_template_spec.rb +27 -17
  107. data/spec/vcloud/terremark/ecloud/requests/power_off_spec.rb +34 -0
  108. data/spec/vcloud/terremark/ecloud/requests/power_on_spec.rb +3 -4
  109. data/spec/vcloud/vcloud_spec.rb +2 -2
  110. data/tests/helpers/storage/directory_tests.rb +8 -0
  111. data/tests/helpers/storage/file_tests.rb +4 -0
  112. metadata +11 -6
@@ -8,34 +8,33 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
+ #
12
+ # Based off of:
13
+ # http://support.theenterprisecloud.com/kb/default.asp?id=546&Lang=1&SID=
14
+ #
11
15
 
12
16
  def get_network(network_uri)
13
- #
14
- # Based off of:
15
- # http://support.theenterprisecloud.com/kb/default.asp?id=546&Lang=1&SID=
16
- #
17
17
  network_uri = ensure_unparsed(network_uri)
18
- type = "application/vnd.vmware.vcloud.network+xml"
19
- response = Excon::Response.new
20
- if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_uri }
21
- xml = Builder::XmlMarkup.new
22
- mock_it 200,
23
- xml.Network(xmlns.merge(:href => network[:href], :name => network[:name], :type => type)) {
24
- xml.Link( :rel => "down", :href => network[:href] + "/ips", :type => "application/xml", :name => "IP Addresses" )
25
- xml.Link( :rel => "down", :href => network[:extension_href], :type => "application/xml", :name => network[:name] )
26
- xml.Configuration {
27
- xml.Gateway(network[:gateway])
28
- xml.Netmask(network[:netmask])
18
+
19
+ if network = mock_data.network_from_href(network_uri)
20
+ builder = Builder::XmlMarkup.new
21
+ xml = builder.Network(xmlns.merge(:href => network.href, :name => network.name, :type => "application/vnd.vmware.vcloud.network+xml")) {
22
+ builder.Link(:rel => "down", :href => network.ip_collection.href, :type => "application/xml", :name => network.ip_collection.name)
23
+ builder.Link(:rel => "down", :href => network.extensions.href, :type => "application/xml", :name => network.name)
24
+ builder.Configuration {
25
+ builder.Gateway(network.gateway)
26
+ builder.Netmask(network.netmask)
27
+ }
28
+ if network.features
29
+ builder.Features {
30
+ network.features.each do |feature|
31
+ builder.tag!(feature[:type], feature[:value])
32
+ end
29
33
  }
30
- if network[:features]
31
- xml.Features {
32
- network[:features].each do |feature|
33
- eval "xml.#{feature[:type].to_sym}('#{feature[:value]}')"
34
- end
35
- }
36
- end
37
- },
38
- { 'Content-Type' => type }
34
+ end
35
+ }
36
+
37
+ mock_it 200, xml, { "Content-Type" => "application/vnd.vmware.vcloud.network+xml" }
39
38
  else
40
39
  mock_error 200, "401 Unauthorized"
41
40
  end
@@ -9,22 +9,19 @@ module Fog
9
9
 
10
10
  class Mock
11
11
 
12
- def get_network_extensions(network_uri)
13
- network_uri = ensure_unparsed(network_uri)
14
- type = "application/vnd.vmware.vcloud.network+xml"
15
- response = Excon::Response.new
16
- if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:extension_href] == network_uri }
12
+ def get_network_extensions(network_extension_uri)
13
+ if network_extension = mock_data.network_extension_from_href(ensure_unparsed(network_extension_uri))
17
14
  xml = Builder::XmlMarkup.new
18
15
  mock_it 200,
19
16
  xml.Network(:xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
20
- xml.Address(network[:name].split("/")[0])
21
- xml.RnatAddress(network[:rnat])
22
- xml.Href(network[:extension_href])
23
- xml.Id(network[:id])
24
- xml.Name(network[:name])
25
- xml.GatewayAddress(network[:gateway])
26
- xml.BroadcastAddress(IPAddr.new(network[:subnet]).to_range.last.to_s)
27
- }, { 'Content-Type' => type }
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" }
28
25
  else
29
26
  mock_error 200, "401 Unauthorized"
30
27
  end
@@ -13,25 +13,21 @@ module Fog
13
13
 
14
14
  class Mock
15
15
 
16
- def get_network_ip(ip_uri)
17
- response = Excon::Response.new
18
- ip_id = ip_uri.split("/").last
19
- if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| IPAddr.new(network[:subnet]).to_range.map { |ip| ip.to_s.gsub('.','') }.include?(ip_id) }
20
- ip = IPAddr.new(network[:subnet]).to_range.detect { |ip| ip.to_s.gsub('.','') == ip_id }
21
- xml = Builder::XmlMarkup.new
22
- mock_it 200,
23
- xml.IpAddress(ecloud_xmlns) {
24
- xml.Id( ip_id )
25
- xml.Href( ip_uri.to_s )
26
- xml.Name( ip.to_s )
27
- if network[:ips].has_key?(ip.to_s)
28
- xml.Status( "Assigned" )
29
- xml.Server( network[:ips][ip.to_s] )
30
- else
31
- xml.Status( "Available" )
32
- end
33
- },
34
- { 'Content-Type' => 'application/vnd.tmrk.ecloud.ip+xml' }
16
+ def get_network_ip(network_ip_uri)
17
+ if network_ip = mock_data.network_ip_from_href(network_ip_uri)
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
29
+
30
+ mock_it 200, xml, { 'Content-Type' => 'application/vnd.tmrk.ecloud.ip+xml' }
35
31
  else
36
32
  mock_error 200, "401 Unauthorized"
37
33
  end
@@ -12,35 +12,33 @@ module Fog
12
12
  end
13
13
 
14
14
  class Mock
15
- require 'ipaddr'
16
15
 
17
16
  def get_network_ips(network_ips_uri)
18
17
  network_ips_uri = ensure_unparsed(network_ips_uri)
19
- response = Excon::Response.new
20
- if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_ips_uri.gsub(%r:/ips$:,'') }
21
- xml = Builder::XmlMarkup.new
22
- mock_it 200,
23
- xml.IpAddresses {
24
- IPAddr.new(network[:name]).to_range.to_a[3..-2].each do |ip|
25
- xml.IpAddress {
26
- xml.Name(ip.to_s)
27
- xml.Href("#{Fog::Vcloud::Terremark::Ecloud::Mock.extension_url}/ip/#{ip.to_s.gsub('.','')}")
28
- if network[:ips].has_key?(ip.to_s)
29
- xml.Status("Assigned")
30
- xml.Server(network[:ips][ip.to_s])
31
- else
32
- xml.Status("Available")
33
- end
34
- xml.RnatAddress(network[:rnat])
35
- }
18
+
19
+ if network_ip_collection = mock_data.network_ip_collection_from_href(network_ips_uri)
20
+ builder = Builder::XmlMarkup.new
21
+ xml = builder.IpAddresses do
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)
36
34
  end
37
- },
38
- { 'Content-Type' => 'application/vnd.tmrk.ecloud.ipAddressesList+xml' }
35
+ end
36
+ end
37
+
38
+ mock_it 200, xml, { 'Content-Type' => 'application/vnd.tmrk.ecloud.ipAddressesList+xml' }
39
39
  else
40
40
  mock_error 200, "401 Unauthorized"
41
41
  end
42
-
43
-
44
42
  end
45
43
 
46
44
  end
@@ -8,32 +8,29 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
-
12
11
  #
13
12
  # Based on http://support.theenterprisecloud.com/kb/default.asp?id=641&Lang=1&SID=
14
13
  #
15
- #
16
- #
17
- def mock_node_service_response(node, xmlns)
14
+
15
+ def mock_node_service_response(node)
18
16
  xml = Builder::XmlMarkup.new
19
- xml.NodeService(xmlns) {
20
- xml.Id(node[:id])
21
- xml.Href(node[:href])
22
- xml.Name(node[:name])
23
- xml.IpAddress(node[:ip_address])
24
- xml.Port(node[:port])
25
- xml.Enabled(node[:enabled])
26
- xml.Description(node[:description])
17
+ xml.NodeService(ecloud_xmlns) {
18
+ xml.Id(node.object_id)
19
+ xml.Href(node.href)
20
+ xml.Name(node.name)
21
+ xml.IpAddress(node.ip_address)
22
+ xml.Port(node.port)
23
+ xml.Enabled(node.enabled)
24
+ xml.Description(node.description)
27
25
  }
28
26
  end
29
27
 
30
28
  def get_node(node_uri)
31
-
32
29
  node_uri = ensure_unparsed(node_uri)
33
30
 
34
- if node = mock_node_from_url(node_uri)
31
+ if public_ip_internet_service_node = mock_data.public_ip_internet_service_node_from_href(node_uri)
35
32
  xml = Builder::XmlMarkup.new
36
- mock_it 200, mock_node_service_response(node, ecloud_xmlns), { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
33
+ mock_it 200, mock_node_service_response(public_ip_internet_service_node), { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
37
34
  else
38
35
  mock_error 200, "401 Unauthorized"
39
36
  end
@@ -8,28 +8,27 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
-
12
11
  #
13
12
  # Based off of:
14
13
  # http://support.theenterprisecloud.com/kb/default.asp?id=637&Lang=1&SID=
15
14
  #
15
+
16
16
  def get_nodes(nodes_uri)
17
17
  nodes_uri = ensure_unparsed(nodes_uri)
18
- service_uri = nodes_uri.gsub('/nodeServices','')
19
- ip, service = mock_ip_and_service_from_service_url(service_uri)
20
- if ip and service
18
+
19
+ if public_ip_internet_service_node_collection = mock_data.public_ip_internet_service_node_collection_from_href(nodes_uri)
21
20
  xml = Builder::XmlMarkup.new
22
21
  mock_it 200,
23
22
  xml.NodeServices(ecloud_xmlns) {
24
- service[:nodes].each do |node|
23
+ public_ip_internet_service_node_collection.items.each do |node|
25
24
  xml.NodeService {
26
- xml.Id(node[:id])
27
- xml.Href(node[:href])
28
- xml.Name(node[:name])
29
- xml.IpAddress(node[:ip_address])
30
- xml.Port(node[:port])
31
- xml.Enabled(node[:enabled])
32
- xml.Description(node[:description])
25
+ xml.Id node.object_id
26
+ xml.Href node.href
27
+ xml.Name node.name
28
+ xml.IpAddress node.ip_address
29
+ xml.Port node.port
30
+ xml.Enabled node.enabled
31
+ xml.Description node.description
33
32
  }
34
33
  end
35
34
  }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml' }
@@ -15,13 +15,14 @@ module Fog
15
15
 
16
16
  def get_public_ip(public_ip_uri)
17
17
  public_ip_uri = ensure_unparsed(public_ip_uri)
18
- if ip = mock_data[:organizations].map { |org| org[:vdcs] }.flatten.map { |vdc| vdc[:public_ips] }.flatten.detect { |ip| ip[:href] == public_ip_uri }
18
+
19
+ if public_ip = mock_data.public_ip_from_href(public_ip_uri)
19
20
  xml = Builder::XmlMarkup.new
20
21
  mock_it 200,
21
22
  xml.PublicIp(:xmlns => "urn:tmrk:eCloudExtensions-2.0", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
22
- xml.Id(ip[:id])
23
- xml.Href(ip[:href])
24
- xml.Name(ip[:name])
23
+ xml.Id public_ip.object_id
24
+ xml.Href public_ip.href
25
+ xml.Name public_ip.name
25
26
  }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.publicIp+xml' }
26
27
  else
27
28
  mock_error 200, "401 Unauthorized"
@@ -8,22 +8,23 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
-
12
11
  #
13
- #Based off of:
14
- #http://support.theenterprisecloud.com/kb/default.asp?id=577&Lang=1&SID=
12
+ # Based off of:
13
+ # http://support.theenterprisecloud.com/kb/default.asp?id=577&Lang=1&SID=
15
14
  #
15
+
16
16
  def get_public_ips(public_ips_uri)
17
17
  public_ips_uri = ensure_unparsed(public_ips_uri)
18
- if vdc = mock_data[:organizations].map { |org| org[:vdcs] }.flatten.detect { |vdc| vdc[:href].split('/').last == public_ips_uri.split('/')[-2] }
18
+
19
+ if public_ip_collection = mock_data.public_ip_collection_from_href(public_ips_uri)
19
20
  xml = Builder::XmlMarkup.new
20
21
  mock_it 200,
21
22
  xml.PublicIPAddresses {
22
- vdc[:public_ips].each do |ip|
23
+ public_ip_collection.items.each do |ip|
23
24
  xml.PublicIPAddress {
24
- xml.Id(ip[:id])
25
- xml.Href(ip[:href])
26
- xml.Name(ip[:name])
25
+ xml.Id ip.object_id
26
+ xml.Href ip.href
27
+ xml.Name ip.name
27
28
  }
28
29
  end
29
30
  }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.publicIpsList+xml'}
@@ -8,11 +8,23 @@ module Fog
8
8
  end
9
9
 
10
10
  class Mock
11
+ def return_vapp_as_creating!(name)
12
+ vapps_to_return_as_creating[name] = true
13
+ end
14
+
15
+ def vapps_to_return_as_creating
16
+ @vapps_to_return_as_creating ||= {}
17
+ end
18
+
11
19
  def get_vapp(vapp_uri)
12
20
  xml = nil
13
21
 
14
- if vapp_and_vdc = vapp_and_vdc_from_vapp_uri(vapp_uri)
15
- xml = generate_get_vapp_response(*vapp_and_vdc)
22
+ if vapp = mock_data.virtual_machine_from_href(vapp_uri)
23
+ if vapps_to_return_as_creating[vapp.name]
24
+ xml = generate_instantiate_vapp_template_response(vapp)
25
+ else
26
+ xml = generate_get_vapp_response(vapp)
27
+ end
16
28
  end
17
29
 
18
30
  if xml
@@ -24,19 +36,20 @@ module Fog
24
36
 
25
37
  private
26
38
 
27
- def generate_get_vapp_response(vapp, vdc)
39
+ def generate_get_vapp_response(vapp)
28
40
  builder = Builder::XmlMarkup.new
29
41
  builder.VApp(xmlns.merge(
30
- :href => vapp[:href],
42
+ :href => vapp.href,
31
43
  :type => "application/vnd.vmware.vcloud.vApp+xml",
32
- :name => vapp[:name],
33
- :status => vapp[:status] || 4
44
+ :name => vapp.name,
45
+ :status => vapp.status,
46
+ :size => vapp.size
34
47
  )) do
35
- builder.Link(:rel => "up", :href => vdc[:href], :type => "application/vnd.vmware.vcloud.vdc+xml")
48
+ builder.Link(:rel => "up", :href => vapp._parent.href, :type => "application/vnd.vmware.vcloud.vdc+xml")
36
49
 
37
50
  builder.NetworkConnectionSection(:xmlns => "http://schemas.dmtf.org/ovf/envelope/1") do
38
51
  builder.NetworkConnection(:Network => "Internal", :xmlns => "http://www.vmware.com/vcloud/v0.8") do
39
- builder.IpAddress vapp[:ip]
52
+ builder.IpAddress vapp.ip
40
53
  end
41
54
  end
42
55
 
@@ -53,12 +66,12 @@ module Fog
53
66
  builder.System
54
67
  builder.Item do
55
68
  # CPUs
56
- builder.VirtualQuantity vapp[:cpus] || 1
69
+ builder.VirtualQuantity vapp.cpus
57
70
  builder.ResourceType 3
58
71
  end
59
72
  builder.Item do
60
73
  # memory
61
- builder.VirtualQuantity vapp[:memory] || 1024
74
+ builder.VirtualQuantity vapp.memory
62
75
  builder.ResourceType 4
63
76
  end
64
77
  builder.Item do
@@ -67,13 +80,16 @@ module Fog
67
80
  builder.ResourceType 6
68
81
  builder.InstanceId 3
69
82
  end
70
- builder.Item do
71
- # Hard Disk 1
72
- builder.Parent 3
73
- builder.VirtualQuantity vapp[:disks].first[:size] * 1024 # MB
74
- builder.HostResource vapp[:disks].first[:size] * 1024 # MB
75
- builder.ResourceType 17
76
- builder.AddressOnParent 0
83
+
84
+ # Hard Disks
85
+ vapp.disks.each do |disk|
86
+ builder.Item do
87
+ builder.Parent 3
88
+ builder.VirtualQuantity disk.vcloud_size
89
+ builder.HostResource disk.vcloud_size
90
+ builder.ResourceType 17
91
+ builder.AddressOnParent disk.address
92
+ end
77
93
  end
78
94
  end
79
95
  end
@@ -14,65 +14,66 @@ module Fog
14
14
 
15
15
  def get_vdc(vdc_uri)
16
16
  vdc_uri = ensure_unparsed(vdc_uri)
17
- if vdc = mock_data[:organizations].map { |org| org[:vdcs] }.flatten.detect { |vdc| vdc[:href] == vdc_uri }
17
+
18
+ if vdc = mock_data.vdc_from_href(vdc_uri)
18
19
  xml = Builder::XmlMarkup.new
19
20
  mock_it 200,
20
- xml.Vdc(xmlns.merge(:href => vdc[:href], :name => vdc[:name])) {
21
- xml.Link(:rel => "down",
22
- :href => vdc[:href] + "/catalog",
23
- :type => "application/vnd.vmware.vcloud.catalog+xml",
24
- :name => vdc[:name])
25
- xml.Link(:rel => "down",
26
- :href => vdc[:extension_href] + "/publicIps",
27
- :type => "application/vnd.tmrk.ecloud.publicIpsList+xml",
28
- :name => "Public IPs")
29
- xml.Link(:rel => "down",
30
- :href => vdc[:extension_href] + "/internetServices",
31
- :type => "application/vnd.tmrk.ecloud.internetServicesList+xml",
32
- :name => "Internet Services")
33
- xml.Link(:rel => "down",
34
- :href => vdc[:extension_href] + "/firewallAcls",
35
- :type => "application/vnd.tmrk.ecloud.firewallAclsList+xml",
36
- :name => "Firewall Access List")
37
- xml.Description("")
38
- xml.StorageCapacity {
39
- xml.Units("bytes * 10^9")
40
- xml.Allocated(vdc[:storage][:allocated])
41
- xml.Used(vdc[:storage][:used])
21
+ xml.Vdc(xmlns.merge(:href => vdc.href, :name => vdc.name)) {
22
+ xml.Link(:rel => "down",
23
+ :href => vdc.catalog.href,
24
+ :type => "application/vnd.vmware.vcloud.catalog+xml",
25
+ :name => vdc.catalog.name)
26
+ xml.Link(:rel => "down",
27
+ :href => vdc.public_ip_collection.href,
28
+ :type => "application/vnd.tmrk.ecloud.publicIpsList+xml",
29
+ :name => vdc.public_ip_collection.name)
30
+ xml.Link(:rel => "down",
31
+ :href => vdc.internet_service_collection.href,
32
+ :type => "application/vnd.tmrk.ecloud.internetServicesList+xml",
33
+ :name => vdc.internet_service_collection.name)
34
+ xml.Link(:rel => "down",
35
+ :href => vdc.firewall_acls.href,
36
+ :type => "application/vnd.tmrk.ecloud.firewallAclsList+xml",
37
+ :name => vdc.firewall_acls.name)
38
+ xml.Description("")
39
+ xml.StorageCapacity {
40
+ xml.Units("bytes * 10^9")
41
+ xml.Allocated(vdc.storage_allocated)
42
+ xml.Used(vdc.storage_used)
43
+ }
44
+ xml.ComputeCapacity {
45
+ xml.Cpu {
46
+ xml.Units("hz * 10^6")
47
+ xml.Allocated(vdc.cpu_allocated)
42
48
  }
43
- xml.ComputeCapacity {
44
- xml.Cpu {
45
- xml.Units("hz * 10^6")
46
- xml.Allocated(vdc[:cpu][:allocated])
47
- }
48
- xml.Memory {
49
- xml.Units("bytes * 2^20")
50
- xml.Allocated(vdc[:memory][:allocated])
51
- }
52
- xml.DeployedVmsQuota {
53
- xml.Limit("-1")
54
- xml.Used("-1")
55
- }
56
- xml.InstantiatedVmsQuota {
57
- xml.Limit("-1")
58
- xml.Used("-1")
59
- }
49
+ xml.Memory {
50
+ xml.Units("bytes * 2^20")
51
+ xml.Allocated(vdc.memory_allocated)
60
52
  }
61
- xml.ResourceEntities {
62
- vdc[:vms].each do |vm|
63
- xml.ResourceEntity(:href => vm[:href],
64
- :type => "application/vnd.vmware.vcloud.vApp+xml",
65
- :name => vm[:name])
66
- end
53
+ xml.DeployedVmsQuota {
54
+ xml.Limit("-1")
55
+ xml.Used("-1")
67
56
  }
68
- xml.AvailableNetworks {
69
- vdc[:networks].each do |network|
70
- xml.Network(:href => network[:href],
71
- :type => "application/vnd.vmware.vcloud.network+xml",
72
- :name => network[:name])
73
- end
57
+ xml.InstantiatedVmsQuota {
58
+ xml.Limit("-1")
59
+ xml.Used("-1")
74
60
  }
75
- }, { 'Content-Type' => 'application/vnd.vmware.vcloud.vdc+xml'}
61
+ }
62
+ xml.ResourceEntities {
63
+ vdc.virtual_machines.each do |virtual_machine|
64
+ xml.ResourceEntity(:href => virtual_machine.href,
65
+ :type => "application/vnd.vmware.vcloud.vApp+xml",
66
+ :name => virtual_machine.name)
67
+ end
68
+ }
69
+ xml.AvailableNetworks {
70
+ vdc.networks.each do |network|
71
+ xml.Network(:href => network.href,
72
+ :type => "application/vnd.vmware.vcloud.network+xml",
73
+ :name => network.name)
74
+ end
75
+ }
76
+ }, { 'Content-Type' => 'application/vnd.vmware.vcloud.vdc+xml'}
76
77
  else
77
78
  mock_error 200, "401 Unauthorized"
78
79
  end