diff options
author | Lars Wirzenius <liw@liw.fi> | 2020-04-09 16:08:13 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2020-04-09 16:08:13 +0300 |
commit | 2169f3319219ce1c7f6225d0043c2af1968def6d (patch) | |
tree | 05c54d934b609c91de0382f3d0386fc310e27c89 /contractor | |
parent | e934e68ea8065254a92806541dbc45e02dde8af7 (diff) | |
download | ick-contractor-2169f3319219ce1c7f6225d0043c2af1968def6d.tar.gz |
Change: save workspace
Diffstat (limited to 'contractor')
-rwxr-xr-x | contractor | 47 |
1 files changed, 34 insertions, 13 deletions
@@ -62,7 +62,10 @@ def ssh(target, argv, quiet=False): def rsync(filename, target): - argv = ['rsync', '-aHSs', '--delete', '--', filename, target] + argv = [ + 'rsync', '-aHSs', '--delete', '--exclude=lost+found', '--', + filename, target, + ] logging.info('RSYNC: {!r}'.format(argv)) p = subprocess.Popen(argv, stderr=STDOUT, stdout=PIPE) out, err = p.communicate() @@ -135,14 +138,16 @@ class ContractorApplication(cliapp.Application): self.error('build failed') sys.exit(1) - # if workspace: - # self.verbose('Saving workspace to {}'.format(workspace)) - # if os.path.exists(workspace): - # shutil.rmtree(workspace) - # os.makedirs(workspace) - # self.cmd_get_workspace([workspace]) - # self.verbose('Build finished OK') + # This might fail. We ignore the failure. + self.verbose('stopping worker') + m.stop_worker() + + if ws: + self.verbose('saving workspace to {}'.format(ws)) + m.save_workspace(ws) + + self.verbose('build finished OK') def load_build_spec(self, filename): with open(filename) as f: @@ -502,14 +507,9 @@ class Manager: if er.failed(): logging.error('Could not set up workspace') self.umount(WS_DEV) - self.kpartx('-dsv') return er def setup_helper(self, saved_workspace, source): - er = self.kpartx('-asv') - if er.failed(): - return er - er = self.mount(WS_DEV) if er.failed(): return er @@ -541,6 +541,27 @@ class Manager: return er + def save_workspace(self, saved_workspace): + er = self.save_helper(saved_workspace) + if er.failed(): + logging.error('Could not save workspace') + self.umount(WS_DEV) + return er + + def save_helper(self, saved_workspace): + er = self.mount(WS_DEV) + if er.failed(): + return er + + if not os.path.exists(saved_workspace): + os.makedirs(saved_workspace) + + er = rsync( + '{}:/mnt/.'.format(self._target), + '{}/.'.format(saved_workspace)) + + return er + def kpartx(self, options): er = self.ssh(['sudo', 'kpartx', options, TEMP_IMG]) if er.failed(): |