diff --git a/daemons/ganeti-rapi b/daemons/ganeti-rapi index 88686db1cf8cbaeab17f93c0a0db65b6d1f40d7e..d11fefd5809d9e1a965118dbee6282c0506753fb 100755 --- a/daemons/ganeti-rapi +++ b/daemons/ganeti-rapi @@ -61,6 +61,9 @@ class RemoteApiHttpServer(http.HttpServer): try: result = fn() + sn = handler.getSerialNumber() + if sn: + req.response_headers[http.HTTP_ETAG] = str(sn) except: logging.exception("Error while handling the %s request", method) raise diff --git a/lib/http.py b/lib/http.py index 12418826fca6cc9bc6640044077a9d9878b7599c..7a6c0db9edb5646208415d0d2ade844495a44e5d 100644 --- a/lib/http.py +++ b/lib/http.py @@ -65,6 +65,7 @@ HTTP_1_1 = "HTTP/1.1" HTTP_GET = "GET" HTTP_HEAD = "HEAD" +HTTP_ETAG = "ETag" class SocketClosed(socket.error): @@ -372,6 +373,7 @@ class _HttpConnectionHandler(object): self.response_body = None self.response_code = HTTP_OK self.response_content_type = None + self.response_headers = {} self.should_fork = False @@ -484,6 +486,9 @@ class _HttpConnectionHandler(object): self._SendHeader("Date", self._DateTimeHeader()) self._SendHeader("Content-Type", self.response_content_type) self._SendHeader("Content-Length", str(len(self.response_body))) + for key, val in self.response_headers.iteritems(): + self._SendHeader(key, val) + # We don't support keep-alive at this time self._SendHeader("Connection", "close") self.wfile.write("\r\n") diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py index fde62c8386c1305af9083eb0f534f7baccfca4f6..872b71a6eb6e0abe6ade623f95b5871e30cca039 100644 --- a/lib/rapi/baserlib.py +++ b/lib/rapi/baserlib.py @@ -137,3 +137,10 @@ class R_Generic(object): self.items = items self.queryargs = queryargs self.post_data = post_data + self.sn = None + + def getSerialNumber(self): + """Get Serial Number. + + """ + return self.sn