From 7809915e033608aaaa61c16846e32198ae0be808 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 29 Nov 2017 19:08:09 +0100 Subject: Add: fresh_workspace support to worker-manager --- worker_manager | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) (limited to 'worker_manager') diff --git a/worker_manager b/worker_manager index f13b431..a480558 100755 --- a/worker_manager +++ b/worker_manager @@ -83,6 +83,13 @@ class WorkerManager(cliapp.Application): default=5, ) + self.settings.string( + ['workspace'], + 'use DIR as the workspace where commands are run', + metavar='DIR', + default='/var/lib/ick/workspace', + ) + def process_args(self, args): self.settings.require('name') name = self.settings['name'] @@ -94,7 +101,7 @@ class WorkerManager(cliapp.Application): if work and self.settings['pretend']: self.report_pretend_work(url, name, work) elif work: - self.do_work(url, name, work) + self.do_work(url, name, work, self.settings['workspace']) else: self.show_msg('Nothing to do') self.sleep_a_little() @@ -180,7 +187,7 @@ class WorkerManager(cliapp.Application): } self.post_snippet(snippet_url, snippet) - def do_work(self, url, name, work): + def do_work(self, url, name, work, workspace): self.show_msg('Doing work') snippet_url = '{}/work'.format(url) snippet = { @@ -200,16 +207,24 @@ class WorkerManager(cliapp.Application): s[stream_name] = data self.post_snippet(snippet_url, s) - shell_cmd = work['step']['shell'] - exit_code, _, _ = cliapp.runcmd_unchecked( - ['bash', '-xeuc', shell_cmd], - stdout_callback=lambda data: post('stdout', data), - stderr_callback=lambda data: post('stderr', data), - ) - - end_snippet = dict(snippet) - end_snippet['exit_code'] = exit_code - self.post_snippet(snippet_url, end_snippet) + def run_shell(shell_cmd): + exit_code, _, _ = cliapp.runcmd_unchecked( + ['bash', '-xeuc', shell_cmd], + stdout_callback=lambda data: post('stdout', data), + stderr_callback=lambda data: post('stderr', data), + cwd=workspace, + ) + end_snippet = dict(snippet) + end_snippet['exit_code'] = exit_code + self.post_snippet(snippet_url, end_snippet) + return exit_code + + exit_code = 0 + if work.get('fresh_workspace'): + exit_code = run_shell('find . -delete') + if exit_code == 0: + shell_cmd = work['step']['shell'] + run_shell(shell_cmd) def now(self): return time.strftime('%Y-%m-%dT%H:%M:%S') -- cgit v1.2.1