summaryrefslogtreecommitdiff
path: root/contractor
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2020-04-09 16:08:13 +0300
committerLars Wirzenius <liw@liw.fi>2020-04-09 16:08:13 +0300
commit2169f3319219ce1c7f6225d0043c2af1968def6d (patch)
tree05c54d934b609c91de0382f3d0386fc310e27c89 /contractor
parente934e68ea8065254a92806541dbc45e02dde8af7 (diff)
downloadick-contractor-2169f3319219ce1c7f6225d0043c2af1968def6d.tar.gz
Change: save workspace
Diffstat (limited to 'contractor')
-rwxr-xr-xcontractor47
1 files changed, 34 insertions, 13 deletions
diff --git a/contractor b/contractor
index 0dc164b..ccab0a9 100755
--- a/contractor
+++ b/contractor
@@ -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():