fog 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
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