From d14f7d3f2c26201cdcf2e73accc079d51b935651 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 5 Nov 2017 18:30:56 +0100 Subject: Add: WorkAPI.get_work --- ick2/controllerapi.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'ick2/controllerapi.py') 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 -- cgit v1.2.1