visor-image 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,32 +5,27 @@ require 'json'
5
5
  module Visor
6
6
  module Image
7
7
 
8
- # The API for the VISoR Meta Server. This class supports all image metadata manipulation operations.
8
+ # The API for the VISOR Meta System (VMS) server. This class supports all image metadata manipulation operations.
9
9
  #
10
- # This is the entry-point for the VISoR Image Server to communicate with the VISoR Meta Server,
11
- # here are processed and logged all the calls to the meta server coming from it.
10
+ # This is the API used by the VISOR Image System (VIS) to communicate with the VMS in order to accomplish
11
+ # metadata retrieving and registering operations.
12
12
  #
13
13
  class Meta
14
14
  include Visor::Common::Exception
15
15
 
16
- DEFAULT_HOST = '0.0.0.0'
17
- DEFAULT_PORT = 4567
16
+ attr_reader :host, :port
18
17
 
19
- attr_reader :host, :port, :ssl
20
-
21
- # Initializes a new new VISoR Meta Image.
18
+ # Initializes a new new VMS interface.
22
19
  #
23
- # @option opts [String] :host (DEFAULT_HOST) The host address where VISoR meta server resides.
24
- # @option opts [String] :port (DEFAULT_PORT) The host port where VISoR meta server resides.
25
- # @option opts [String] :ssl (false) If the connection should be made through HTTPS (SSL).
20
+ # @option opts [String] :host The host address where VMS server resides.
21
+ # @option opts [String] :port The host port where VMS server listens.
26
22
  #
27
23
  def initialize(opts = {})
28
- @host = opts[:host] || DEFAULT_HOST
29
- @port = opts[:port] || DEFAULT_PORT
30
- @ssl = opts[:ssl] || false
24
+ @host = opts[:host]
25
+ @port = opts[:port]
31
26
  end
32
27
 
33
- # Retrieves brief metadata of all public images.
28
+ # Retrieves all public and user’s private images brief metadata.
34
29
  # Options for filtering the returned results can be passed in.
35
30
  #
36
31
  # @option query [String] :<attribute_name> The image attribute value to filter returned results.
@@ -38,27 +33,18 @@ module Visor
38
33
  # @option query [String] :sort ("_id") The image attribute to sort returned results.
39
34
  # @option query [String] :dir ("asc") The direction to sort results ("asc"/"desc").
40
35
  #
41
- # @return [Array] All public images brief metadata.
42
- # Just {Visor::Meta::Backends::Base::BRIEF BRIEF} fields are returned.
36
+ # @return [Array] All images brief metadata.
37
+ # Just {Visor::Meta::Backends::Base::BRIEF BRIEF} attributes are returned.
43
38
  #
44
- # @raise [NotFound] If there are no public images registered on the server.
39
+ # @raise [NotFound] If there are no images registered on VMS.
45
40
  #
46
41
  def get_images(query = {}, owner=nil)
47
- http = request.get path: '/images', query: query.merge({access: 'public'}), head: get_headers
48
- pub = return_response(http)
49
- priv = []
50
- if owner
51
- http = request.get path: '/images', query: query.merge({access: 'private', owner: owner}), head: get_headers
52
- begin
53
- priv = return_response(http)
54
- rescue => e
55
- nil
56
- end
57
- end
58
- pub + priv
42
+ query.merge!(owner: owner) if owner
43
+ http = request.get path: '/images', query: query, head: get_headers
44
+ return_response(http)
59
45
  end
60
46
 
61
- # Retrieves detailed metadata of all public images.
47
+ # Retrieves all public and user’s private images detailed metadata.
62
48
  #
63
49
  # Filtering and querying works the same as with {#get_images}. The only difference is the number
64
50
  # of disclosed attributes.
@@ -71,59 +57,50 @@ module Visor
71
57
  # @return [Array] All public images detailed metadata.
72
58
  # The {Visor::Meta::Backends::Base::DETAIL_EXC DETAIL_EXC} fields are excluded from results.
73
59
  #
74
- # @raise [NotFound] If there are no public images registered on the server.
60
+ # @raise [NotFound] If there are no images registered on the server.
75
61
  #
76
62
  def get_images_detail(query = {}, owner=nil)
63
+ query.merge!(owner: owner) if owner
77
64
  http = request.get path: '/images/detail', query: query, head: get_headers
