fog 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +5 -5
  3. data/README.rdoc +29 -29
  4. data/fog.gemspec +24 -2
  5. data/lib/fog.rb +4 -15
  6. data/lib/fog/aws.rb +2 -2
  7. data/lib/fog/aws/ec2.rb +64 -101
  8. data/lib/fog/aws/elb.rb +19 -27
  9. data/lib/fog/aws/models/ec2/addresses.rb +1 -9
  10. data/lib/fog/aws/models/ec2/flavors.rb +1 -7
  11. data/lib/fog/aws/models/ec2/images.rb +1 -7
  12. data/lib/fog/aws/models/ec2/key_pairs.rb +1 -7
  13. data/lib/fog/aws/models/ec2/security_groups.rb +1 -7
  14. data/lib/fog/aws/models/ec2/servers.rb +1 -7
  15. data/lib/fog/aws/models/ec2/snapshots.rb +1 -9
  16. data/lib/fog/aws/models/ec2/volumes.rb +1 -9
  17. data/lib/fog/aws/models/s3/directories.rb +1 -7
  18. data/lib/fog/aws/models/s3/file.rb +5 -0
  19. data/lib/fog/aws/requests/ec2/allocate_address.rb +2 -0
  20. data/lib/fog/aws/requests/ec2/attach_volume.rb +2 -0
  21. data/lib/fog/aws/requests/ec2/create_key_pair.rb +2 -0
  22. data/lib/fog/aws/requests/ec2/create_snapshot.rb +2 -0
  23. data/lib/fog/aws/requests/ec2/create_volume.rb +2 -0
  24. data/lib/fog/aws/requests/ec2/describe_addresses.rb +2 -0
  25. data/lib/fog/aws/requests/ec2/describe_availability_zones.rb +2 -0
  26. data/lib/fog/aws/requests/ec2/describe_images.rb +2 -0
  27. data/lib/fog/aws/requests/ec2/describe_instances.rb +2 -0
  28. data/lib/fog/aws/requests/ec2/describe_key_pairs.rb +2 -0
  29. data/lib/fog/aws/requests/ec2/describe_regions.rb +2 -0
  30. data/lib/fog/aws/requests/ec2/describe_reserved_instances.rb +2 -0
  31. data/lib/fog/aws/requests/ec2/describe_security_groups.rb +2 -0
  32. data/lib/fog/aws/requests/ec2/describe_snapshots.rb +2 -0
  33. data/lib/fog/aws/requests/ec2/describe_volumes.rb +2 -0
  34. data/lib/fog/aws/requests/ec2/detach_volume.rb +2 -0
  35. data/lib/fog/aws/requests/ec2/get_console_output.rb +2 -0
  36. data/lib/fog/aws/requests/ec2/run_instances.rb +2 -0
  37. data/lib/fog/aws/requests/ec2/terminate_instances.rb +2 -0
  38. data/lib/fog/aws/requests/elb/create_load_balancer.rb +2 -0
  39. data/lib/fog/aws/requests/elb/delete_load_balancer.rb +2 -0
  40. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +2 -0
  41. data/lib/fog/aws/requests/elb/describe_instance_health.rb +2 -0
  42. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +2 -0
  43. data/lib/fog/aws/requests/elb/disable_availability_zones_for_load_balancer.rb +2 -0
  44. data/lib/fog/aws/requests/elb/enable_availability_zones_for_load_balancer.rb +2 -0
  45. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +2 -0
  46. data/lib/fog/aws/requests/s3/copy_object.rb +2 -0
  47. data/lib/fog/aws/requests/s3/get_bucket.rb +2 -0
  48. data/lib/fog/aws/requests/s3/get_bucket_acl.rb +2 -0
  49. data/lib/fog/aws/requests/s3/get_bucket_location.rb +2 -0
  50. data/lib/fog/aws/requests/s3/get_bucket_logging.rb +2 -0
  51. data/lib/fog/aws/requests/s3/get_bucket_object_versions.rb +2 -0
  52. data/lib/fog/aws/requests/s3/get_bucket_versioning.rb +2 -0
  53. data/lib/fog/aws/requests/s3/get_object_acl.rb +2 -0
  54. data/lib/fog/aws/requests/s3/get_request_payment.rb +2 -0
  55. data/lib/fog/aws/requests/s3/get_service.rb +2 -0
  56. data/lib/fog/aws/requests/s3/put_object.rb +2 -2
  57. data/lib/fog/aws/requests/simpledb/domain_metadata.rb +2 -0
  58. data/lib/fog/aws/requests/simpledb/get_attributes.rb +2 -0
  59. data/lib/fog/aws/requests/simpledb/list_domains.rb +2 -0
  60. data/lib/fog/aws/requests/simpledb/select.rb +2 -0
  61. data/lib/fog/aws/s3.rb +68 -85
  62. data/lib/fog/aws/simpledb.rb +15 -29
  63. data/lib/fog/bluebox.rb +23 -40
  64. data/lib/fog/bluebox/models/flavors.rb +1 -7
  65. data/lib/fog/bluebox/models/images.rb +1 -9
  66. data/lib/fog/bluebox/models/servers.rb +1 -7
  67. data/lib/fog/credentials.rb +2 -0
  68. data/lib/fog/errors.rb +20 -0
  69. data/lib/fog/hmac.rb +48 -0
  70. data/lib/fog/local.rb +9 -22
  71. data/lib/fog/local/models/directories.rb +1 -7
  72. data/lib/fog/rackspace.rb +2 -6
  73. data/lib/fog/rackspace/files.rb +46 -48
  74. data/lib/fog/rackspace/models/files/directories.rb +1 -7
  75. data/lib/fog/rackspace/models/servers/flavors.rb +1 -7
  76. data/lib/fog/rackspace/models/servers/images.rb +1 -9
  77. data/lib/fog/rackspace/models/servers/server.rb +37 -1
  78. data/lib/fog/rackspace/models/servers/servers.rb +8 -7
  79. data/lib/fog/rackspace/requests/files/put_object.rb +1 -1
  80. data/lib/fog/rackspace/servers.rb +33 -45
  81. data/lib/fog/service.rb +82 -0
  82. data/lib/fog/slicehost.rb +28 -42
  83. data/lib/fog/slicehost/models/flavors.rb +1 -7
  84. data/lib/fog/slicehost/models/images.rb +1 -9
  85. data/lib/fog/slicehost/models/servers.rb +1 -7
  86. data/lib/fog/ssh.rb +1 -1
  87. data/lib/fog/vcloud.rb +20 -3
  88. data/lib/fog/vcloud/collection.rb +25 -5
  89. data/lib/fog/vcloud/model.rb +4 -0
  90. data/lib/fog/vcloud/parsers/get_organization.rb +2 -2
  91. data/lib/fog/vcloud/parsers/get_vdc.rb +2 -2
  92. data/lib/fog/vcloud/parsers/get_versions.rb +1 -1
  93. data/lib/fog/vcloud/parsers/login.rb +2 -2
  94. data/lib/fog/vcloud/parsers/network.rb +53 -0
  95. data/lib/fog/vcloud/requests/get_network.rb +54 -0
  96. data/lib/fog/vcloud/requests/get_organization.rb +1 -2
  97. data/lib/fog/vcloud/terremark/ecloud.rb +17 -4
  98. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +35 -0
  99. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +9 -9
  100. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +18 -0
  101. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +36 -0
  102. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +32 -0
  103. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +38 -0
  104. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +3 -1
  105. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +1 -1
  106. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +9 -0
  107. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +2 -0
  108. data/lib/fog/vcloud/terremark/ecloud/parsers/network.rb +28 -0
  109. data/lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb +31 -0
  110. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +10 -7
  111. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +99 -0
  112. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +54 -0
  113. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +51 -0
  114. data/spec/aws/models/s3/file_spec.rb +15 -0
  115. data/spec/vcloud/requests/get_network_spec.rb +55 -0
  116. data/spec/vcloud/spec_helper.rb +1 -0
  117. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +15 -0
  118. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +35 -0
  119. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +28 -0
  120. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +65 -0
  121. data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +26 -0
  122. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +0 -2
  123. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +44 -0
  124. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +54 -0
  125. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +63 -0
  126. data/tests/aws/requests/ec2/volume_tests.rb +2 -2
  127. data/tests/helper.rb +2 -0
  128. metadata +25 -3
