From a652a6108d0ed11feab6ce99df44084b8c9ee89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20de=20Saint=20Martin?= <cedric.dsm@tiolive.com> Date: Thu, 11 Oct 2012 15:58:38 +0200 Subject: [PATCH] Factor to help testing + add 'finally' to ALWAYS remove tmpdir --- slapos/grid/SlapObject.py | 102 ++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/slapos/grid/SlapObject.py b/slapos/grid/SlapObject.py index 7d060d61d..da3a53b1d 100644 --- a/slapos/grid/SlapObject.py +++ b/slapos/grid/SlapObject.py @@ -90,58 +90,41 @@ class Software(object): Installs from buildout otherwise. """ self.logger.info("Installing software release %s..." % self.url) - tarname = self.software_url_hash cache_dir = tempfile.mkdtemp() - tarpath = os.path.join(cache_dir, tarname) - # Check if we can download from cache - if (not os.path.exists(self.software_path)) \ - and download_network_cached( - self.download_binary_cache_url, - self.download_binary_dir_url, - self.url, self.software_root, - self.software_url_hash, - tarpath, self.logger, - self.signature_certificate_list, - self.download_from_binary_cache_url_blacklist): - tar = tarfile.open(tarpath) - try: - self.logger.info("Extracting archive of cached software release...") - tar.extractall(path=self.software_root) - finally: - tar.close() - else: - self._install_from_buildout() - - # Upload to binary cache if possible - blacklisted = False - for url in self.upload_to_binary_cache_url_blacklist: - if self.url.startswith(url): - blacklisted = True - self.logger.debug("Can't download from binary cache: " - "Software Release URL is blacklisted.") - if (self.software_root and self.url and self.software_url_hash \ - and self.upload_binary_cache_url \ - and self.upload_binary_dir_url \ - and not blacklisted): - self.logger.info("Creating archive of software release...") - tar = tarfile.open(tarpath, "w:gz") + try: + tarpath = os.path.join(cache_dir, self.software_url_hash) + # Check if we can download from cache + if (not os.path.exists(self.software_path)) \ + and download_network_cached( + self.download_binary_cache_url, + self.download_binary_dir_url, + self.url, self.software_root, + self.software_url_hash, + tarpath, self.logger, + self.signature_certificate_list, + self.download_from_binary_cache_url_blacklist): + tar = tarfile.open(tarpath) try: - tar.add(self.software_path, arcname=self.software_url_hash) + self.logger.info("Extracting archive of cached software release...") + tar.extractall(path=self.software_root) finally: tar.close() - self.logger.info("Trying to upload archive of software release...") - upload_network_cached( - self.software_root, - self.url, self.software_url_hash, - self.upload_binary_cache_url, - self.upload_binary_dir_url, - tarpath, self.logger, - self.signature_private_key_file, - self.shacache_cert_file, - self.shacache_key_file, - self.shadir_cert_file, - self.shadir_key_file) - shutil.rmtree(cache_dir) + else: + self._install_from_buildout() + # Upload to binary cache if possible + blacklisted = False + for url in self.upload_to_binary_cache_url_blacklist: + if self.url.startswith(url): + blacklisted = True + self.logger.debug("Can't upload from binary cache: " + "Software Release URL is blacklisted.") + if (self.software_root and self.url and self.software_url_hash \ + and self.upload_binary_cache_url \ + and self.upload_binary_dir_url \ + and not blacklisted): + self.uploadSoftwareRelease(tarpath) + finally: + shutil.rmtree(cache_dir) def _install_from_buildout(self): """ Fetches buildout configuration from the server, run buildout with @@ -192,6 +175,29 @@ class Software(object): finally: shutil.rmtree(extends_cache) + def uploadSoftwareRelease(self, tarpath): + """ + Try to tar and upload an installed Software Release. + """ + self.logger.info("Creating archive of software release...") + tar = tarfile.open(tarpath, "w:gz") + try: + tar.add(self.software_path, arcname=self.software_url_hash) + finally: + tar.close() + self.logger.info("Trying to upload archive of software release...") + upload_network_cached( + self.software_root, + self.url, self.software_url_hash, + self.upload_binary_cache_url, + self.upload_binary_dir_url, + tarpath, self.logger, + self.signature_private_key_file, + self.shacache_cert_file, + self.shacache_key_file, + self.shadir_cert_file, + self.shadir_key_file) + def destroy(self): """Removes software release.""" def retry(func, path, exc): -- 2.30.9