diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-12-31 21:01:35 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-01-14 22:23:39 +0200 |
commit | 9a7ca01d585b5f94655864af6608a3b95dca4f3b (patch) | |
tree | e46eb8794f704d51a03f7499e2ed29dbdc4064c5 /worker_manager | |
parent | 7b53d212868ad9d95f48aeafcf9017d2fe187e41 (diff) | |
download | ick2-9a7ca01d585b5f94655864af6608a3b95dca4f3b.tar.gz |
Add: SystreePopulator
Diffstat (limited to 'worker_manager')
-rwxr-xr-x | worker_manager | 43 |
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() |