@@ -0,0 +1,32 @@
1
+ require 'fog/model'
2
+
3
+ module Fog
4
+ module Vcloud
5
+ module Terremark
6
+ module Ecloud
7
+ class Network < Fog::Vcloud::Model
8
+
9
+ identity :href
10
+
11
+ attribute :name
12
+ attribute :features
13
+ attribute :configuration
14
+ attribute :ips_link
15
+ attribute :type
16
+ attribute :xmlns
17
+
18
+ def ips
19
+ unless @loaded
20
+ reload
21
+ end
22
+ @ips ||= Fog::Vcloud::Terremark::Ecloud::Ips.
23
+ new( :connection => connection,
24
+ :href => ips_link.href )
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Mock
7
+ def networks(options = {})
8
+ @networks ||= Fog::Vcloud::Terremark::Ecloud::Networks.new(options.merge(:connection => self))
9
+ end
10
+ end
11
+
12
+ module Real
13
+ def networks(options = {})
14
+ @networks ||= Fog::Vcloud::Terremark::Ecloud::Networks.new(options.merge(:connection => self))
15
+ end
16
+ end
17
+
18
+ class Networks < Fog::Vcloud::Collection
19
+
20
+ undef_method :create
21
+
22
+ model Fog::Vcloud::Terremark::Ecloud::Network
23
+
24
+ get_request :get_network
25
+ vcloud_type "application/vnd.vmware.vcloud.network+xml"
26
+ all_request lambda { |networks| networks.connection.get_vdc(networks.href).body.networks }
27
+
28
+ #def all
29
+ # pp connection.get_vdc(href).body.networks
30
+ # load(connection.get_vdc(href).body.networks.map { |network| { } } )
31
+ #end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -13,11 +13,13 @@ module Fog
13
13
  attribute :id
