From 5cf3781ad4beddfab5aa7181c0990a5462ffe06f Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 7 Feb 2018 18:54:13 +0200 Subject: Change: make all .service units be conditional on config If the config file is missing, the unit won't start. --- worker_manager | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'worker_manager') diff --git a/worker_manager b/worker_manager index efb84cd..ad51619 100755 --- a/worker_manager +++ b/worker_manager @@ -120,6 +120,7 @@ class ControllerAPI: def __init__(self, name, url, token_generator): self._name = name self._url = url + self._blob_url = None self._token_generator = token_generator self._httpapi = HttpApi() @@ -130,7 +131,9 @@ class ControllerAPI: body = { 'worker': self._name, } - self._httpapi.post(url, headers, body) + code = self._httpapi.post(url, headers, body) + if code not in [200, 201, 409]: + raise cliapp.AppException('Failed to register worker') def get_work(self): url = self.url('/work/{}'.format(self._name)) @@ -149,26 +152,42 @@ class ControllerAPI: raise cliapp.AppException( 'Error posting data to controller: {}'.format(code)) + def url(self, path): + return '{}{}'.format(self._url, path) + + def get_auth_headers(self): + token = self._token_generator.get_token() + return { + 'Authorization': 'Bearer {}'.format(token), + } + def upload_blob(self, blob_id, blob): logging.info('Upload blob %s', blob_id) - url = self.url('/blobs/{}'.format(blob_id)) + url = self.bloburl(blob_id) headers = self.get_auth_headers() code = self._httpapi.put(url, headers, blob) def download_blob(self, blob_id): logging.info('Download blob %s', blob_id) - url = self.url('/blobs/{}'.format(blob_id)) + url = self.bloburl(blob_id) headers = self.get_auth_headers() return self._httpapi.get_blob(url, headers) - def url(self, path): - return '{}{}'.format(self._url, path) + def bloburl(self, blob_id): + if self._blob_url is None: + self._blob_url = self.get_blob_service_url() + if self._blob_url is not None: + return '{}/blobs/{}'.format(self._blob_url, blob_id) + logging.error('Do not have blob service URL') + return None - def get_auth_headers(self): - token = self._token_generator.get_token() - return { - 'Authorization': 'Bearer {}'.format(token), - } + def get_blob_service_url(self): + url = self.url('/version') + headers = self.get_auth_headers() + version = self._httpapi.get(url, headers) + logging.info('Version: %r', version) + if version: + return version.get('blob_service') class HttpApi: @@ -208,6 +227,7 @@ class TokenGenerator: iss = 'localhost' aud = 'localhost' scopes = ' '.join([ + 'uapi_version_get', 'uapi_work_id_get', 'uapi_work_post', 'uapi_workers_post', @@ -541,7 +561,7 @@ class WorkspaceArchiver(WorkerBase): logging.info('Uploading %s', blob_id) self.report(b'Uploading workspace\n') - url = self._api.url('/blobs/{}'.format(blob_id)) + url = self._api.bloburl(blob_id) headers = self._api.get_auth_headers() upload = ['curl', '-sk', '-T', filename] for name, value in headers.items(): @@ -591,7 +611,7 @@ class SystreePopulator(WorkerBase): return self.execute_argv(['sudo', 'find', '-delete'], cwd=dirname) def download_and_unpack_systree(self, systree_name, dirname): - url = self._api.url('/blobs/{}'.format(systree_name)) + url = self._api.bloburl(systree_name) headers = self._api.get_auth_headers() download = ['curl', '-k'] for name, value in headers.items(): -- cgit v1.2.1