diff options
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 |