14
14
 
15
15
  def internet_services
16
+ unless @loaded
17
+ reload
18
+ end
16
19
  @internet_services ||= Fog::Vcloud::Terremark::Ecloud::InternetServices.
17
20
  new( :connection => connection,
18
21
  :href => href.to_s + "/internetServices" )
19
22
  end
20
-
21
23
  end
22
24
  end
23
25
  end
@@ -17,7 +17,7 @@ module Fog
17
17
 
18
18
  class PublicIps < Fog::Vcloud::Collection
19
19
 
20
- attr_accessor :href
20
+ undef_method :create
21
21
 
22
22
  model Fog::Vcloud::Terremark::Ecloud::PublicIp
23
23
 
@@ -14,6 +14,9 @@ module Fog
14
14
  attribute :instantiated_vm_quota
15
15
 
16
16
  def public_ips
17
+ unless @loaded
18
+ reload
19
+ end
17
20
  @public_ips ||= Fog::Vcloud::Terremark::Ecloud::PublicIps.new( :connection => connection,
18
21
  :href => other_links.detect { |link| link.type == "application/vnd.tmrk.ecloud.publicIpsList+xml" }.href )
19
22
  end
@@ -24,6 +27,12 @@ module Fog
24
27
  :href => href.to_s.gsub('vdc','extensions/vdc') + "/internetServices" )
25
28
  end
26
29
 
30
+ def networks
31
+ @networks ||= Fog::Vcloud::Terremark::Ecloud::Networks.
32
+ new( :connection => connection,
33
+ :href => href )
34
+ end
35
+
27
36
  end
28
37
  end
29
38
  end
@@ -16,6 +16,8 @@ module Fog
16
16
 
17
17
  class Vdcs < Fog::Vcloud::Vdcs
18
18
 
19
+ undef_method :create
20
+
19
21
  model Fog::Vcloud::Terremark::Ecloud::Vdc
20
22
 
21
23
  #get_request :get_vdc
@@ -0,0 +1,28 @@
1
+ module Fog
2
+ module Parsers
3
+ module Vcloud
4
+ module Terremark
5
+ module Ecloud
6
+
7
+ class Network < Fog::Parsers::Vcloud::Network
8
+
9
+ def reset
10
+ @response = Struct::TmrkEcloudNetwork.new([])
11
+ end
12
+
13
+ def start_element(name,attributes=[])
14
+ super
15
+ case name
16
+ when "Link"
17
+ @response.ips_link = generate_link(attributes)
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,31 @@
1
+ module Fog
2
+ module Parsers
3
+ module Vcloud
4
+ module Terremark
5
+ module Ecloud
6
+
7
+ class NetworkIps< Fog::Parsers::Vcloud::Base
8
+
9
+ def reset
10
+ @response = Struct::TmrkEcloudNetworkIps.new([])
11
+ @ip_address = Struct::TmrkEcloudNetworkIp.new
12
+ end
13
+
14
+ def end_element(name)
15
+ case name
16
+ when 'Name', 'Status', 'Server'
17
+ @ip_address[name.downcase] = @value
18
+ when 'IpAddress'
19
+ @response.addresses << @ip_address
20
+ @ip_address = Struct::TmrkEcloudNetworkIp.new
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+
@@ -17,15 +17,18 @@ module Fog
17
17
  }
18
18
  end
19
19
 
20
- def self.validate_internet_service_request_data(service_data)
20
+ def self.validate_internet_service_data(service_data, configure=false)
21
21
  valid_opts = [:name, :protocol, :port, :description, :enabled, :description]
22
+ if configure
23
+ valid_opts + [ :id, :href, :timeout ]
24
+ end
22
25
  unless valid_opts.all? { |opt| service_data.keys.include?(opt) }
