def check_lock(self): """ Returns boolean flag on lock file existence """ cmd = "ls {0}/{1}".format(self.deploy_path, self.get_lock_name()) # log.debug('{0} :: Executing - "{1}"'.format(__name__, cmd)) log.info('{0} :: Checking for lock file at {1}.'.format( __name__, self.target)) try: ret = ssh_command_target(cmd, self.target, self.user, self.key_path) except Exception as e: log.error(__name__ + ' :: ' + e.message) raise DeployLockerError(message=exit_codes[16], exit_code=16) # Pull the lock file handle from try: file_handle = ret['stdout'][0].split('/')[-1].strip() except (IndexError, ValueError): log.info('{0} :: No lock file exists.'.format( __name__, self.target)) return False if file_handle == self.get_lock_name(): log.info('{0} :: {1} has lock.'.format(__name__, self.user)) return True else: log.info('{0} :: Another user has lock.'.format(__name__)) return False
def check_lock(self): """ Returns boolean flag on lock file existence """ cmd = "ls {0}/{1}".format(self.deploy_path, self.get_lock_name()) # log.debug('{0} :: Executing - "{1}"'.format(__name__, cmd)) log.info('{0} :: Checking for lock file at {1}.'.format( __name__, self.target)) try: ret = ssh_command_target(cmd, self.target, self.user, self.key_path) except Exception as e: log.error(__name__ + ' :: ' + e.message) raise DeployLockerError(message=exit_codes[16], exit_code=16) # Pull the lock file handle from try: file_handle = ret['stdout'][0].split('/')[-1].strip() except (IndexError, ValueError): log.info('{0} :: No lock file exists.'.format(__name__, self.target)) return False if file_handle == self.get_lock_name(): log.info('{0} :: {1} has lock.'.format(__name__, self.user)) return True else: log.info('{0} :: Another user has lock.'.format(__name__)) return False
def _make_release_tag(tag, author): """ Generates a release tag for the deploy """ try: GitMethods()._dulwich_tag(tag, author) except Exception as e: log.error(str(e)) raise DeployDriverError(message=exit_codes[12], exit_code=12)
def log_archive(self): """ Dumps the active log to the archive. Returns True on successful logging, false otherwise. """ self._check_and_add(self.path, self.LOGNAME_ARCHIVE) cmd = "cat {0}/{1} >> {2}/{3}".format(self.path, self.LOGNAME_ACTIVE, self.path, self.LOGNAME_ARCHIVE) # Write remote log line try: ssh_command_target(cmd, self.target, self.user, self.key_path) except: log.error("Failed to append active log to archive.") return False cmd = "rm {0}/{1}".format(self.path, self.LOGNAME_ACTIVE) # Write remote log line try: ssh_command_target(cmd, self.target, self.user, self.key_path) except: log.error("Failed to append active log to archive.") return False return True
def add_lock(self): """ Write the lock file """ cmd = "touch {0}/{1}".format(self.deploy_path, self.get_lock_name()) try: ssh_command_target(cmd, self.target, self.user, self.key_path) except Exception as e: log.error(__name__ + ' :: Failed to create lock -> ' + e.message) raise DeployLockerError(message=exit_codes[16], exit_code=16) # Logging log.info('{0} :: Created lock file at {1}:{2}/{3}.'.format( __name__, self.target, self.deploy_path, self.get_lock_name())) deploy_log.log('Created lock.')
def remove_lock(self): """ Remove the lock file """ log.info('{0} :: SSH Lock destroy.'.format(__name__)) cmd = "rm {0}/{1}".format(self.deploy_path, self.get_lock_name()) try: ssh_command_target(cmd, self.target, self.user, self.key_path) except Exception as e: log.error(__name__ + ' :: Failed ot remove lock -> ' + e.message) raise DeployLockerError(message=exit_codes[16], exit_code=16) # Logging log.info('{0} :: Removed lock file at {1}:{2}/{3}.'.format( __name__, self.target, self.deploy_path, self.get_lock_name())) deploy_log.log('Removed lock.')
def _call_hooks(path, phase, dryrun=False): """Performs calls on path/phase dependent hooks :param path: hooks path :param phase: deploy phase """ if os.path.exists(path): sorted_path = sorted(os.listdir(path)) for item in sorted_path: item_phase = item.split('.')[0] # CALL hook and log if phase == item_phase: cmd = path + '/' + item log_msg = 'CALLING \'{0}\' ON PHASE \'{1}\''.format( cmd, phase ) log.info(__name__ + ' :: {0}'.format(log_msg)) if dryrun: print '' with open(cmd) as f: for line in f.readlines(): if not line[-1] == '\n': print '\t' + line[:-1] else: print '\t' + line[:-1] print '' else: proc = subprocess.Popen(path + '/' + item, stdout=subprocess.PIPE, stderr=subprocess.PIPE) log.info(cmd + ' OUT -> ' + '; '.join( filter(lambda x: x, proc.communicate()))) # Flag a failed hook if proc.returncode: raise DeployDriverError(exit_code=17, message=exit_codes[17]) else: log.error(__name__ + ' :: CANNOT FIND HOOK PATH \'{0}\''.format( path)) raise DeployDriverError(exit_code=17, message=exit_codes[17])
def _call_hooks(path, phase, dryrun=False): """Performs calls on path/phase dependent hooks :param path: hooks path :param phase: deploy phase """ if os.path.exists(path): sorted_path = sorted(os.listdir(path)) for item in sorted_path: item_phase = item.split('.')[0] # CALL hook and log if phase == item_phase: cmd = path + '/' + item log_msg = 'CALLING \'{0}\' ON PHASE \'{1}\''.format(cmd, phase) log.info(__name__ + ' :: {0}'.format(log_msg)) if dryrun: print '' with open(cmd) as f: for line in f.readlines(): if not line[-1] == '\n': print '\t' + line[:-1] else: print '\t' + line[:-1] print '' else: proc = subprocess.Popen(path + '/' + item, stdout=subprocess.PIPE, stderr=subprocess.PIPE) log.info( cmd + ' OUT -> ' + '; '.join(filter(lambda x: x, proc.communicate()))) # Flag a failed hook if proc.returncode: raise DeployDriverError(exit_code=17, message=exit_codes[17]) else: log.error(__name__ + ' :: CANNOT FIND HOOK PATH \'{0}\''.format(path)) raise DeployDriverError(exit_code=17, message=exit_codes[17])
def log(self, line): """ Handles log writing to remote file :param line: string; the line to be logged Returns True on successful logging, false otherwise. """ self._check_and_add(self.path, self.LOGNAME_ACTIVE) # escape logline re.escape(line) cmd = "echo '{0}' >> {1}/{2}".format(line, self.path, self.LOGNAME_ACTIVE) # Write remote log line try: ssh_command_target(cmd, self.target, self.user, self.key_path) except: log.error("Failed to log '{0}'".format(line)) return False return True