summaryrefslogtreecommitdiff
path: root/worker_manager
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-29 19:08:09 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-29 20:20:30 +0100
commit7809915e033608aaaa61c16846e32198ae0be808 (patch)
treebd9ab1cd9abe630a72cda728d78bae899b2449b4 /worker_manager
parentc47428b05ffdcd9adc621f47d38fa88ee7c260c7 (diff)
downloadick2-7809915e033608aaaa61c16846e32198ae0be808.tar.gz
Add: fresh_workspace support to worker-manager
Diffstat (limited to 'worker_manager')
-rwxr-xr-xworker_manager39
1 files changed, 27 insertions, 12 deletions
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')