23
26
  raise ArgumentError.new("Required Internet Service data missing: #{(valid_opts - service_data.keys).map(&:inspect).join(", ")}")
24
27
  end
25
28
  end
26
29
 
27
- def add_internet_service(internet_service_uri, service_data)
28
- Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_request_data(service_data)
30
+ def add_internet_service(internet_services_uri, service_data)
31
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_data(service_data)
29
32
 
30
33
  request(
31
34
  :body => Fog::Vcloud::Terremark::Ecloud::Real.generate_internet_service_request(service_data),
@@ -33,7 +36,7 @@ module Fog
33
36
  :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
34
37
  :method => 'POST',
35
38
  :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::InternetService.new,
36
- :uri => internet_service_uri
39
+ :uri => internet_services_uri
37
40
  )
38
41
  end
39
42
 
@@ -45,10 +48,10 @@ module Fog
45
48
  # http://support.theenterprisecloud.com/kb/default.asp?id=561&Lang=1&SID=
46
49
  #
47
50
 
48
- def add_internet_service(internet_service_uri, service_data)
49
- Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_request_data(service_data)
51
+ def add_internet_service(internet_services_uri, service_data)
52
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_data(service_data)
50
53
 
51
- if ip = Fog::Vcloud::Mock.ip_from_uri(internet_service_uri.to_s)
54
+ if ip = Fog::Vcloud::Mock.ip_from_uri(internet_services_uri.to_s)
52
55
  new_service = service_data.merge!( { :id => rand(1000), :timeout => 2 } )
53
56
  ip[:services] << new_service
54
57
  builder = Builder::XmlMarkup.new
