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
@@ -178,14 +178,22 @@ module Fog
178
178
  :subnet => "1.2.3.0/24",
179
179
  :gateway => "1.2.3.1",
180
180
  :netmask => "255.255.255.0",
181
- :fencemode => "isolated"
181
+ :dns => "8.8.8.8",
182
+ :features => [
183
+ { :type => :fencemode, :value => "isolated" }
184
+ ],
185
+ :ips => { "1.2.3.3" => "Broom 1", "1.2.3.4" => "Broom 2", "1.2.3.10" => "Email" }
182
186
  },
183
187
  { :href => "#{base_url}/network/32",
184
188
  :name => "4.5.6.0/24",
185
189
  :subnet => "4.5.6.0/24",
186
190
  :gateway => "4.5.6.1",
187
191
  :netmask => "255.255.255.0",
188
- :fencemode => "isolated"
192
+ :dns => "8.8.8.8",
193
+ :features => [
194
+ { :type => :fencemode, :value => "isolated" }
195
+ ],
196
+ :ips => { }
189
197
  },
190
198
  ],
191
199
  :vms => [
@@ -231,8 +239,12 @@ module Fog
231
239
  :name => "7.8.9.0/24",
232
240
  :subnet => "7.8.9.0/24",
233
241
  :gateway => "7.8.9.1",
242
+ :dns => "8.8.8.8",
234
243
  :netmask => "255.255.255.0",
235
- :fencemode => "isolated"
244
+ :features => [
245
+ { :type => :fencemode, :value => "isolated" }
246
+ ],
247
+ :ips => { "7.8.9.10" => "Master Blaster" }
236
248
  }
237
249
  ],
