summaryrefslogtreecommitdiff
path: root/worker_manager
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-02-07 18:54:13 +0200
committerLars Wirzenius <liw@liw.fi>2018-02-09 19:11:02 +0200
commit5cf3781ad4beddfab5aa7181c0990a5462ffe06f (patch)
treea50a769bc8b6cc7e31f28466002c7dc15f2433b4 /worker_manager
parent4b6fd81e121935f60f29b8314bc7c44726bf6fd7 (diff)
downloadick2-5cf3781ad4beddfab5aa7181c0990a5462ffe06f.tar.gz
Change: make all .service units be conditional on config
If the config file is missing, the unit won't start.
Diffstat (limited to 'worker_manager')
-rwxr-xr-xworker_manager44
1 files changed, 32 insertions, 12 deletions
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():