[openstack-dev] [nova] [glance] Getting the ball rolling on glance v2 in nova in newton cycle

Monty Taylor mordred at inaugust.com
Fri Apr 1 14:08:05 UTC 2016

On 04/01/2016 08:45 AM, Sean Dague wrote:
> The glance v2 work is currently blocked as there is no active spec,
> would be great if someone from the glance team could get that rolling again.
> I started digging back through the patches in detail to figure out if
> there are some infrastructure bits we could get in early regardless.
> #1 - new methods for glance xenserver plugin
> Let's take a simplified approach on this patch -
> https://review.openstack.org/#/c/266933 and only change the
> xenapi/etc/xapi.d/plugins/ content in the following ways.
> - add upload/download_vhd_glance2 methods. Don't add an api parameter.
> Add these methods mostly via copy/paste as we're optimizing for deleting
> v1 not for fixing v1.
> That will put some infrastructure in place so we can just call the v2
> actions based on decision from higher up the stack.
> #2 - move discover major version back to glanceclient -
> https://github.com/openstack/nova/blob/3cdaa30566c17a2add5d9163a0693c97dc1d065b/nova/image/glance.py#L108
> I don't understand why this was ever in nova. This really should be
> glanceclient.discover... something. It uses internal methods from
> glanceclient and internal structures of the content returned.

FWIW, I use:

from glanceclient.common import utils as glance_utils
endpoint, detected_version = glance_utils.strip_version(endpoint)

To part of trying to figure this out as a consumer. Of course, that's 
partially because like most of the openstack clients, there is no 
exposed API for querying versions, since you have to tell the 
constructor what major version you want to construct.

> Catching, if desired, should also be on the glanceclient side.
> glanceclient.reset_version() could exist to clear any caching.
> #3 - Ideally we'd also have a
> client = glanceclient.AutoClient(endpoint, ... ) which basically does
> glanceclient.discover and returns us the right client automatically.
> client.version provides access to the version information if you need to
> figure out what version of a client you have.

You should just do:

import os_client_config

client = os_client_config.legacy_client('image') since all of that work 
is pretty much already done.

If glanceclient grows the ability to be used without a priori knowledge 
of the version, I'll certainly start to use it  there.

> This starts to get to a point where the parts of versioning that
> glanceclient should know about are in glanceclient, and when nova still
> needs to know things it can as for client.version.
> For instance make _extract_query_params -
> https://github.com/openstack/nova/blob/3cdaa30566c17a2add5d9163a0693c97dc1d065b/nova/image/glance.py#L448
> become and instance method that can
> if self._client.version >= 2:
>     ...
> else:
>     ...
> This isn't the whole story to get us home, however chunking up some of
> these pieces I think makes getting the rest of the story in much
> simpler. In nearly every case (except for the alt link in the image
> view) we can easily have access to a real glance client. And the code
> will be a ton easier to understand with some of the glanceclient
> specific details behind the glanceclient interface.
> 	-Sean

More information about the OpenStack-dev mailing list