예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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.')
예제 #8
0
    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.')
예제 #9
0
    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.')
예제 #10
0
    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.')
예제 #11
0
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])
예제 #12
0
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])
예제 #13
0
    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
예제 #14
0
    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