diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-11-05 18:30:56 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-11-05 18:30:56 +0100 |
commit | d14f7d3f2c26201cdcf2e73accc079d51b935651 (patch) | |
tree | 913bc0fdaf074598c872e53c7d7a62aec5038aef /ick2/controllerapi.py | |
parent | 860bca1a4b14b8a8fbe4bc40f8680b63263b4aa0 (diff) | |
download | ick2-d14f7d3f2c26201cdcf2e73accc079d51b935651.tar.gz |
Add: WorkAPI.get_work
Diffstat (limited to 'ick2/controllerapi.py')
-rw-r--r-- | ick2/controllerapi.py | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/ick2/controllerapi.py b/ick2/controllerapi.py index 9ac4bcc..91d68b6 100644 --- a/ick2/controllerapi.py +++ b/ick2/controllerapi.py @@ -303,9 +303,40 @@ class WorkAPI(APIbase): super().__init__(state) self._projects = projects self._workers = workers + self._type_name = 'workers' def get_work(self, worker): - return {} + worker_state = self._state.get_resource(self._type_name, worker) + if not worker_state.get('doing'): + project, pipeline = self._pick_triggered_pipeline() + if project is None: + doing = {} + else: + pipeline['status'] = 'building' + self._projects.update(project, project['project']) + + doing = { + 'project': project['project'], + 'pipeline': pipeline['name'], + 'step': pipeline['actions'][0], + 'current_step': 0, + } + + worker_state = { + 'worker': worker, + 'doing': doing, + } + self._state.update_resource(self._type_name, worker, worker_state) + + return worker_state['doing'] + + def _pick_triggered_pipeline(self): + projects = self._projects.list() + for project in projects['projects']: + for pipeline in project['pipelines']: + if pipeline.get('status') == 'triggered': + return project, pipeline + return None, None def create(self, *args, **kwargs): # pragma: no cover pass |