summaryrefslogtreecommitdiff
path: root/ick2/controllerapi.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-05 18:30:56 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-05 18:30:56 +0100
commitd14f7d3f2c26201cdcf2e73accc079d51b935651 (patch)
tree913bc0fdaf074598c872e53c7d7a62aec5038aef /ick2/controllerapi.py
parent860bca1a4b14b8a8fbe4bc40f8680b63263b4aa0 (diff)
downloadick2-d14f7d3f2c26201cdcf2e73accc079d51b935651.tar.gz
Add: WorkAPI.get_work
Diffstat (limited to 'ick2/controllerapi.py')
-rw-r--r--ick2/controllerapi.py33
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