def setex(binfile): localfile = System.upgrade_dir() + "/" + os.path.basename(binfile) if not os.path.exists(localfile): warn("Unable to set executable permission on {}".format(localfile)) return info("Setting executable permission to {}".format(localfile)) os.chmod(localfile, 0755)
def install(binfile): localfile = os.path.basename(binfile) if not os.path.exists(System.upgrade_dir() + "/" + localfile): warn("Returning from install since, {} not found in upgrade dir".format(localfile)) return cmd = "cd {} && ./{}".format(System.upgrade_dir(), localfile) install("Installing {}".format(localfile)) install("Running command '{}'".format(cmd)) run(cmd)
def download_int(self, link): localfile = os.path.basename(link) dotrel = '{}/.rel/{}'.format(System.controller(), localfile) need_to_copy = False if os.path.exists('{}/{}'.format(System.upgrade_dir(), localfile)) and not self.forced: info('{} is present in upgrade directory. Skipping download'.format(localfile)) cached = True elif os.path.exists(dotrel) and not self.forced: info('{} is present in dotrel directory. Skipping download'.format(localfile)) need_to_copy = True cached = True else: cached = False if cached is False or self.forced is True: try: info('Downloading {}'.format(localfile)) start_time = time.time() try: resp = self.session.get( self.endpoint + '/' + link, stream=True, proxies=self.proxies ) content_length = resp.headers.get('content-length') except requests.exceptions.ConnectionError: warn('Unable to connect to build hub') return except requests.exceptions.ConnectTimeout: warn('Timeout while downloading') return if resp.status_code > 200: warn('Status code: %s' % resp.status_code) return bytes_read = 0 to_read = int(content_length) f = open(System.upgrade_dir() + '/' + localfile, 'wb') for data in resp.iter_content(config.READ_BUFF_SIZE): bytes_read += len(data) f.write(data) done = (50 * bytes_read / to_read) percent_completed = float(bytes_read)/to_read percent_completed = round(percent_completed * 100, 2) sys.stdout.write('\r [get] [%s%s] %0.2f%%' % ( '#' * done, ' ' * (50 - done), percent_completed) ) sys.stdout.flush() except KeyboardInterrupt: f.close() print info('Cleaning up incompleted files') os.remove(System.upgrade_dir() + '/' + localfile) warn('Download interrupted by user') return except IOError: warn('Unable to write to upgrade dir. Make sure directory exists and is writable') return end_time = time.time() f.close() print '' info('Downloaded {} in {:.2f} seconds'.format(humanize(bytes_read), end_time - start_time)) if need_to_copy is True: info('Copying {} from dotrel to upgrade dir'.format(localfile)) shutil.copy2(dotrel, System.upgrade_dir())
def install_thirdparty_bin(self): if self.thirdparty_bin is None: warn('Thirdparty build not available for installation') return self.install_int(self.thirdparty_bin)
def install_netstorm_bin(self): if self.netstorm_bin is None: warn('Netstorm build not available for installation') return self.install_int(self.netstorm_bin)
def download_thirdparty_bin(self): if self.thirdparty_bin is None: warn('No downloads available for thirdparty') return self.download_int(self.thirdparty_bin)
def download_netstorm_bin(self): if self.netstorm_bin is None: warn('No downloads available for netstorm_all') return self.download_int(self.netstorm_bin)