summaryrefslogtreecommitdiff
path: root/worker_manager
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-12-31 21:01:35 +0200
committerLars Wirzenius <liw@liw.fi>2018-01-14 22:23:39 +0200
commit9a7ca01d585b5f94655864af6608a3b95dca4f3b (patch)
treee46eb8794f704d51a03f7499e2ed29dbdc4064c5 /worker_manager
parent7b53d212868ad9d95f48aeafcf9017d2fe187e41 (diff)
downloadick2-9a7ca01d585b5f94655864af6608a3b95dca4f3b.tar.gz
Add: SystreePopulator
Diffstat (limited to 'worker_manager')
-rwxr-xr-xworker_manager43
1 files changed, 43 insertions, 0 deletions
diff --git a/worker_manager b/worker_manager
index 47e285e..4fb04ed 100755
--- a/worker_manager
+++ b/worker_manager
@@ -440,5 +440,48 @@ class WorkspaceArchiver(WorkerBase):
assert False
+class SystreePopulator(WorkerBase):
+
+ systree_dir = '/var/lib/ick/systree'
+
+ def do(self, work):
+ params = work.get('parameters', {})
+ systree_name = params.get('systree_name')
+ if not systree_name:
+ self.report(b'No systree_name parameter, no systree population')
+ return 0
+
+ self.make_directory_empty(self.systree_dir)
+ tarball = self._api.download_blob(systree_name)
+ self.unpack_systree(tarball, self.systree_dir)
+
+ self.report(b'Systree has been populated')
+ return 0
+
+ def make_directory_empty(self, dirname):
+ return self.execute_argv(['sudo', 'find', '-delete'], cwd=dirname)
+
+ def unpack_systree(self, tarball, dirname):
+ return self.execute_argv(
+ ['sudo', 'tar', '-zxvf', '-', '-C', dirname],
+ feed_stdin=tarball,
+ )
+
+ def execute_argv(self, argv, **kwargs):
+ exit_code, _, _ = cliapp.runcmd_unchecked(
+ argv,
+ stdout_callback=self.report,
+ stderr_callback=self.report,
+ **kwargs,
+ )
+ return exit_code
+
+ def report(self, data):
+ self._post('stdout', data.decode('UTF-8'))
+
+ def get_argv(self, work, params_text):
+ assert False
+
+
if __name__ == '__main__':
WorkerManager(version=ick2.__version__).run()