summaryrefslogtreecommitdiff
path: root/worker_manager
diff options
context:
space:
mode:
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()