diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py index 1157381..2177292 100644 --- a/glanceclient/common/http.py +++ b/glanceclient/common/http.py @@ -116,6 +116,7 @@ class HTTPClient(_BaseHTTPClient): self.identity_headers = kwargs.get('identity_headers') self.auth_token = kwargs.get('token') self.language_header = kwargs.get('language_header') + self.last_request_id = None if self.identity_headers: if self.identity_headers.get('X-Auth-Token'): self.auth_token = self.identity_headers.get('X-Auth-Token') @@ -264,6 +265,7 @@ class HTTPClient(_BaseHTTPClient): {'endpoint': endpoint, 'e': e}) raise exc.CommunicationError(message=message) + self.last_request_id = resp.headers.get('x-openstack-request-id') resp, body_iter = self._handle_response(resp) self.log_http_response(resp) return resp, body_iter @@ -303,6 +305,7 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient): def __init__(self, session, **kwargs): kwargs.setdefault('user_agent', USER_AGENT) kwargs.setdefault('service_type', 'image') + self.last_request_id = None super(SessionClient, self).__init__(session, **kwargs) def request(self, url, method, **kwargs): @@ -329,6 +332,7 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient): dict(url=conn_url, e=e)) raise exc.CommunicationError(message=message) + self.last_request_id = resp.headers.get('x-openstack-request-id') return self._handle_response(resp) diff --git a/glanceclient/tests/unit/test_http.py b/glanceclient/tests/unit/test_http.py index c18660e..e0c1219 100644 --- a/glanceclient/tests/unit/test_http.py +++ b/glanceclient/tests/unit/test_http.py @@ -200,6 +200,14 @@ class TestClient(testtools.TestCase): resp, body = self.client.get(path, headers=headers) self.assertEqual(text, resp.text) + def test_request_id(self): + path = '/v1/images/detail' + self.mock.get(self.endpoint + path, + headers={"x-openstack-request-id": "req-aaa"}) + + self.client.get(path) + self.assertEqual(self.client.last_request_id, 'req-aaa') + def test_headers_encoding(self): if not hasattr(self.client, 'encode_headers'): self.skipTest('Cannot do header encoding check on SessionClient')