Do you get the same "300, Multiple choices" response back if you change
ex_force_base_url to http://%s:8774/v2.0? If so, then it seems like an
OpenStack bug because the documentation states that the version can be
provided in the URL.

Giving more information on which OpenStack version you are using would also
be helpful.

In any case, I will try to get devstack working locally and reproduce this
problem myself.

On Thu, Feb 16, 2012 at 8:20 PM, Jay Doane <j...@almery.com> wrote:

> If I change ex_force_base_url='http://%s:8774/v2.0' % STACK_HOST then I
> get
> the same TypeError as before.
>
> However, if I change ex_force_base_url='http://%s:8774/v2' % STACK_HOST
> (note the lack of ".0"), I get the following 404:
>
> $ LIBCLOUD_DEBUG=/dev/stderr python stack_demo.py
> /Users/jay/Library/Python/2.6/site-packages/Crypto/Util/randpool.py:40:
> RandomPool_DeprecationWarning: This application uses RandomPool, which is
> BROKEN in older releases.  See http://www.pycrypto.org/randpool-broken
>  RandomPool_DeprecationWarning)
> # -------- begin 19425200 request ----------
> curl -i -X POST -H 'Host: 50.56.213.226:5000' -H 'Accept-Encoding:
> gzip,deflate' -H 'X-LC-Request-ID: 19425200' -H 'Content-Type:
> application/json; charset=UTF-8' -H 'Content-Length: 79' -H 'Accept:
> application/json' -H 'User-Agent: libcloud/0.8.0 (OpenStack)' --data-binary
> '{"auth": {"passwordCredentials": {"username": "demo", "password":
> "password"}}}' --compress https://50.56.213.226:5000/v2.0/tokens/
> # -------- begin 19425200:19425360 response ----------
> HTTP/1.1 200 OK
> Date: Fri, 17 Feb 2012 04:17:13 GMT
> Content-Type: application/json; charset=UTF-8
> Content-Length: 772
> Vary: X-Auth-Token
>
> {"access": {"token": {"expires": "2012-02-17T18:11:39", "id":
> "2977320b-56d9-47a9-9c38-4a5b2b0ac8c9"}, "serviceCatalog": [{"endpoints":
> [{"id": "2", "region": "RegionOne", "internalURL": "
> http://50.56.213.226:8773/services/Cloud";, "publicURL": "
> http://50.56.213.226:8773/services/Cloud"}], "type": "ec2", "name":
> "ec2"},
> {"endpoints": [{"id": "3", "region": "RegionOne", "internalURL": "
> http://50.56.213.226:9292/v1";, "publicURL": "http://50.56.213.226:9292/v1
> "}],
> "type": "image", "name": "glance"}, {"endpoints": [{"id": "4", "region":
> "RegionOne", "internalURL": "http://50.56.213.226:5000/v2.0";,
> "publicURL": "
> http://50.56.213.226:5000/v2.0"}], "type": "identity", "name":
> "keystone"}], "user": {"id": "a438ea90e1da43e4b895874fdaf83a2d", "roles":
> [], "name": "demo"}}}
> # -------- end 19425200:19425360 response ----------
>
> # -------- begin 19425200 request ----------
> curl -i -X GET -H 'Host: 50.56.213.226:8774' -H 'X-LC-Request-ID:
> 19425200'
> -H 'Accept-Encoding: gzip,deflate' -H 'X-Auth-Token:
> 2977320b-56d9-47a9-9c38-4a5b2b0ac8c9' -H 'Content-Length: 0' -H 'Accept:
> application/json' -H 'User-Agent: libcloud/0.8.0 (OpenStack)' --compress '
> https://50.56.213.226:8774/v2/images/detail?cache-busting=786c8c85d9f54028
> '
> # -------- begin 19425200:19295648 response ----------
> HTTP/1.1 404 Not Found
> Date: Fri, 17 Feb 2012 04:17:13 GMT
> Content-Length: 52
> Content-Type: text/plain; charset=UTF-8
>
> 404 Not Found
>
> The resource could not be found.
>
>
> # -------- end 19425200:19295648 response ----------
>
> Traceback (most recent call last):
>  File "stack_demo.py", line 17, in <module>
>    print driver.list_images()
>  File
>
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> line 209, in list_images
>    return self._to_images(self.connection.request('/images/detail')
>  File
>
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> line 151, in request
>    method=method, headers=headers)
>  File
> "/Users/jay/proj/genforma/libcloud.git/libcloud/common/openstack.py", line
> 328, in request
>    return super(OpenStackBaseConnection, self).request(**kwargs)
>  File "/Users/jay/proj/genforma/libcloud.git/libcloud/common/base.py",
> line 564, in request
>    connection=self)
>  File
>
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> line 774, in __init__
>    super(OpenStack_1_1_Response, self).__init__(*args, **kwargs)
>  File "/Users/jay/proj/genforma/libcloud.git/libcloud/common/base.py",
> line 77, in __init__
>    raise Exception(self.parse_error())
> Exception: 404 Not Found 404 Not Found
>
> The resource could not be found.
>
> 2012/2/16 Tomaž Muraus <to...@apache.org>
>
> > It looks like you are missing an API version in the URL.
> >
> > Please change the ex_force_base_url='http://%s:8774' % STACK_HOST
> > to ex_force_base_url='http://%s:8774/v2.0' % STACK_HOST
> >
> > Let us know if this solves your problem.
> >
> > On Thu, Feb 16, 2012 at 7:17 PM, Jay Doane <j...@almery.com> wrote:
> >
> > > 2012/2/16 Tomaž Muraus <to...@apache.org>
> > >
> > > >
> > > > In any case, it does look like an auth API issue. I have merged
> Brad's
> > > Auth
> > > > API changes yesterday so please update your trunk and try again - I
> > think
> > > > his changes should fix your problem.
> > > >
> > >
> > > I pulled the latest code, and you were right: it fixed the tenantId
> > > KeyError.
> > >
> > > Unfortunately, I'm now getting a different error.  My interpretation is
> > > that openstack is giving a 300 response because there is a choice of
> > > response formats, but the libcloud driver is treating that as an error,
> > > since OpenStackResponse.success is implemented to do so.  Details
> below.
> > >
> > > I've simplified my demo code by removing the (working) Eucalyptus
> driver
> > > example, and changed the name to stack_demo.py.  Here's the listing:
> > >
> > > from libcloud.compute.types import Provider
> > > from libcloud.compute.providers import get_driver
> > >
> > > STACK_HOST = '50.56.213.226'
> > > USERNAME = 'demo'
> > > PASSWORD = 'password'
> > >
> > > def openstack_connect():
> > >    Driver = get_driver(Provider.OPENSTACK)
> > >    driver = Driver(USERNAME, PASSWORD, host=STACK_HOST, port=8774,
> > > secure=False,
> > >                  ex_force_auth_url='http://%s:5000' % STACK_HOST,
> > >                  ex_force_auth_version='2.0_password',
> > >                  ex_force_base_url='http://%s:8774' % STACK_HOST)
> > >    return driver
> > >
> > > driver = openstack_connect()
> > > print driver.list_images()
> > >
> > > Here's the output:
> > >
> > > $ LIBCLOUD_DEBUG=/dev/stderr python stack_demo.py
> > > /Users/jay/Library/Python/2.6/site-packages/Crypto/Util/randpool.py:40:
> > > RandomPool_DeprecationWarning: This application uses RandomPool, which
> is
> > > BROKEN in older releases.  See http://www.pycrypto.org/randpool-broken
> > >  RandomPool_DeprecationWarning)
> > > # -------- begin 19425240 request ----------
> > > curl -i -X POST -H 'Host: 50.56.213.226:5000' -H 'Accept-Encoding:
> > > gzip,deflate' -H 'X-LC-Request-ID: 19425240' -H 'Content-Type:
> > > application/json; charset=UTF-8' -H 'Content-Length: 79' -H 'Accept:
> > > application/json' -H 'User-Agent: libcloud/0.8.0 (OpenStack)'
> > --data-binary
> > > '{"auth": {"passwordCredentials": {"username": "demo", "password":
> > > "password"}}}' --compress https://50.56.213.226:5000/v2.0/tokens/
> > > # -------- begin 19425240:19425400 response ----------
> > > HTTP/1.1 200 OK
> > > Date: Fri, 17 Feb 2012 01:45:20 GMT
> > > Content-Type: application/json; charset=UTF-8
> > > Content-Length: 772
> > > Vary: X-Auth-Token
> > >
> > > {"access": {"token": {"expires": "2012-02-16T17:54:14", "id":
> > > "f436424e-6c7d-43e4-ae7c-30f5553c79f3"}, "serviceCatalog":
> [{"endpoints":
> > > [{"id": "2", "region": "RegionOne", "internalURL": "
> > > http://50.56.213.226:8773/services/Cloud";, "publicURL": "
> > > http://50.56.213.226:8773/services/Cloud"}], "type": "ec2", "name":
> > > "ec2"},
> > > {"endpoints": [{"id": "3", "region": "RegionOne", "internalURL": "
> > > http://50.56.213.226:9292/v1";, "publicURL": "
> > http://50.56.213.226:9292/v1
> > > "}],
> > > "type": "image", "name": "glance"}, {"endpoints": [{"id": "4",
> "region":
> > > "RegionOne", "internalURL": "http://50.56.213.226:5000/v2.0";,
> > > "publicURL": "
> > > http://50.56.213.226:5000/v2.0"}], "type": "identity", "name":
> > > "keystone"}], "user": {"id": "a438ea90e1da43e4b895874fdaf83a2d",
> "roles":
> > > [], "name": "demo"}}}
> > > # -------- end 19425240:19425400 response ----------
> > >
> > > # -------- begin 19425240 request ----------
> > > curl -i -X GET -H 'Host: 50.56.213.226:8774' -H 'X-LC-Request-ID:
> > > 19425240'
> > > -H 'Accept-Encoding: gzip,deflate' -H 'X-Auth-Token:
> > > f436424e-6c7d-43e4-ae7c-30f5553c79f3' -H 'Content-Length: 0' -H
> 'Accept:
> > > application/json' -H 'User-Agent: libcloud/0.8.0 (OpenStack)'
> --compress
> > '
> > >
> https://50.56.213.226:8774/images/detail?cache-busting=faeee245cd437497'
> > > # -------- begin 19425240:19295688 response ----------
> > > HTTP/1.1 300 Multiple Choices
> > > Date: Fri, 17 Feb 2012 01:45:20 GMT
> > > Content-Length: 327
> > > Content-Type: application/json
> > >
> > > {"choices": [{"status": "CURRENT", "media-types": [{"base":
> > > "application/xml", "type":
> > > "application/vnd.openstack.compute+xml;version=2"}, {"base":
> > > "application/json", "type":
> > > "application/vnd.openstack.compute+json;version=2"}], "id": "v2.0",
> > > "links": [{"href": "http://50.56.213.226:8774/v2/images/detail";,
> "rel":
> > > "self"}]}]}
> > > # -------- end 19425240:19295688 response ----------
> > >
> > > Traceback (most recent call last):
> > >   File "stack_demo.py", line 17, in <module>
> > >    print driver.list_images()
> > >  File
> > >
> > >
> >
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> > > line 209, in list_images
> > >    return self._to_images(self.connection.request('/images/detail')
> > >  File
> > >
> > >
> >
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> > > line 151, in request
> > >    method=method, headers=headers)
> > >  File
> > > "/Users/jay/proj/genforma/libcloud.git/libcloud/common/openstack.py",
> > line
> > > 328, in request
> > >    return super(OpenStackBaseConnection, self).request(**kwargs)
> > >  File "/Users/jay/proj/genforma/libcloud.git/libcloud/common/base.py",
> > > line 564, in request
> > >    connection=self)
> > >  File
> > >
> > >
> >
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> > > line 774, in __init__
> > >    super(OpenStack_1_1_Response, self).__init__(*args, **kwargs)
> > >  File "/Users/jay/proj/genforma/libcloud.git/libcloud/common/base.py",
> > > line 77, in __init__
> > >    raise Exception(self.parse_error())
> > >  File
> > >
> > >
> >
> "/Users/jay/proj/genforma/libcloud.git/libcloud/compute/drivers/openstack.py",
> > > line 111, in parse_error
> > >    in body.values()])
> > > TypeError: list indices must be integers, not str
> > >
> >
>

Reply via email to