From 12a1d83ac9e9164b082279b12749574f2d2edce2 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 27 Oct 2009 10:57:58 +0100 Subject: [PATCH] [molecule] remaster plugin: do not remove/empty paths before hooks, always kill tmp dir --- molecule/specs/plugins/builtin.py | 78 +++++++++++++++--------------- molecule/specs/plugins/remaster.py | 36 +++++++++++--- 2 files changed, 67 insertions(+), 47 deletions(-) diff --git a/molecule/specs/plugins/builtin.py b/molecule/specs/plugins/builtin.py index 090951c..ca6bc03 100644 --- a/molecule/specs/plugins/builtin.py +++ b/molecule/specs/plugins/builtin.py @@ -121,6 +121,45 @@ class ChrootHandler(GenericExecutionStep): ) ) + # now remove paths to empty + empty_paths = self.metadata.get('paths_to_empty',[]) + for mypath in empty_paths: + mypath = self.dest_dir+mypath + self.Output.updateProgress("[%s|%s] %s: %s" % ( + blue("ChrootHandler"),darkred(self.spec_name), + _("emptying dir"),mypath, + ) + ) + if os.path.isdir(mypath): + molecule.utils.empty_dir(mypath) + + # now remove paths to remove (...) + remove_paths = self.metadata.get('paths_to_remove',[]) + + # setup sandbox + sb_dirs = [self.dest_dir] + sb_env = { + 'SANDBOX_WRITE': ':'.join(sb_dirs), + } + myenv = os.environ.copy() + myenv.update(sb_env) + + for mypath in remove_paths: + mypath = self.dest_dir+mypath + self.Output.updateProgress("[%s|%s] %s: %s" % ( + blue("ChrootHandler"),darkred(self.spec_name), + _("removing dir"),mypath, + ) + ) + rc = molecule.utils.remove_path_sandbox(mypath, sb_env) + if rc != 0: + self.Output.updateProgress("[%s|%s] %s: %s: %s" % ( + blue("ChrootHandler"),darkred(self.spec_name), + _("removal failed for"),mypath,rc, + ) + ) + return rc + # write release file release_file = self.metadata.get('release_file') if isinstance(release_file,basestring) and release_file: @@ -220,45 +259,6 @@ class ChrootHandler(GenericExecutionStep): ) return rc - # now remove paths to empty - empty_paths = self.metadata.get('paths_to_empty',[]) - for mypath in empty_paths: - mypath = self.dest_dir+mypath - self.Output.updateProgress("[%s|%s] %s: %s" % ( - blue("ChrootHandler"),darkred(self.spec_name), - _("emptying dir"),mypath, - ) - ) - if os.path.isdir(mypath): - molecule.utils.empty_dir(mypath) - - # now remove paths to remove (...) - remove_paths = self.metadata.get('paths_to_remove',[]) - - # setup sandbox - sb_dirs = [self.dest_dir] - sb_env = { - 'SANDBOX_WRITE': ':'.join(sb_dirs), - } - myenv = os.environ.copy() - myenv.update(sb_env) - - for mypath in remove_paths: - mypath = self.dest_dir+mypath - self.Output.updateProgress("[%s|%s] %s: %s" % ( - blue("ChrootHandler"),darkred(self.spec_name), - _("removing dir"),mypath, - ) - ) - rc = molecule.utils.remove_path_sandbox(mypath, sb_env) - if rc != 0: - self.Output.updateProgress("[%s|%s] %s: %s: %s" % ( - blue("ChrootHandler"),darkred(self.spec_name), - _("removal failed for"),mypath,rc, - ) - ) - return rc - self.Output.updateProgress("[%s|%s] %s" % ( blue("ChrootHandler"),darkred(self.spec_name), _("hooks completed succesfully"), diff --git a/molecule/specs/plugins/remaster.py b/molecule/specs/plugins/remaster.py index 542740b..09e0758 100644 --- a/molecule/specs/plugins/remaster.py +++ b/molecule/specs/plugins/remaster.py @@ -120,7 +120,7 @@ class IsoUnpackHandler(GenericExecutionStep): ) def dorm(): - shutil.rmtree(self.metadata['chroot_unpack_path'], True) + shutil.rmtree(self.metadata['chroot_tmp_dir'], True) # create chroot path try: @@ -179,7 +179,7 @@ class IsoUnpackHandler(GenericExecutionStep): if not success: try: - shutil.rmtree(self.metadata['chroot_unpack_path'], True) + shutil.rmtree(self.metadata['chroot_tmp_dir'], True) except (shutil.Error, OSError,): pass @@ -199,12 +199,13 @@ class ChrootHandler(BuiltinChrootHandler): self.dest_dir = self.source_dir return 0 - def post_run(self): - self.Output.updateProgress("[%s|%s] %s" % ( - blue("ChrootHandler"),darkred(self.spec_name), - _("executing post_run"), - ) - ) + def kill(self, success = True): + BuiltinChrootHandler.kill(self, success = success) + if not success: + try: + shutil.rmtree(self.metadata['chroot_tmp_dir'], True) + except (shutil.Error, OSError,): + pass return 0 def run(self): @@ -271,6 +272,15 @@ class CdrootHandler(BuiltinCdrootHandler): self.source_chroot = self.metadata['chroot_unpack_path'] return 0 + def kill(self, success = True): + BuiltinCdrootHandler.kill(self, success = success) + if not success: + try: + shutil.rmtree(self.metadata['chroot_tmp_dir'], True) + except (shutil.Error, OSError,): + pass + return 0 + class IsoHandler(BuiltinIsoHandler): def pre_run(self): @@ -288,6 +298,16 @@ class IsoHandler(BuiltinIsoHandler): self.chroot_dir = self.source_chroot return 0 + def kill(self, success = True): + BuiltinIsoHandler.kill(self, success = success) + if not success: + try: + shutil.rmtree(self.metadata['chroot_tmp_dir'], True) + except (shutil.Error, OSError,): + pass + return 0 + + class RemasterSpec(GenericSpec): @staticmethod