238
250
  :vms => [
@@ -313,6 +325,7 @@ module Fog
313
325
  require 'fog/vcloud/models/vdcs'
314
326
  require 'fog/vcloud/terremark/vcloud'
315
327
  require 'fog/vcloud/terremark/ecloud'
328
+ require 'fog/vcloud/requests/get_network'
316
329
  require 'fog/vcloud/requests/get_organization'
317
330
  require 'fog/vcloud/requests/get_vdc'
318
331
  require 'fog/vcloud/requests/get_versions'
@@ -321,6 +334,7 @@ module Fog
321
334
  require 'fog/vcloud/parsers/get_vdc'
322
335
  require 'fog/vcloud/parsers/get_versions'
323
336
  require 'fog/vcloud/parsers/login'
337
+ require 'fog/vcloud/parsers/network'
324
338
 
325
339
  require 'builder'
326
340
 
@@ -331,6 +345,9 @@ module Fog
331
345
  Struct.new("VcloudVersion", :version, :login_url, :supported)
332
346
  Struct.new("VcloudOrgList", :organizations, :xmlns)
333
347
  Struct.new("VcloudXCapacity", :units, :allocated, :used, :limit)
348
+ Struct.new("VcloudNetwork", :features, :configuration, :href, :type, :name, :xmlns, :description)
349
+ Struct.new("VcloudNetworkConfiguration", :gateway, :netmask, :dns)
350
+ Struct.new("VcloudNetworkFenceMode", :mode)
334
351
  @required = true
335
352
  end
336
353
 
@@ -18,7 +18,8 @@ module Fog
18
18
  @all_request = all_request
19
19
  class_eval <<-EOS, __FILE__, __LINE__
20
20
  def all
21
- data = self.class.all_request.call(self).body.links.select do |link|
21
+ raw_all = self.class.all_request.call(self)
22
+ data = (raw_all.is_a?(Array) ? raw_all : raw_all.body.links).select do |link|
22
23
  link.type == self.class.vcloud_type
23
24
  end.map { |link| {:href => link.href, :name => link.name } }
24
25
  load(data)
@@ -53,14 +54,33 @@ module Fog
53
54
  end
54
55
  end
55
56
 
56
- def [](index)
57
- self.slice(index).reload
57
+ attr_accessor :href
58
+
59
+ def create(attributes = {})
60
+ attributes.merge!(:new => true)
61
+ obj = super(attributes)
62
+ self << obj
63
+ obj
64
+ end
65
+
66
+ def each
67
+ super do |item|
68
+ item.reload
69
+ yield(item)
70
+ end
58
71
  end
59
72
 
60
- def reload
61
- self.all
73
+ def [](index)
74
+ if obj = super
75
+ obj.reload unless obj.loaded?
76
+ end
77
+ obj
62
78
  end
63
79
 
80
+ #def reload
81
+ # self.all
82
+ #end
83
+
64
84
  end
65
85
  end
66
86
  end
@@ -27,9 +27,13 @@ module Fog
27
27
  end
28
28
  end
29
29
 
30
+ attr_accessor :loaded
31
+ alias_method :loaded?, :loaded
32
+
30
33
  def reload
31
34
  if data = collection.get_raw(identity)
32
35
  merge_get_raw_result(data)
36
+ @loaded = true
33
37
  self
34
38
  end
35
39
  end
@@ -14,8 +14,8 @@ module Fog
14
14
  @response = Struct::VcloudOrganization.new([])
15
15
  end
16
16
 
17
- def start_element(name, attributes)
18
- @value = ''
17
+ def start_element(name, attributes=[])
18
+ super
19
19
  case name
20
20
  when 'Link'
21
21
  @response.links << generate_link(attributes)
@@ -12,8 +12,8 @@ module Fog
12
12
  @response = Struct::VcloudVdc.new([],[],[],Struct::VcloudXCapacity.new,Struct::VcloudXCapacity.new,Struct::VcloudXCapacity.new)
13
13
  end
14
14
 
15
- def start_element(name, attributes)
16
- @value = ''
15
+ def start_element(name, attributes=[])
16
+ super
17
17
  case name
18
18
  when 'Cpu'
19
19
  @target = :cpu_capacity
@@ -16,7 +16,7 @@ module Fog
16
16
  end
17
17
 
18
18
  def start_element(name, attributes = {})
19
- @value = ''
19
+ super
20
20
  case name
21
21
  when "Version"
22
22
  @version = Struct::VcloudVersion.new
@@ -14,8 +14,8 @@ module Fog
14
14
  @response = Struct::VcloudOrgList.new([])
15
15
  end
16
16
 
17
- def start_element(name, attributes)
18
- @value = ''
17
+ def start_element(name, attributes=[])
18
+ super
19
19
  case name
20
20
  when 'OrgList'
21
21
  until attributes.empty?
@@ -0,0 +1,53 @@
1
+ module Fog
2
+ module Parsers
3
+ module Vcloud
4
+
5
+ class Network < Fog::Parsers::Vcloud::Base
6
+
7
+ def reset
8
+ @response = Struct::VcloudNetwork.new([])
9
+ end
10
+
11
+ def start_element(name,attributes=[])
12
+ super
13
+ case name
14
+ when "Network"
15
+ handle_root(attributes)
16
+ when "Features"
17
+ @in = :features
18
+ when "Configuration"
19
+ @in = :configuration
20
+ @response.configuration = Struct::VcloudNetworkConfiguration.new
21
+ end
22
+ end
23
+
24
+ def end_element(name)
25
+ case @in
26
+ when :features
27
+ case name
28
+ when "FenceMode"
29
+ @response.features << Struct::VcloudNetworkFenceMode.new(@value)
30
+ when "Features"
31
+ @in = nil
32
+ end
33
+ when :configuration
34
+ case name
35
+ when "Gateway","Netmask","Dns"
36
+ @response.configuration[name.downcase] = @value
37
+ when "Configuration"
38
+ @in = nil
39
+ end
40
+ else
41
+ case name
42
+ when "Description"
43
+ @response.description = @value
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+
@@ -0,0 +1,54 @@
1
+ module Fog
2
+ module Vcloud
3
+ class Real
4
+
5
+ def get_network(network_uri)
6
+ request(
7
+ :expects => 200,
8
+ :method => 'GET',
9
+ :parser => Fog::Parsers::Vcloud::Network.new,
10
+ :uri => uri
11
+ )
12
+ end
13
+
14
+ end
15
+
16
+ class Mock
17
+
18
+ def get_network(network_uri)
19
+ #
20
+ # Based off of:
21
+ # vCloud API Guide v0.8 - Page 50
22
+ #
23
+ # Did not implement AssociatedNetwork, seems redundant, haven't seen it in use yet
24
+ # Did not implement the following features: Dhcp, Nat & Firewall
25
+ #
26
+ type = "application/vnd.vmware.vcloud.network+xml"
27
+ response = Excon::Response.new
28
+ if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_uri.to_s }
29
+ xml = Builder::XmlMarkup.new
30
+ mock_it Fog::Parsers::Vcloud::Network.new, 200,
31
+ xml.Network(xmlns.merge(:href => network[:href], :name => network[:name], :type => type)) {
32
+ xml.Description(network[:name])
33
+ xml.Configuration {
34
+ xml.Gateway(network[:gateway])
35
+ xml.Netmask(network[:netmask])
36
+ xml.Dns(network[:dns])
37
+ }
38
+ if network[:features]
39
+ xml.Features {
40
+ if feature = network[:features].detect { |feature| feature[:type] == :fencemode }
41
+ xml.FenceMode(feature[:value])
42
+ end
43
+ }
44
+ end
45
+ },
46
+ { 'Content-Type' => type }
47
+ else
48
+ mock_error 200, "401 Unauthorized"
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -3,13 +3,12 @@ module Fog
3
3
 
