X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/90209af8fa35bc99c9821db0c815404d1234ef31..e2bf56f0a0fa1f6b4fb7b4efc4db5178b074b8ce:/services/nodemanager/arvnodeman/status.py diff --git a/services/nodemanager/arvnodeman/status.py b/services/nodemanager/arvnodeman/status.py index d21899c704..cfd611285c 100644 --- a/services/nodemanager/arvnodeman/status.py +++ b/services/nodemanager/arvnodeman/status.py @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + from __future__ import absolute_import, print_function from future import standard_library @@ -37,12 +41,34 @@ class Handler(http.server.BaseHTTPRequestHandler, object): self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(tracker.get_json()) + elif self.path == '/_health/ping': + code, msg = self.check_auth() + + if code != 200: + self.send_response(code) + self.wfile.write(msg) + else: + self.send_response(200) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(json.dumps({"health":"OK"})) else: self.send_response(404) def log_message(self, fmt, *args, **kwargs): _logger.info(fmt, *args, **kwargs) + def check_auth(self): + mgmt_token = self.server._config.get('Manage', 'ManagementToken') + auth_header = self.headers.get('Authorization', None) + + if mgmt_token == '': + return 404, "disabled" + elif auth_header == None: + return 401, "authorization required" + elif auth_header != 'Bearer '+mgmt_token: + return 403, "authorization error" + return 200, "" class Tracker(object): def __init__(self):