Looking at William's trace, I see some differences with the traces I get. Not posting a full one in the first place was foolish of me. Here it is now.
$ nova --debug volume-list
connect: (XXX.XXX.XXX.XXX, 8774)
send: 'GET /v1.1 HTTP/1.1\r\nHost: XXX.XXX.XXX.XXX:8774\r\nx-auth-project-id: pjdc_project\r\naccept-encoding: gzip, deflate\r\nx-auth-user: pjdc\r\nuser-agent: python-novaclient\r\nx-auth-key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\r\naccept: application/json\r\n\r\n'
reply: 'HTTP/1.1 204 No Content\r\n'
header: Content-Length: 0
header: X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
header: X-Server-Management-Url: http://XXX.XXX.XXX.XXX:8774/v1.1/pjdc_project
header: Content-Type: text/plain; charset=UTF-8
header: Date: Thu, 31 May 2012 21:19:01 GMT
send: 'GET /v1.1/pjdc_project/volumes/detail HTTP/1.1\r\nHost: XXX.XXX.XXX.XXX:8774\r\nx-auth-project-id: pjdc_project\r\nx-auth-token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: python-novaclient\r\n\r\n'
reply: 'HTTP/1.1 404 Not Found\r\n'
header: Content-Length: 52
header: Content-Type: text/plain; charset=UTF-8
header: Date: Thu, 31 May 2012 21:19:02 GMT
DEBUG (shell:416) n/a (HTTP 404)
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/novaclient/shell.py", line 413, in main
OpenStackComputeShell().main(sys.argv[1:])
File "/usr/lib/python2.7/dist-packages/novaclient/shell.py", line 364, in main
args.func(self.cs, args)
File "/usr/lib/python2.7/dist-packages/novaclient/v1_1/shell.py", line 858, in do_volume_list
volumes = cs.volumes.list()
File "/usr/lib/python2.7/dist-packages/novaclient/v1_1/volumes.py", line 79, in list
return self._list("/volumes/detail", "volumes")
File "/usr/lib/python2.7/dist-packages/novaclient/base.py", line 71, in _list
resp, body = self.api.client.get(url)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 136, in get
return self._cs_request(url, 'GET', **kwargs)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 124, in _cs_request
**kwargs)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 107, in request
raise exceptions.from_response(resp, body)
NotFound: n/a (HTTP 404)
ERROR: n/a (HTTP 404)
Whereas in William's trace the token is obtained with "POST /v2.0/tokens" and the list operation is performed with "GET /v1/5c9e830827e0412b92da25b128f5c63d/volumes/detail".
In the credentials packets we distribute to our Openstack users, we have a file containing environment variables, which includes:
$ nova --debug volume-list
connect: (XXX.XXX.XXX.XXX, 8774)
send: 'POST /v2.0/tokens HTTP/1.1\r\nHost: XXX.XXX.XXX.XXX:8774\r\nContent-Length: 137\r\ncontent-type: application/json\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: python-novaclient\r\n\r\n{"auth": {"tenantName": "pjdc_project", "passwordCredentials": {"username": "pjdc", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}}}'
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Content-Length: 141
header: Content-Type: application/json; charset=UTF-8
header: Date: Thu, 31 May 2012 21:26:01 GMT
DEBUG (shell:416) The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/novaclient/shell.py", line 413, in main
OpenStackComputeShell().main(sys.argv[1:])
File "/usr/lib/python2.7/dist-packages/novaclient/shell.py", line 358, in main
self.cs.authenticate()
File "/usr/lib/python2.7/dist-packages/novaclient/v1_1/client.py", line 106, in authenticate
self.client.authenticate()
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 229, in authenticate
auth_url = self._v2_auth(auth_url)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 284, in _v2_auth
self._authenticate(url, body)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 305, in _authenticate
resp, body = self.request(token_url, "POST", body=body)
File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 107, in request
raise exceptions.from_response(resp, body)
BadRequest: The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
ERROR: The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
Which seems to leave us with
=== the v1.1 issue ===
When using the v1.1 API, novaclient is not able to query Openstack for a list of volumes. Is this supposed to be supported?
=== the v2 issue ===
The Openstack installation I'm testing against doesn't like the v2 API. In nova-api.log I find:
2012-05-31 21:26:01 INFO nova.api.openstack.wsgi [-] POST http://XXX.XXX.XXX.XXX:8774/v2.0/tokens
2012-05-31 21:26:01 ERROR nova.api.openstack.wsgi [-] Exception handling resource: multi() got an unexpected keyword argument 'body'
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi Traceback (most recent call last):
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi File "/usr/lib/python2.7/dist-packages/nova/api/openstack/wsgi.py", line 851, in _process_stack
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi action_result = self.dispatch(meth, request, action_args)
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi File "/usr/lib/python2.7/dist-packages/nova/api/openstack/wsgi.py", line 926, in dispatch
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi return method(req=request, **action_args)
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi TypeError: multi() got an unexpected keyword argument 'body'
2012-05-31 21:26:01 TRACE nova.api.openstack.wsgi
2012-05-31 21:26:01 INFO nova.api.openstack.wsgi [-] http://XXX.XXX.XXX.XXX:8774/v2.0/tokens returned with HTTP 400
I'll look into this, but if someone recognizes the symptom or has any ideas, that would be very helpful.
Looking at William's trace, I see some differences with the traces I get. Not posting a full one in the first place was foolish of me. Here it is now.
$ nova --debug volume-list XXX.XXX: 8774\r\ nx-auth- project- id: pjdc_project\ r\naccept- encoding: gzip, deflate\ r\nx-auth- user: pjdc\r\nuser-agent: python- novaclient\ r\nx-auth- key: xxxxxxxx- xxxx-xxxx- xxxx-xxxxxxxxxx xx\r\naccept: application/ json\r\ n\r\n' xxxxxxxxxxxxxxx xxxxxxxxxx Management- Url: http:// XXX.XXX. XXX.XXX: 8774/v1. 1/pjdc_ project project/ volumes/ detail HTTP/1.1\r\nHost: XXX.XXX. XXX.XXX: 8774\r\ nx-auth- project- id: pjdc_project\ r\nx-auth- token: xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxx\ r\naccept- encoding: gzip, deflate\r\naccept: application/ json\r\ nuser-agent: python- novaclient\ r\n\r\n' python2. 7/dist- packages/ novaclient/ shell.py" , line 413, in main mputeShell( ).main( sys.argv[ 1:]) python2. 7/dist- packages/ novaclient/ shell.py" , line 364, in main func(self. cs, args) python2. 7/dist- packages/ novaclient/ v1_1/shell. py", line 858, in do_volume_list python2. 7/dist- packages/ novaclient/ v1_1/volumes. py", line 79, in list "/volumes/ detail" , "volumes") python2. 7/dist- packages/ novaclient/ base.py" , line 71, in _list client. get(url) python2. 7/dist- packages/ novaclient/ client. py", line 136, in get request( url, 'GET', **kwargs) python2. 7/dist- packages/ novaclient/ client. py", line 124, in _cs_request python2. 7/dist- packages/ novaclient/ client. py", line 107, in request from_response( resp, body)
connect: (XXX.XXX.XXX.XXX, 8774)
send: 'GET /v1.1 HTTP/1.1\r\nHost: XXX.XXX.
reply: 'HTTP/1.1 204 No Content\r\n'
header: Content-Length: 0
header: X-Auth-Token: xxxxxxxxxxxxxxx
header: X-Server-
header: Content-Type: text/plain; charset=UTF-8
header: Date: Thu, 31 May 2012 21:19:01 GMT
send: 'GET /v1.1/pjdc_
reply: 'HTTP/1.1 404 Not Found\r\n'
header: Content-Length: 52
header: Content-Type: text/plain; charset=UTF-8
header: Date: Thu, 31 May 2012 21:19:02 GMT
DEBUG (shell:416) n/a (HTTP 404)
Traceback (most recent call last):
File "/usr/lib/
OpenStackCo
File "/usr/lib/
args.
File "/usr/lib/
volumes = cs.volumes.list()
File "/usr/lib/
return self._list(
File "/usr/lib/
resp, body = self.api.
File "/usr/lib/
return self._cs_
File "/usr/lib/
**kwargs)
File "/usr/lib/
raise exceptions.
NotFound: n/a (HTTP 404)
ERROR: n/a (HTTP 404)
Whereas in William's trace the token is obtained with "POST /v2.0/tokens" and the list operation is performed with "GET /v1/5c9e830827e 0412b92da25b128 f5c63d/ volumes/ detail" .
In the credentials packets we distribute to our Openstack users, we have a file containing environment variables, which includes:
export NOVA_URL="http:// XXX.XXX. XXX.XXX: 8774/v1. 1/"
export NOVA_VERSION="1.1"
However, when I set things up as follows:
export NOVA_URL="http:// XXX.XXX. XXX.XXX: 8774/v2. 0/"
export NOVA_VERSION="2"
I get:
$ nova --debug volume-list XXX.XXX: 8774\r\ nContent- Length: 137\r\ncontent- type: application/ json\r\ naccept- encoding: gzip, deflate\r\naccept: application/ json\r\ nuser-agent: python- novaclient\ r\n\r\n{ "auth": {"tenantName": "pjdc_project", "passwordCreden tials": {"username": "pjdc", "password": "xxxxxxxx- xxxx-xxxx- xxxx-xxxxxxxxxx xx"}}}' python2. 7/dist- packages/ novaclient/ shell.py" , line 413, in main mputeShell( ).main( sys.argv[ 1:]) python2. 7/dist- packages/ novaclient/ shell.py" , line 358, in main cs.authenticate () python2. 7/dist- packages/ novaclient/ v1_1/client. py", line 106, in authenticate client. authenticate( ) python2. 7/dist- packages/ novaclient/ client. py", line 229, in authenticate auth(auth_ url) python2. 7/dist- packages/ novaclient/ client. py", line 284, in _v2_auth _authenticate( url, body) python2. 7/dist- packages/ novaclient/ client. py", line 305, in _authenticate token_url, "POST", body=body) python2. 7/dist- packages/ novaclient/ client. py", line 107, in request from_response( resp, body)
connect: (XXX.XXX.XXX.XXX, 8774)
send: 'POST /v2.0/tokens HTTP/1.1\r\nHost: XXX.XXX.
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Content-Length: 141
header: Content-Type: application/json; charset=UTF-8
header: Date: Thu, 31 May 2012 21:26:01 GMT
DEBUG (shell:416) The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
Traceback (most recent call last):
File "/usr/lib/
OpenStackCo
File "/usr/lib/
self.
File "/usr/lib/
self.
File "/usr/lib/
auth_url = self._v2_
File "/usr/lib/
self.
File "/usr/lib/
resp, body = self.request(
File "/usr/lib/
raise exceptions.
BadRequest: The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
ERROR: The server could not comply with the request since it is either malformed or otherwise incorrect. (HTTP 400)
Which seems to leave us with
=== the v1.1 issue ===
When using the v1.1 API, novaclient is not able to query Openstack for a list of volumes. Is this supposed to be supported?
=== the v2 issue ===
The Openstack installation I'm testing against doesn't like the v2 API. In nova-api.log I find:
2012-05-31 21:26:01 INFO nova.api. openstack. wsgi [-] POST http:// XXX.XXX. XXX.XXX: 8774/v2. 0/tokens openstack. wsgi [-] Exception handling resource: multi() got an unexpected keyword argument 'body' openstack. wsgi Traceback (most recent call last): openstack. wsgi File "/usr/lib/ python2. 7/dist- packages/ nova/api/ openstack/ wsgi.py" , line 851, in _process_stack openstack. wsgi action_result = self.dispatch(meth, request, action_args) openstack. wsgi File "/usr/lib/ python2. 7/dist- packages/ nova/api/ openstack/ wsgi.py" , line 926, in dispatch openstack. wsgi return method(req=request, **action_args) openstack. wsgi TypeError: multi() got an unexpected keyword argument 'body' openstack. wsgi openstack. wsgi [-] http:// XXX.XXX. XXX.XXX: 8774/v2. 0/tokens returned with HTTP 400
2012-05-31 21:26:01 ERROR nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 TRACE nova.api.
2012-05-31 21:26:01 INFO nova.api.
I'll look into this, but if someone recognizes the symptom or has any ideas, that would be very helpful.