[openstack-dev] [glance]'Add' capability to the HTTP store
Jordan Pittier
jordan.pittier at scality.com
Tue Feb 17 12:06:39 UTC 2015
Jay, Flavio, thanks for this interesting discussion. I get your points and
they really make sense to me.
I'll go for a specific driver that will inherits from the HTTP Store for
the read path and implements the write path.
Jordan
On Tue, Feb 17, 2015 at 12:52 PM, Flavio Percoco <flavio at redhat.com> wrote:
> On 13/02/15 17:01 +0100, Jordan Pittier wrote:
>
>> Humm this doesn't have to be complicated, for a start.
>>
>>
> Sorry for my late reply
>
> - Figuring out the http method the server expects (POST/PUT)
>>>
>> Yeah, I agree. There"s no definitive answer to this but I think PUT makes
>> sense
>> here. I googled 'post vs put' and I found that the "idempotent" and "who
>> is in
>> charge of the actual resource location choice" (the client vs the server),
>> favors PUT.
>>
>
> Right but that's not what the remote server may be expecting. One of
> the problems about the HTTP store is that there's not real "API"
> besides what the HTTP protocol allows you to do. That is to say that a
> remote server may accept POST/PUT and in order to keep the
> implementation non-opinionated, you'd need to have a way for these
> things to be specified.
>
>
>> - Adding support for at least few HTTP auth methods
>>>
>> Why should the "write" path be more secured/more flexible than the read
>> path ?
>> If I take a look at the current HTTP store, only basic auth is supported
>> (ie
>> http://user:pass@server1/myLinuxImage). I suggest the write path (ie the
>> add()
>> method) should support the same auth mecanism. The cloud admin could also
>> add
>> some firewall rules to make sure the HTTP backend server can only be
>> accessed
>> by the Glance-api servers.
>>
>
> I didn't say the read path was correct :P
>
> That said, I agree that we should keep both paths consistent.
>
> - Having a sufixed URL where we're sure glance will have proper
>>> permissions to upload data.
>>>
>> That's up the the cloud admin/operator to make it work. The HTTP
>> glance_store
>> could have 2 config flags :
>> a) "http_server", a string with the scheme (http vs https) and the
>> hostname of
>> the HTTP server, ie 'http://server1'
>> b) "path_prefix". A string that will prefix the "path" part of the image
>> URL.
>> This config flag could be left empty/is optional.
>>
>
> Yes, it was probably not clear from my previous email that these were
> not "ands" but things that would need to be brought up.
>
>
>> Handling HTTP responses from the server
>>>
>> That's of course to be discussed. But, IMO, this should be as simple as
>> "if
>> response.code is 200 or 202 then OKAY else raise GlanceStoreException". I
>> am
>> not sure any other glance store is more "granular" than this.
>>
>
> Again, this assumes "too much" from the server. So, either we impose
> some kind of rules as to how Glance expects the HTTP server to behave
> or we try to be bullet proof API-wise.
>
> How can we handle quota?
>>>
>> I am new to glance_store, is there a notion of quotas in glance stores ? I
>> though Glance (API) was handling this. What kind of quotas are we talking
>> about
>> here ?
>>
>
> Glance handles quotas. The problem is that when the data is sent to
> the remote store, glance looses some control on it. A user may upload
> some data, the HTTP push could fail and we may try to delete the data
> without any proof that it will be correctly deleted.
>
> Also, without auth, we will have to force the user to send all image
> data through glance. The reason is that we don't know whether the HTTP
> store has support for HEAD to report the image size when using
> `--location`.
>
> Sorry if all the above sounds confusing. The problem with the HTTP
> store is that we have basically no control over it and that is
> worrisome from a security and implementation perspective.
>
> Flavio
>
>
> Frankly, it shouldn't add that much code. I feel we can make it clean if
>> we
>> leverage the different Python modules (httplib etc.)
>>
>> Regards,
>> Jordan
>>
>>
>> On Fri, Feb 13, 2015 at 4:20 PM, Flavio Percoco <flavio at redhat.com>
>> wrote:
>>
>> On 13/02/15 16:01 +0100, Jordan Pittier wrote:
>>
>> What is the difference between just calling the Glance API to
>> upload an image,
>>
>> versus adding add() functionality to the HTTP image store?
>> You mean using "glance image-create --location http://server1/
>> myLinuxImage [..]
>> " ? If so, I guess adding the add() functionality will save the
>> user
>> from
>> having to find the right POST curl/wget command to properly upload
>> his
>> image.
>>
>>
>> I believe it's more complex than this. Having an `add` method for the
>> HTTP store implies:
>>
>> - Figuring out the http method the server expects (POST/PUT)
>> - Adding support for at least few HTTP auth methods
>> - Having a sufixed URL where we're sure glance will have proper
>> permissions to upload data.
>> - Handling HTTP responses from the server w.r.t the status of the data
>> upload. For example: What happens if the remote http server runs out
>> of space? What's the response status going to be like? How can we
>> make glance agnostic to these discrepancies across HTTP servers so
>> that it's consistent in its responses to glance users?
>> - How can we handle quota?
>>
>> I'm not fully opposed, although it sounds like not worth it code-wise,
>> maintenance-wise and performance-wise. The user will have to run just
>> 1 command but at the cost of all of the above.
>>
>> Do the points listed above make sense to you?
>>
>> Cheers,
>> Flavio
>>
>>
>>
>>
>> On Fri, Feb 13, 2015 at 3:55 PM, Jay Pipes <jaypipes at gmail.com>
>> wrote:
>>
>> On 02/13/2015 09:47 AM, Jordan Pittier wrote:
>> Hi list,
>>
>> I would like to add the 'add' capability to the HTTP glance
>> store.
>>
>> Let's say I (as an operator or cloud admin) provide an HTTP
>> server
>> where
>> (authenticated/trusted) users/clients can make the following
>> HTTP
>> request :
>>
>> POST http://server1/myLinuxImage HTTP/1.1
>> Host: server1
>> Content-Length: 256000000
>> Content-Type: application/octet-stream
>>
>> mybinarydata[..]
>>
>> Then the HTTP server will store the binary data, somewhere
>> (for
>> instance
>> locally), some how (for instance in a plain file), so that
>> the
>> data is
>> later on accessible by a simple GET
>> http://server1/myLinuxImage
>>
>> In that case, this HTTP server could easily be a full
>> fleshed
>> Glance
>> store.
>>
>> Questions :
>> 1) Has this been already discussed/proposed ? If so, could
>> someone give
>> me a pointer to this work ?
>> 2) Can I start working on this ? (the 2 main work items are
>> :
>> 'add an
>> add method to glance_store._drivers.http.__Store' and 'add
>> a
>> delete
>> method to glance_store._drivers.http.__Store (HTTP DELETE
>> method)'
>>
>>
>> What is the difference between just calling the Glance API to
>> upload
>> an
>> image, versus adding add() functionality to the HTTP image
>> store?
>>
>> Best,
>> -jay
>>
>>
>> ___________________________________________________________
>> _______________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?
>> subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/
>> openstack-dev
>>
>>
>>
>>
>> ____________________________________________________________
>> ______________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?
>> subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>> --
>> @flaper87
>> Flavio Percoco
>> ____________________________________________________________
>> ______________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:
>> unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>>
> ____________________________________________________________
>> ______________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:
>> unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>
>
> --
> @flaper87
> Flavio Percoco
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150217/22361707/attachment.html>
More information about the OpenStack-dev
mailing list