module Fog module Image class OpenStack class Real def create_image(attributes) data = { 'Content-Type'=>'application/octet-stream', 'x-image-meta-name' => attributes[:name], 'x-image-meta-disk-format' => attributes[:disk_format], 'x-image-meta-container-format' => attributes[:container_format], 'x-image-meta-size' => attributes[:size], 'x-image-meta-is-public' => attributes[:is_public], 'x-image-meta-min-ram' => attributes[:min_ram], 'x-image-meta-min-disk' => attributes[:min_disk], 'x-image-meta-checksum' => attributes[:checksum], 'x-image-meta-owner' => attributes[:owner], 'x-glance-api-copy-from' => attributes[:copy_from] }.reject { |k,v| v.nil? } body = String.new if attributes[:location] body = File.open(attributes[:location], "rb") # Make sure the image file size is always present data['x-image-meta-size'] = File.size(body) end unless attributes[:properties].nil? attributes[:properties].each do |key,value| data["x-image-meta-property-#{key}"] = value end end request( :headers => data, :body => body, :expects => 201, :method => 'POST', :path => "images" ) ensure body.close if body.respond_to?(:close) end end class Mock def create_image(attributes) response = Excon::Response.new response.status = 201 image_id = Fog::Mock.random_hex(32) image = self.data[:images][image_id] = { 'name' => attributes['name'] || attributes[:name], 'size' => Fog::Mock.random_numbers(8).to_i, 'min_disk' => 0, 'disk_format' => attributes['disk_format'] || attributes[:disk_format] || 'raw', 'created_at' => Time.now.to_s, 'container_format' => attributes['container_format'] || attributes[:container_format] || 'bare', 'deleted_at' => nil, 'updated_at' => Time.now.to_s, 'checksum' => Fog::Mock.random_hex(32), 'id' => image_id, 'deleted' => false, 'protected' => false, 'is_public' => false, 'status' => 'queued', 'min_ram' => 0, 'owner' => attributes['owner'] || attributes[:owner], 'properties' => attributes['properties'] || attributes[:properties] || {} } response.body = { 'image'=> image } response end end end end end