[openstack-dev] Questions regarding image "location" and glanceclient behaviour ...

Public Mail kpublicmail at gmail.com
Wed Jan 22 09:05:57 UTC 2014

Hi All,

    I have two questions ...

    1) Glance v1 APIs can take a --location argument when creating an image
       but v2 APIs can't - bug or feature? (Details below)

    2) How should glanceclient (v2 commands) handle reserved attributes?
        a) status quo: (Apparently) let the user set them but the server
           will return "attribute is reserved" error.  Pros: No missing
           functionality, no damage done.  Cons: Bad usability.
        b) hard-code list of reserved attributes in client and don't expose
           them to the user.
            Pros: quick to implement.
            Cons: Need to track reserved attributes in server
        c) get-reserved words from schema downloaded from server (and don't
           expose them to the user).
            Pros: Don't need to track server implmentation.
            Cons: Complex - reserved words can vary from command to

      I personally favor (b) on the grounds that a client implementation
      needs to closely understand server behaviour anyway so the sync-ing
      of reserved attributes shouldn't be a big problem (*provided* the
      list of reserved attributes is made available in the reference
      documentation which doesn't seem to be the case currently).

So what does everybody think?

When using glance client's v1 interface I can image-create an image and
specify the image file's location via the --location parameter.
Alternatively I can image-create an empty image and then image-update the
image's location to some url.

However, when using the client's v2 commands I can neither image-create the
file using the --location parameter, nor image-update the file later.

When using image-create with --location, the client gives the following
error (printed by warlock):

  Unable to set 'locations' to '[u'']'

This is because the schema dictates that the location should be an object
of the form [{"url": "string", "metadata": object}, ...] but there is no
way to specify such an object from the command line - I cannot specify a
string like '{"url": "", "metadata": {}}' for there is
no conversion from command line strings to python dicts nor is there any
conversion from a simple URL string to a suitable location object.

If I modify glanceclient.v2.images.Controller.create to convert the
locations parameter from a URL string to the desired object then the
request goes through to the glance server where it fails with a 403 error
(Attribute 'locations' is reserved).

So is this discrepancy between V1 & V2 deliberate (a feature :)) or is it a

More information about the OpenStack-dev mailing list