summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rwxr-xr-xworker_manager11
2 files changed, 13 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index cdcc13c..2fe39a1 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
Version 0.21+git, not yet released
----------------------------------
+* Add a `where: chroot` field to pipeline actions to cause the
+ shell/python snippet to run in a chroot using the workspace as the
+ root directory.
Version 0.21, released 2017-12-27
----------------------------------
diff --git a/worker_manager b/worker_manager
index 24214bd..8642036 100755
--- a/worker_manager
+++ b/worker_manager
@@ -295,6 +295,11 @@ class WorkerBase:
params = work.get('parameters', {})
params_text = self.params64(params)
argv = self.get_argv(work, params_text)
+ if self.where(work) == 'chroot':
+ logging.debug('CHROOT REQUESTED')
+ argv = ['sudo', 'chroot', self._workspace] + argv
+ else:
+ logging.debug('NOT IN CHROOT')
logging.debug('running: %r', argv)
exit_code, _, _ = cliapp.runcmd_unchecked(
argv,
@@ -310,6 +315,10 @@ class WorkerBase:
as_base64 = base64.b64encode(as_bytes)
return as_base64.decode('UTF-8')
+ def where(self, work):
+ step = work.get('step', {})
+ return step.get('where')
+
def get_argv(self, work, params_text):
raise NotImplementedError()
@@ -350,7 +359,7 @@ class DebootstrapWorker(WorkerBase):
class WorkspaceCleaner(WorkerBase):
def get_argv(self, work, params_text):
- return ['find', '.', '-delete']
+ return ['sudo', 'find', '.', '-delete']
if __name__ == '__main__':