@@ -0,0 +1,99 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def self.generate_configure_internet_service_request(service_data,ip_address_data)
8
+ builder = Builder::XmlMarkup.new
9
+ builder.InternetService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
10
+ :xmlns => "urn:tmrk:eCloudExtensions-2.0") {
11
+ builder.Id(service_data[:id])
12
+ builder.Href(service_data[:href].to_s)
13
+ builder.Name(service_data[:name])
14
+ builder.Protocol(service_data[:protocol])
15
+ builder.Port(service_data[:port])
16
+ builder.Enabled(service_data[:enabled])
17
+ builder.Description(service_data[:description])
18
+ builder.Timeout(service_data[:timeout])
19
+ builder.PublicIpAddress {
20
+ builder.Id(ip_address_data[:id])
21
+ builder.Href(ip_address_data[:href].to_s)
22
+ builder.Name(ip_address_data[:name])
23
+ }
24
+ }
25
+ end
26
+
27
+ def self.validate_public_ip_address_data(ip_address_data)
28
+ valid_opts = [:name, :href, :id]
29
+ unless valid_opts.all? { |opt| ip_address_data.keys.include?(opt) }
30
+ raise ArgumentError.new("Required Internet Service data missing: #{(valid_opts - ip_address_data.keys).map(&:inspect).join(", ")}")
31
+ end
32
+ end
33
+
34
+ def configure_internet_service(internet_service_uri, service_data, ip_address_data)
35
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_data(service_data, true)
36
+
37
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_public_ip_address_data(ip_address_data)
38
+
39
+ request(
40
+ :body => Fog::Vcloud::Terremark::Ecloud::Real.generate_configure_internet_service_request(service_data, ip_address_data),
41
+ :expects => 200,
42
+ :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
43
+ :method => 'PUT',
44
+ :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::InternetService.new,
45
+ :uri => internet_service_uri
46
+ )
47
+ end
48
+
49
+ end
50
+
51
+ module Mock
52
+ #
53
+ # Based on
54
+ # http://support.theenterprisecloud.com/kb/default.asp?id=583&Lang=1&SID=
55
+ #
56
+
57
+ def configure_internet_service(internet_service_uri, service_data, ip_address_data)
58
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_internet_service_data(service_data, true)
59
+
60
+ Fog::Vcloud::Terremark::Ecloud::Real.validate_public_ip_address_data(ip_address_data)
61
+
62
+ found = false
63
+ xml = nil
64
+ if ip = Fog::Vcloud::Mock.ip_from_uri(ip_address_data[:href])
65
+ if service = ip[:services].detect { |service| service[:id] == internet_service_uri.to_s.split('/')[-1].to_i }
66
+ found = true
67
+ ip[:services][ip[:services].index(service)] = service_data
68
+
69
+ builder = Builder::XmlMarkup.new
70
+ xml = builder.InternetService(:xmlns => "urn:tmrk:eCloudExtensions-2.0",
71
+ :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
72
+ builder.Id(service_data[:id])
73
+ builder.Href(Fog::Vcloud::Terremark::Ecloud::Mock.internet_service_href(service_data))
74
+ builder.Name(service_data[:name])
75
+ builder.PublicIpAddress {
76
+ builder.Id(ip[:id])
77
+ builder.Href(Fog::Vcloud::Terremark::Ecloud::Mock.public_ip_href(ip))
78
+ builder.Name(ip[:name])
79
+ }
80
+ builder.Protocol(service_data[:protocol])
81
+ builder.Port(service_data[:port])
82
+ builder.Enabled(service_data[:enabled])
83
+ builder.Description(service_data[:description])
84
+ builder.Timeout(service_data[:timeout])
85
+ }
86
+ end
87
+ end
88
+ if found
89
+ mock_it Fog::Parsers::Vcloud::Terremark::Ecloud::InternetService.new, 200, xml, {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'}
90
+ else
91
+ mock_error 200, "401 Unauthorized"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+
@@ -0,0 +1,54 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def get_network(network_uri)
8
+ request(
9
+ :expects => 200,
10
+ :method => 'GET',
11
+ :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::Network.new,
12
+ :uri => network_uri
13
+ )
14
+ end
15
+
16
+ end
17
+
18
+ module Mock
19
+
20
+ def get_network(network_uri)
21
+ #
22
+ # Based off of:
23
+ # http://support.theenterprisecloud.com/kb/default.asp?id=546&Lang=1&SID=
24
+ #
25
+ type = "application/vnd.vmware.vcloud.network+xml"
26
+ response = Excon::Response.new
27
+ if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_uri.to_s }
28
+ xml = Builder::XmlMarkup.new
29
+ mock_it Fog::Parsers::Vcloud::Terremark::Ecloud::Network.new, 200,
30
+ xml.Network(xmlns.merge(:href => network[:href], :name => network[:name], :type => type)) {
31
+ xml.Link( :rel => "down", :href => network[:href] + "/ips", :type => "application/xml", :name => "IP Addresses" )
32
+ xml.Configuration {
33
+ xml.Gateway(network[:gateway])
34
+ xml.Netmask(network[:netmask])
35
+ }
36
+ if network[:features]
37
+ xml.Features {
38
+ if feature = network[:features].detect { |feature| feature[:type] == :fencemode }
39
+ xml.FenceMode(feature[:value])
40
+ end
41
+ }
42
+ end
43
+ },
44
+ { 'Content-Type' => type }
45
+ else
46
+ mock_error 200, "401 Unauthorized"
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def get_network_ips(network_ips_uri)
8
+ request(
9
+ :expects => 200,
10
+ :method => 'GET',
11
+ :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::NetworkIps.new,
12
+ :uri => network_ips_uri
13
+ )
14
+ end
15
+
16
+ end
17
+
18
+ module Mock
19
+ require 'ipaddr'
20
+
21
+ def get_network_ips(network_ips_uri)
22
+ response = Excon::Response.new
23
+ if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_ips_uri.to_s.gsub(%r:/ips$:,'') }
24
+ xml = Builder::XmlMarkup.new
25
+ mock_it Fog::Parsers::Vcloud::Terremark::Ecloud::NetworkIps.new, 200,
26
+ xml.IpAddresses {
27
+ IPAddr.new(network[:name]).to_range.to_a[3..-2].each do |ip|
28
+ xml.IpAddress {
29
+ xml.Name(ip.to_s)
30
+ if network[:ips].has_key?(ip.to_s)
31
+ xml.Status("Assigned")
32
+ xml.Server(network[:ips][ip.to_s])
33
+ else
34
+ xml.Status("Available")
35
+ end
36
+ }
37
+ end
38
+ },
39
+ { 'Content-Type' => 'application/vnd.tmrk.ecloud.ipAddressesList+xml' }
40
+ else
41
+ mock_error 200, "401 Unauthorized"
42
+ end
43
+
44
+
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -103,4 +103,19 @@ describe 'Fog::AWS::S3::File' do
103
103
 
104
104
  end
105
105
 
106
+ describe "#url" do
107
+
108
+ it "should return a signed expiring url" do
109
+ data = File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r')
110
+ file = @directory.files.create(:key => 'fogfilename', :body => data)
111
+ url = file.url(Time.now + 60 * 10)
112
+ url.should include("fogfilename", "Expires")
113
+ unless Fog.mocking?
114
+ open(url).read.should == File.open(File.dirname(__FILE__) + '/../../../lorem.txt', 'r').read
115
+ end
116
+ file.destroy
117
+ end
118
+
119
+ end
120
+
106
121
  end