diff --git a/lib/fog/google/models/compute/image.rb b/lib/fog/google/models/compute/image.rb index 21a6f247b..c78c0ba84 100644 --- a/lib/fog/google/models/compute/image.rb +++ b/lib/fog/google/models/compute/image.rb @@ -12,6 +12,37 @@ module Fog attribute :creation_timestamp, :aliases => 'creationTimestamp' attribute :description attribute :preferred_kernel, :aliases => 'preferredKernel' + attribute :project + + def reload + requires :name + + data = {} + if project + data = service.get_image(name, project).body + elsif + [ 'google', 'debian-cloud', 'centos-cloud' ].each do |owner| + begin + data = service.get_image(name, owner).body + data[:project] = owner + rescue + end + end + end + self.merge_attributes(data) + + self + end + + def save + requires :name + + reload + end + + def resource_url + "#{self.project}/global/images/#{name}" + end end end diff --git a/lib/fog/google/requests/compute/insert_server.rb b/lib/fog/google/requests/compute/insert_server.rb index 285e35814..ee089faad 100644 --- a/lib/fog/google/requests/compute/insert_server.rb +++ b/lib/fog/google/requests/compute/insert_server.rb @@ -20,14 +20,9 @@ module Fog zone_name, machine_name, metadata, network_name=@default_network) - # We need to get the right owner for an image. - owners = [ @project, 'google', 'debian-cloud', 'centos-cloud' ] - @image_url = @api_url + "google/global/images/#{image_name}" - for owner in owners do - if self.get_image(image_name, owner).status == 200 - @image_url = @api_url + owner + "/global/images/#{image_name}" - end - end + # We don't know the owner of the image. + image = images.create({:name => image_name}) + @image_url = @api_url + image.resource_url api_method = @compute.instances.insert parameters = {