78
- pub = return_response(http)
79
- priv = []
80
- if owner
81
- http = request.get path: '/images/detail', query: query.merge({access: 'private', owner: owner}), head: get_headers
82
- begin
83
- priv = return_response(http)
84
- rescue => e
85
- nil
86
- end
87
- end
88
- pub + priv
65
+ return_response(http)
89
66
  end
90
67
 
91
- # Retrieves detailed image metadata of the image with the given id.
68
+ # Retrieves detailed metadata of the image with the given id.
92
69
  #
93
70
  # @param id [String] The wanted image's _id.
94
71
  #
95
- # @return [Hash] The requested image metadata.
72
+ # @return [Hash] The requested image detailed metadata.
96
73
  #
97
- # @raise [NotFound] If image not found.
74
+ # @raise [NotFound] If image metadata was not found.
98
75
  #
99
76
  def get_image(id)
100
77
  http = request.get path: "/images/#{id}", head: get_headers
101
78
  return_response(http)
102
79
  end
103
80
 
104
- # Register a new image on the server with the given metadata and returns its metadata.
81
+ # Register a new image metadata on VMS and return it.
105
82
  #
106
83
  # @param meta [Hash] The image metadata.
107
84
  #
108
- # @return [Hash] The already inserted image metadata.
85
+ # @return [Hash] The already inserted detailed image metadata.
109
86
  #
110
- # @raise [Invalid] If image meta validation fails.
87
+ # @raise [Invalid] If image metadata validation fails.
111
88
  #
112
- def post_image(meta)
89
+ def post_image(meta, address)
113
90
  body = prepare_body(meta)
114
- http = request.post path: '/images', body: body, head: post_headers
91
+ http = request.post path: '/images', body: body, head: post_headers(address)
115
92
  return_response(http)
116
93
  end
117
94
 
118
- # Updates an image record with the given metadata and returns its metadata.
95
+ # Updates an image metadata with the given metadata and returns it.
119
96
  #
120
97
  # @param id [String] The image's _id which will be updated.
121
98
  # @param meta [Hash] The image metadata.
122
99
  #
123
- # @return [Hash] The already updated image metadata.
100
+ # @return [Hash] The already updated detailed image metadata.
124
101
  #
125
102
  # @raise [Invalid] If image meta validation fails.
126
- # @raise [NotFound] If required image was not found.
103
+ # @raise [NotFound] If the target image metadata was not found.
127
104
  #
128
105
  def put_image(id, meta)
129
106
  body = prepare_body(meta)
@@ -135,9 +112,9 @@ module Visor
135
112
  #
136
113
  # @param id [String] The image's _id which will be deleted.
137
114
  #
138
- # @return [Hash] The already deleted image metadata. This is useful for recover on accidental delete.
115
+ # @return [Hash] The already deleted detailed image metadata. This is useful for recovery on accidental delete.
139
116
  #
140
- # @raise [NotFound] If required image was not found.
117
+ # @raise [NotFound] If the target image metadata was not found.
141
118
  #
142
119
  def delete_image(id)
143
120
  http = request.delete path: "/images/#{id}", head: delete_headers
@@ -160,7 +137,7 @@ module Visor
160
137
 
161
138
  # Process requests by preparing its headers, launch them and assert or raise their response.
162
139
  #
163
- # @param request [EventMachine::HttpRequest] The request which will be launched.
140
+ # @param http [EventMachine::HttpRequest] The request which will be launched.
164
141
  #
165
142
  # @return [String, Hash] If an error is raised, then it parses and returns its message,
166
143
  # otherwise it properly parse and return the response body.
@@ -171,30 +148,36 @@ module Visor
171
148
  def return_response(http)
172
149
  body = http.response
173
150
  status = http.response_header.status.to_i
174
- parsed = JSON.parse(body, symbolize_names: true)
175
151
 
176
152
  case status
153
+ when 0 then
154
+ raise InternalError, "VISOR Meta System server not found. Is it running?"
177
155
  when 404 then
178
- raise NotFound, parsed[:message]
156
+ raise NotFound, parse(body)
179
157
  when 400 then
180
- raise Invalid, parsed[:message]
158
+ raise Invalid, parse(body)
181
159
  when 500 then
182
- raise InternalError, parsed[:message]
160
+ raise InternalError, parse(body)
183
161
  else
184
- parsed[:image] || parsed[:images]
162
+ parse(body)
185
163
  end
186
164
  end
187
165
 