4
4
  class Real
5
5
  def get_organization(organization_uri)
6
- response = request(
6
+ request(
7
7
  :expects => 200,
8
8
  :method => 'GET',
9
9
  :parser => Fog::Parsers::Vcloud::GetOrganization.new,
10
10
  :uri => organization_uri
11
11
  )
12
- response
13
12
  end
14
13
 
15
14
  end
@@ -31,6 +31,10 @@ module Fog
31
31
  require 'fog/vcloud/terremark/all'
32
32
  require 'fog/vcloud/terremark/ecloud/models/internet_service'
33
33
  require 'fog/vcloud/terremark/ecloud/models/internet_services'
34
+ require 'fog/vcloud/terremark/ecloud/models/ip'
35
+ require 'fog/vcloud/terremark/ecloud/models/ips'
36
+ require 'fog/vcloud/terremark/ecloud/models/network'
37
+ require 'fog/vcloud/terremark/ecloud/models/networks'
34
38
  require 'fog/vcloud/terremark/ecloud/models/public_ip'
35
39
  require 'fog/vcloud/terremark/ecloud/models/public_ips'
36
40
  require 'fog/vcloud/terremark/ecloud/models/vdc'
@@ -40,19 +44,28 @@ module Fog
40
44
  require 'fog/vcloud/terremark/ecloud/parsers/get_public_ips'
41
45
  require 'fog/vcloud/terremark/ecloud/parsers/get_vdc'
42
46
  require 'fog/vcloud/terremark/ecloud/parsers/internet_service'
47
+ require 'fog/vcloud/terremark/ecloud/parsers/network'
48
+ require 'fog/vcloud/terremark/ecloud/parsers/network_ips'
43
49
  require 'fog/vcloud/terremark/ecloud/requests/add_internet_service'
50
+ require 'fog/vcloud/terremark/ecloud/requests/configure_internet_service'
44
51
  require 'fog/vcloud/terremark/ecloud/requests/delete_internet_service'
45
52
  require 'fog/vcloud/terremark/ecloud/requests/get_internet_services'
53
+ require 'fog/vcloud/terremark/ecloud/requests/get_network'
54
+ require 'fog/vcloud/terremark/ecloud/requests/get_network_ips'
46
55
  require 'fog/vcloud/terremark/ecloud/requests/get_public_ip'
47
56
  require 'fog/vcloud/terremark/ecloud/requests/get_public_ips'
48
57
  require 'fog/vcloud/terremark/ecloud/requests/login'
49
58
  require 'fog/vcloud/terremark/ecloud/requests/get_vdc'
50
- Struct.new("TmrkEcloudVdc", :links, :resource_entities, :networks,
51
- :cpu_capacity, :storage_capacity, :memory_capacity, :deployed_vm_quota, :instantiated_vm_quota,
52
- :href, :type, :name, :xmlns, :description)
59
+ Struct.new("TmrkEcloudVdc", :links, :resource_entities, :networks, :cpu_capacity, :storage_capacity,
60
+ :memory_capacity, :deployed_vm_quota, :instantiated_vm_quota, :href, :type,
61
+ :name, :xmlns, :description)
53
62
  Struct.new("TmrkEcloudList", :links)
54
63
  Struct.new("TmrkEcloudPublicIp", :type, :href, :name, :id)
55
- Struct.new("TmrkEcloudInternetService", :type, :href, :id, :name, :public_ip, :port, :protocol, :enabled, :timeout, :description, :url_send_string, :http_header)
64
+ Struct.new("TmrkEcloudInternetService", :type, :href, :id, :name, :public_ip, :port, :protocol,
65
+ :enabled, :timeout, :description, :url_send_string, :http_header)
66
+ Struct.new("TmrkEcloudNetwork", :features, :configuration, :ips_link, :name, :type, :href, :xmlns)
67
+ Struct.new("TmrkEcloudNetworkIps", :addresses)
68
+ Struct.new("TmrkEcloudNetworkIp", :name, :status, :server)
56
69
  @required = true
57
70
  end
58
71
  if Fog.mocking?
@@ -20,6 +20,41 @@ module Fog
20
20
  attribute :url_send_string
21
21
  attribute :http_header
22
22
 
23
+ attr_accessor :new
24
+
25
+ def delete
26
+ requires :href
27
+
28
+ connection.delete_internet_service( self.href )
29
+ collection.reload
30
+ end
31
+
32
+ def save
33
+ if new_record?
34
+ result = connection.add_internet_service( collection.href, _compose_service_data )
35
+ self.href = result.body.href
36
+ self.reload
37
+ else
38
+ connection.configure_internet_service( self.href, _compose_service_data, _compose_ip_data )
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def _compose_service_data
45
+ service_data = {}
46
+ self.class.attributes.select{ |attribute| !attribute.nil? }.each { |attribute| service_data[attribute] = send(attribute).to_s }
47
+ service_data
48
+ end
49
+
50
+ def _compose_ip_data
51
+ if public_ip.nil?
52
+ {}
53
+ else
54
+ { :id => self.public_ip.id, :href => self.public_ip.href.to_s, :name => self.public_ip.name }
55
+ end
56
+ end
57
+
23
58
  end
24
59
  end
25
60
  end
@@ -17,12 +17,10 @@ module Fog
17
17
 
18
18
  class InternetServices < Fog::Vcloud::Collection
19
19
 
20
- attr_accessor :href
21
-
22
20
  model Fog::Vcloud::Terremark::Ecloud::InternetService
23
21
 
24
22
  vcloud_type "application/vnd.tmrk.ecloud.internetService+xml"
25
- all_request lambda { |internet_services| internet_services.raw_results }
23
+ all_request lambda { |internet_services| internet_services.send(:raw_results) }
26
24
 
27
25
  def get(uri)
28
26
  if internet_service = get_raw(uri)
@@ -32,18 +30,20 @@ module Fog
32
30
  end
33
31
 
34
32
  def get_raw(uri)
35
- raw_results.body.links.detect { |link| link.href == uri }
33
+ raw_results.body.links.detect { |link| link.href.to_s == uri.to_s }
34
+ end
35
+
36
+ def reload
37
+ super
38
+ @raw_results = nil
36
39
  end
37
40
 
41
+ private
42
+
38
43
  def raw_results
39
44
  @raw_results ||= connection.get_internet_services(self.href)
40
45
  end
41
46
 
42
- #def reload
43
- # super
44
- # @raw_results = nil
45
- #end
46
-
47
47
  end
48
48
  end
49
49
  end
@@ -0,0 +1,18 @@
1
+ require 'fog/model'
2
+
3
+ module Fog
4
+ module Vcloud
5
+ module Terremark
6
+ module Ecloud
7
+ class Ip < Fog::Vcloud::Model
8
+
9
+ identity :name
10
+
11
+ attribute :status
12
+ attribute :server
13
+
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ class Ips < Fog::Vcloud::Collection
7
+
8
+ model Fog::Vcloud::Terremark::Ecloud::Ip
9
+
10
+ undef_method :create
11
+
12
+ def all
13
+ load(connection.get_network_ips(href).body.addresses.
14
+ map { |address| { :name => address.name, :status => address.status, :server => address.server } })
15
+ end
16
+
17
+ def get_raw(name)
18
+ raw_results.detect { |address| address.name == name }
19
+ end
20
+
21
+ def reload
22
+ super
23
+ @raw_results = nil
24
+ end
25
+
26
+ private
27
+
28
+ def raw_results
29
+ @raw_results ||= connection.get_network_ips(href).body.addresses
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end