[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