166
+ def parse(body)
167
+ parsed = JSON.parse(body, symbolize_names: true)
168
+ parsed[:image] || parsed[:images] || parsed[:message]
169
+ end
170
+
188
171
  # Generate a new HTTP or HTTPS connection based on initialization parameters.
189
172
  #
190
173
  # @return [EventMachine::HttpRequest] A HTTP or HTTPS (not done yet) connection ready to use.
191
174
  #
192
175
  def request
193
- if @ssl
176
+ #if @ssl
194
177
  #TODO: ssl connection
195
- else
178
+ #else
196
179
  EventMachine::HttpRequest.new("http://#{@host}:#{@port}")
197
- end
180
+ #end
198
181
  end
199
182
 
200
183
  # Fill common header keys before each request. This sets the 'User-Agent' and 'Accept'
@@ -202,18 +185,23 @@ module Visor
202
185
  # for POST and PUT requests.
203
186
  #
204
187
  def get_headers
205
- {'User-Agent' => 'VISoR Image Server',
188
+ {'User-Agent' => 'VISOR Image System',
206
189
  'Accept' => 'application/json'}
207
190
  end
208
191
 
209
- def post_headers
210
- {'User-Agent' => 'VISoR Image Server',
192
+ def put_headers
193
+ {'User-Agent' => "VISOR Image System",
194
+ 'Accept' => 'application/json',
195
+ 'content-type' => 'application/json'}
196
+ end
197
+
198
+ def post_headers(address)
199
+ {'User-Agent' => "VISOR Image System - #{address}",
211
200
  'Accept' => 'application/json',
212
201
  'content-type' => 'application/json'}
213
202
  end
214
203
 
215
204
  alias :delete_headers :get_headers
216
- alias :put_headers :post_headers
217
205
  end
218
206
  end
219
207
  end
@@ -28,6 +28,8 @@ module Visor
28
28
  exit_error(403, e.message)
29
29
  rescue NotFound => e
30
30
  exit_error(404, e.message)
31
+ rescue InternalError => e
32
+ exit_error(503, e.message)
31
33
  end
32
34
 
33
35
  def exit_error(code, message)
@@ -41,6 +41,8 @@ module Visor
41
41
  exit_error(403, e.message)
42
42
  rescue NotFound => e
43
43
  exit_error(404, e.message)
44
+ rescue InternalError => e
45
+ exit_error(503, e.message)
44
46
  else
45
47
  [200, {}, {image: meta}]
46
48
  end
@@ -38,6 +38,8 @@ module Visor
38
38
  return exit_error(403, e.message)
39
39
  rescue NotFound => e
40
40
  return exit_error(404, e.message)
41
+ rescue InternalError => e
42
+ exit_error(503, e.message)
41
43
  end
42
44
 
43
45
  custom = {'Content-Type' => 'application/octet-stream', 'X-Stream' => 'Goliath'}
@@ -30,11 +30,14 @@ module Visor
30
30
  def response(env)
31
31
  access_key = authorize(env, vas)
32
32
  meta = vms.get_images(params, access_key)
33
+ env.params.delete('format')
33
34
  [200, {}, {images: meta}]
34
35
  rescue Forbidden => e
35
36
  exit_error(403, e.message)
36
37
  rescue NotFound => e
37
38
  exit_error(404, e.message)
39
+ rescue InternalError => e
40
+ exit_error(503, e.message)
38
41
  end
39
42
 
40
43
  # Produce an HTTP response with an error code and message.
@@ -30,11 +30,14 @@ module Visor
30
30
  def response(env)
31
31
  access_key = authorize(env, vas)
32
32
  meta = vms.get_images_detail(params, access_key)
33
+ env.params.delete('format')
33
34
  [200, {}, {images: meta}]
34
35
  rescue Forbidden => e
35
36
  exit_error(403, e.message)
36
37
  rescue NotFound => e
37
38
  exit_error(404, e.message)
39
+ rescue InternalError => e
40
+ exit_error(503, e.message)
38
41
  end
39
42
 
40
43
  # Produce an HTTP response with an error code and message.
@@ -32,6 +32,8 @@ module Visor
32
32
  exit_error(403, e.message)
33
33
  rescue NotFound => e
34
34
  exit_error(404, e.message)
35
+ rescue InternalError => e
36
+ exit_error(503, e.message)
35
37
  end
36
38
 
37
39
  # Produce an HTTP response with an error code and message.
@@ -74,7 +74,7 @@ module Visor
74
74
  rescue InternalError => e
75
75
  body.close if body
76
76
  body.unlink if body
77
- return exit_error(500, e.message)
77
+ return exit_error(503, e.message)
78
78
  end
79
79
 
80
80
  # if has body(image file), upload file and update meta or raise on error
@@ -86,6 +86,8 @@ module Visor
86
86
  return exit_error(404, e.message, true)
87
87
  rescue Duplicated => e
88
88
  return exit_error(409, e.message, true)
89
+ rescue InternalError => e
90
+ return exit_error(503, e.message, true)
89
91
  ensure
90
92
  body.close
91
93
  body.unlink
@@ -127,7 +129,7 @@ module Visor
127
129
  # @return [Hash] The already inserted image metadata.
128
130
  #
129
131
  def insert_meta(meta)
130
- image = vms.post_image(meta)
132
+ image = vms.post_image(meta, address)
131
133
  env['id'] = image[:_id]
132
134
 
133
135
  if image[:location]
@@ -82,7 +82,7 @@ module Visor
82
82
  rescue InternalError => e
83
83
  body.close if body
84
84
  body.unlink if body
85
- return exit_error(500, e.message)
85
+ return exit_error(503, e.message)
86
86
  end unless meta.empty?
87
87
 
88
88
  # if has body(image file), upload file and update meta or raise on error
@@ -96,6 +96,8 @@ module Visor
96
96
  return exit_error(409, e.message)
97
97
  rescue Duplicated => e
98
98
  return exit_error(409, e.message, true)
99
+ rescue InternalError => e
100
+ return exit_error(503, e.message, true)
99
101
  ensure
100
102
  body.close
101
103
  body.unlink
@@ -5,33 +5,35 @@ require 'json'
5
5
  module Visor
6
6
  module Image
7
7
 
8
- # The VISoR Image Server. This supports all image metadata manipulation
9
- # operations, dispatched to the VISoR Meta Server and the image files storage operations.
8
+ # The VISOR Image System (VIS) server. This server is the VISOR front-end and supports all image metadata manipulation
9
+ # operations (dispatched to the VISOR Meta System) and the image files management too.
10
10
  #
11
- # *The Server API is a RESTful web service for image meta as follows:*
11
+ # **The Server is a RESTful Web service with the following API:**
12
12
  #
13
- # HEAD /images/<id> - Returns metadata about the image with the given id
14
- # GET /images - Returns a set of brief metadata about all public images
15
- # GET /images/detail - Returns a set of detailed metadata about all public images
16
- # GET /images/<id> - Returns image data and metadata for the image with the given id
17
- # POST /images - Stores a new image data and metadata and returns the registered metadata
18
- # PUT /images/<id> - Update image metadata and/or data for the image with the given id
19
- # DELETE /images/<id> - Delete the metadata and data of the image with the given id
13
+ # HEAD /images/<id> - Return detailed metadata of a given image.
14
+ # GET /images - Return brief metadata of all public and user’s private images.
15
+ # GET /images/detail - Return detailed metadata of all public and user’s private images.
16
+ # GET /images/<id> - Return the metadata and file of a given image.
17
+ # POST /images - Add new metadata and optionally upload a file.
18
+ # PUT /images/<id> - Update the metadata and/or file of a given image.
19
+ # DELETE /images/<id> - Remove the metadata and file of a given image.
20
20
  #
21
- # The Image is multi-format, most properly it supports response encoding in JSON and XML formats.
21
+ # The VIS API is multi-format, most properly it supports response encoding in JSON and XML formats.
22
22
  # It will auto negotiate and encode the response metadata and error messages in the proper format,
23
23
  # based on the request *Accept* header, being it 'application/json' or 'application/xml'.
24
24
  # If no Accept header is provided, Image will encode and render it as JSON by default.
25
25
  #
26
- # This server routes all metadata operations to the {Visor::Meta::Server Visor Meta Server}.
26
+ # This server routes all metadata operations to the {Visor::Meta::Server Visor Meta System server}.
27
27
  #
28
28
  # The server will interact with the multiple supported backend store to manage the image files.
29
29
  #
30
- # *Currently we support the following store backend and operations:*
30
+ # **Currently we support the following store backend and operations:**
31
31
  #
32
32
  # Amazon Simple Storage (s3) - GET, POST, PUT, DELETE
33
+ # Lunacloud Storage (lcs) - GET, POST, PUT, DELETE
33
34
  # Nimbus Cumulus (cumulus) - GET, POST, PUT, DELETE
34
35
  # Eucalyptus Walrus (walrus) - GET, POST, PUT, DELETE
36
+ # Hadoop HDFS (hdfs) - GET, POST, PUT, DELETE
35
37
  # Local Filesystem (file) - GET, POST, PUT, DELETE
36
38
  # Remote HTTP (http) - GET
37
39
  #
@@ -57,26 +59,34 @@ module Visor
57
59
  #
58
60
  # The image metadata is promptly passed as a set of HTTP headers, as the following example:
59
61
  #
60
- # x-image-meta-_id: <id>
61
- # x-image-meta-uri: <uri>
62
- # x-image-meta-name: <name>
63
- # x-image-meta-architecture: <architecture>
64
- # x-image-meta-access: <access>
65
- # x-image-meta-status: <status>
66
- # x-image-meta-created_at: <timestamp>
62
+ # x-image-meta-_id: <id>
63
+ # x-image-meta-uri: <uri>
64
+ # x-image-meta-name: <name>
65
+ # x-image-meta-architecture: <architecture>
66
+ # x-image-meta-access: <access>
67
+ # x-image-meta-status: <status>
68
+ # x-image-meta-size: <size>
69
+ # x-image-meta-format: <format>
70
+ # x-image-meta-store: <store>
71
+ # x-image-meta-location: <location>
72
+ # x-image-meta-created_at: <timestamp>
73
+ # x-image-meta-updated_at: <timestamp>
74
+ # x-image-meta-checksum: <checksum>
75
+ # x-image-meta-owner: <owner>
67
76
  #
68
- # @note Undefined attributes are ignored and not included into response's header. Also
69
- # any raised error will be passed through HTTP headers as expected.
77
+ # @note Undefined attributes are ignored and not included into response's header.
78
+ # Any raised error will be passed through HTTP headers too.
70
79
  #
71
80
  # @param [String] id The wanted image _id.
72
81
  #
73
82
  # @example Retrieve the image metadata with id '19b39ed6-6c43-41cc-8d59-d1a1ed24ac9d':
74
83
  # 'HEAD /images/19b39ed6-6c43-41cc-8d59-d1a1ed24ac9d'
75
84
  #
76
- # @return [HTTP Headers] The image data file.
85
+ # @return [HTTP Headers] The image metadata.
77
86
  #
78
- # @raise [HTTP Error 404] If image not found.
79
- # @raise [HTTP Error 500] On internal server error.
87
+ # @raise [HTTP Error 403] If user authentication has failed.
88
+ # @raise [HTTP Error 404] If image metadata was not found.
89
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
80
90
  #
81
91
  head '/images/:id', HeadImage
82
92
 
@@ -84,20 +94,18 @@ module Visor
84
94
  # @method get_all_brief
85
95
  # @overload get '/images'
86
96
  #
87
- # Get brief information about all public images, see {Visor::Image::GetImages}.
97
+ # Get brief metadata of all public and user’s private images, see {Visor::Image::GetImages}.
88
98
  #
89
99
  # { "images":
90
100
  # [
91
101
  # {
92
102
  # "_id":<_id>,
93
- # "uri":<uri>,
94
103
  # "name":<name>,
95
104
  # "architecture":<architecture>,
96
- # "type":<type>,
105
+ # "access":<access>
97
106
  # "format":<format>,
98
- # "store":<type>,
99
107
  # "size":<size>,
100
- # "created_at":<timestamp>
108
+ # "store":<store>
101
109
  # },
102
110
  # ...
103
111
  # ]
@@ -110,19 +118,20 @@ module Visor
110
118
  # @param [String] sort ("_id") The image attribute to sort results.
111
119
  # @param [String] dir ("asc") The sorting order ("asc"/"desc").
112
120
  #
113
- # @example Retrieve all public images brief metadata:
121
+ # @example Retrieve all images brief metadata:
114
122
  # 'GET /images'
115
123
  #
116
- # @example Retrieve all public `x86_64` images brief metadata:
124
+ # @example Retrieve all `x86_64` images brief metadata:
117
125
  # 'GET /images?architecture=x86_64'
118
126
  #
119
- # @example Retrieve all public `.iso` images brief metadata, descending sorted by `size`:
127
+ # @example Retrieve all `.iso` images brief metadata, descending sorted by `size`:
120
128
  # 'GET /images?format=iso&sort=size&dir=desc'
121
129
  #
122
- # @return [JSON, XML] The public images brief metadata.
130
+ # @return [JSON, XML] Images brief metadata.
123
131
  #
124
- # @raise [HTTP Error 404] If there is no public images.
125
- # @raise [HTTP Error 500] On internal server error.
132
+ # @raise [HTTP Error 403] If user authentication has failed.
133
+ # @raise [HTTP Error 404] If no images were found.
134
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
126
135
  #
127
136
  get '/images', GetImages
128
137
 
@@ -130,7 +139,7 @@ module Visor
130
139
  # @method get_all_detail
131
140
  # @overload get '/images/detail'
132
141
  #
133
- # Get detailed information about all public images, see {Visor::Image::GetImagesDetail}.
142
+ # Get detailed metadata of all public and user’s private images, see {Visor::Image::GetImagesDetail}.
134
143
  #
135
144
  # { "images":
136
145
  # [
@@ -147,8 +156,8 @@ module Visor
147
156
  # "store":<store>,
148
157
  # "created_at":<timestamp>
149
158
  # "updated_at":<timestamp>,
150
- # "kernel":<associated kernel>,
151
- # "ramdisk":<associated ramdisk>,
159
+ # "checksum":<checksum>,
160
+ # "owner":<owner>,
152
161
  # },
153
162
  # ...
154
163
  # ]
@@ -161,15 +170,16 @@ module Visor
161
170
  # @param [String] sort ("_id") The image attribute to sort results.
162
171
  # @param [String] dir ("asc") The sorting order ("asc"/"desc").
163
172
  #
164
- # @example Retrieve all public images detailed metadata:
173
+ # @example Retrieve all images detailed metadata:
165
174
  # 'GET /images/detail'
166
175
  #
167
- # @note Querying and ordering results are made as with #get_all_detail
176
+ # @note Querying and results sorting is made as with #get_all_brief
168
177
  #
169
- # @return [JSON, XML] The public images detailed metadata.
178
+ # @return [JSON, XML] Images detailed metadata.
170
179
  #
171
- # @raise [HTTP Error 404] If there is no public images.
172
- # @raise [HTTP Error 500] On internal server error.
180
+ # @raise [HTTP Error 403] If user authentication has failed.
181
+ # @raise [HTTP Error 404] If no images were found.
182
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
173
183
  #
174
184
  get '/images/detail', GetImagesDetail
175
185
 
@@ -177,21 +187,28 @@ module Visor
177
187
  # @method get_image
178
188
  # @overload get '/images/:id'
179
189
  #
180
- # Get image data and detailed metadata for the given id, see {Visor::Image::GetImage}.
190
+ # Get detailed metadata and file for the image with given id, see {Visor::Image::GetImage}.
181
191
  #
182
- # The image data file is streamed as response's body. The server will return a 200 status code,
192
+ # The image data file is streamed through the response body. The server will return a 200 status code,
183
193
  # with a special HTTP header, indicating that the response body will be streamed in chunks
184
194
  # and connection shouldn't be closed until the transfer is complete.
185
195
  #
186
196
  # Also, the image metadata is promptly passed as a set of HTTP headers, as the following example:
187
197
  #
188
- # x-image-meta-_id: <id>
189
- # x-image-meta-uri: <uri>
190
- # x-image-meta-name: <name>
191
- # x-image-meta-architecture: <architecture>
192
- # x-image-meta-access: <access>
193
- # x-image-meta-status: <status>
194
- # x-image-meta-created_at: <timestamp>
198
+ # x-image-meta-_id: <id>
199
+ # x-image-meta-uri: <uri>
200
+ # x-image-meta-name: <name>
201
+ # x-image-meta-architecture: <architecture>
202
+ # x-image-meta-access: <access>
203
+ # x-image-meta-status: <status>
204
+ # x-image-meta-size: <size>
205
+ # x-image-meta-format: <format>
206
+ # x-image-meta-store: <store>
207
+ # x-image-meta-location: <location>
208
+ # x-image-meta-created_at: <timestamp>
209
+ # x-image-meta-updated_at: <timestamp>
210
+ # x-image-meta-checksum: <checksum>
211
+ # x-image-meta-owner: <owner>
195
212
  #
196
213
  # @note Undefined attributes are ignored and not included into response's header.
197
214
  #
@@ -200,11 +217,13 @@ module Visor
200
217
  # @example Retrieve the image with id '19b39ed6-6c43-41cc-8d59-d1a1ed24ac9d':
201
218
  # 'GET /images/19b39ed6-6c43-41cc-8d59-d1a1ed24ac9d'
202
219
  #
203
- # @return [HTTP Headers] The image data file.
204
- # @return [HTTP Body] The image data file.
220
+ # @return [HTTP Headers] The image metadata.
221
+ # @return [HTTP Body] The image file.
205
222
  #
206
- # @raise [HTTP Error 404] If image not found.
207
- # @raise [HTTP Error 500] On internal server error.
223
+ # @raise [HTTP Error 403] If user authentication has failed.
224
+ # @raise [HTTP Error 404] If the image metadata was not found.
225
+ # @raise [HTTP Error 404] If the image file was not found.
226
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
208
227
  #
209
228
  get '/images/:id', GetImage
210
229
 
@@ -222,8 +241,8 @@ module Visor
222
241
  #
223
242
  # If wanted, the image data file should be streamed through the request body.
224
243
  # The server will receive that data in chunks, buffering them to a properly secured temporary
225
- # file, avoiding buffering all the data into memory. Server will then handle the upload of that
226
- # data to the definitive store location, cleaning then the generated temporary file.
244
+ # file, avoiding buffering all the data into memory. The server will then handle the upload of that
245
+ # file to the definitive store location, cleaning then the generated temporary file.
227
246
  #
228
247
  # Alternatively, a *x-image-meta-location* header can be passed, if the file is already stored in some
229
248
  # provided location. If this header is present, no body content can be passed in the request.
@@ -234,9 +253,10 @@ module Visor
234
253
  # @raise [HTTP Error 400] If the location header is present no file content can be provided.
235
254
  # @raise [HTTP Error 400] If trying to post an image file to a HTTP backend.
236
255
  # @raise [HTTP Error 400] If provided store is an unsupported store backend.
237
- # @raise [HTTP Error 404] If no image data is found at the provided location.
256
+ # @raise [HTTP Error 403] If user authentication has failed.
257
+ # @raise [HTTP Error 404] If no image file is found at the provided location.
238
258
  # @raise [HTTP Error 409] If the provided image file already exists in the backend store.
239
- # @raise [HTTP Error 500] On internal server error.
259
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
240
260
  #
241
261
  post '/images', PostImage
242
262
 
@@ -269,10 +289,11 @@ module Visor
269
289
  # @raise [HTTP Error 400] If the location header is present no file content can be provided.
270
290
  # @raise [HTTP Error 400] If trying to post an image file to a HTTP backend.
271
291
  # @raise [HTTP Error 400] If provided store is an unsupported store backend.
292
+ # @raise [HTTP Error 403] If user authentication has failed.
272
293
  # @raise [HTTP Error 404] If no image data is found at the provided location.
273
294
  # @raise [HTTP Error 409] If trying to assign image file to a locked or uploading image.
274
295
  # @raise [HTTP Error 409] If the provided image file already exists in the backend store.
275
- # @raise [HTTP Error 500] On internal server error.
296
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
276
297
  #
277
298
  put '/images/:id', PutImage
278
299
 
@@ -280,7 +301,7 @@ module Visor
280
301
  # @method delete
281
302
  # @overload delete '/images/:id'
282
303
  #
283
- # Delete the metadata and data of the image with the given id, see {Visor::Image::DeleteImage}.
304
+ # Delete the metadata and file of the image with the given id, see {Visor::Image::DeleteImage}.
284
305
  #
285
306
  # @param [String] id The image _id to delete.
286
307
  #
@@ -289,9 +310,10 @@ module Visor
289
310
  #
290
311
  # @return [JSON, XML] The already deleted image detailed metadata.
291
312
  #
292
- # @raise [HTTP Error 404] If image meta or data not found.
313
+ # @raise [HTTP Error 403] If user authentication has failed.
293
314
  # @raise [HTTP Error 403] If user does not have permission to manipulate the image file.
294
- # @raise [HTTP Error 500] On internal server error.
315
+ # @raise [HTTP Error 404] If image metadata was not found.
316
+ # @raise [HTTP Error 503] If VIS or VAS servers were not found.
295
317
  #
296
318
  delete '/images/:id', DeleteImage
297
319