예제 #1
0
    def exec_script(self, script):
        logger.debug("SSHExex.exec_script...")
        logger.debug('script content = {0}'.format(script))
        exec_scheme, exec_parts = uriparse(self.uri)
        ssh = sshclient(exec_parts.hostname, exec_parts.port, self.credential)
        sftp = None
        try:
            sftp = ssh.open_sftp()

            script_name = self.upload_script(sftp, script)
            stdin, stdout, stderr = ssh.exec_command(script_name, bufsize=-1, timeout=None, get_pty=False)
            stdin.close()
            exit_code = stdout.channel.recv_exit_status()
            logger.debug("sshclient exec'd script OK")

            self.remove_script(sftp, script_name)

            return exit_code, stdout.readlines(), stderr.readlines()
        except paramiko.SSHException as sshe:
            raise RetryException(sshe, traceback.format_exc())
        finally:
            try:
                if sftp is not None:
                    sftp.close()
                if ssh is not None:
                    ssh.close()
            except:
                pass
예제 #2
0
파일: sshexec.py 프로젝트: muccg/yabi
    def exec_script(self, script):
        logger.debug("SSHExex.exec_script...")
        logger.debug("script content = {0}".format(script))
        exec_scheme, exec_parts = uriparse(self.uri)
        ssh = sshclient(exec_parts.hostname, exec_parts.port, self.credential)
        sftp = None
        try:
            sftp = ssh.open_sftp()

            script_name = self.upload_script(sftp, script)
            stdin, stdout, stderr = ssh.exec_command(script_name, bufsize=-1, timeout=None, get_pty=False)
            stdin.close()
            exit_code = stdout.channel.recv_exit_status()
            logger.debug("sshclient exec'd script OK")

            self.remove_script(sftp, script_name)

            return exit_code, stdout.readlines(), stderr.readlines()
        except paramiko.SSHException as sshe:
            raise RetryException(sshe, traceback.format_exc())
        finally:
            try:
                if sftp is not None:
                    sftp.close()
                if ssh is not None:
                    ssh.close()
            except:
                pass
예제 #3
0
파일: sshexec.py 프로젝트: muccg/yabi
 def sshclient(self):
     exec_scheme, exec_parts = uriparse(self.uri)
     ssh = sshclient(exec_parts.hostname, exec_parts.port, self.credential)
     try:
         yield ssh
     finally:
         try:
             ssh.close()
         except:
             pass
예제 #4
0
 def sshclient(self):
     exec_scheme, exec_parts = uriparse(self.uri)
     ssh = sshclient(exec_parts.hostname, exec_parts.port, self.credential)
     try:
         yield ssh
     finally:
         try:
             ssh.close()
         except:
             pass
예제 #5
0
 def rm(self, uri):
     """recursively delete a uri"""
     scheme, parts = uriparse(uri)
     logger.debug('{0}'.format(parts.path))
     ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
     try:
         sftp = ssh.open_sftp()
         self._rm(sftp, parts.path)
     except Exception as exc:
         raise RetryException(exc, traceback.format_exc())
     finally:
         try:
             if ssh is not None:
                 ssh.close()
         except:
             pass
예제 #6
0
파일: sftpbackend.py 프로젝트: muccg/yabi
 def rm(self, uri):
     """recursively delete a uri"""
     scheme, parts = uriparse(uri)
     logger.debug("{0}".format(parts.path))
     ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
     try:
         sftp = ssh.open_sftp()
         self._rm(sftp, parts.path)
     except Exception as exc:
         raise RetryException(exc, traceback.format_exc())
     finally:
         try:
             if ssh is not None:
                 ssh.close()
         except:
             pass
예제 #7
0
 def ls(self, uri):
     """ls at uri"""
     self.set_cred(uri)
     scheme, parts = uriparse(uri)
     ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
     try:
         sftp = ssh.open_sftp()
         results = self._do_ls(sftp, parts.path)
         output = {}
         output[parts.path] = results
         return output
     except FileNotFoundError:
         return {}
     except Exception as exc:
         logger.exception("ls: %s" % uri)
         raise RetryException(exc, traceback.format_exc())
     finally:
         try:
             if ssh is not None:
                 ssh.close()
         except:
             pass
예제 #8
0
파일: sftpbackend.py 프로젝트: muccg/yabi
 def ls(self, uri):
     """ls at uri"""
     self.set_cred(uri)
     scheme, parts = uriparse(uri)
     ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
     try:
         sftp = ssh.open_sftp()
         results = self._do_ls(sftp, parts.path)
         output = {}
         output[parts.path] = results
         return output
     except FileNotFoundError:
         return {}
     except Exception as exc:
         logger.exception("ls: %s" % uri)
         raise RetryException(exc, traceback.format_exc())
     finally:
         try:
             if ssh is not None:
                 ssh.close()
         except:
             pass
예제 #9
0
    def mkdir(self, uri):
        """mkdir at uri"""
        self.set_cred(uri)
        scheme, parts = uriparse(uri)
        path = parts.path
        ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
        try:
            sftp = ssh.open_sftp()
            try:
                self._rm(sftp, path)
                logger.debug("deleted existing directory %s OK" % path)
            except Exception as ex:
                logger.debug("could not remove directory %s: %s" % (path, ex))

            def full_path(result, d):
                previous = result[-1] if result else ""
                result.append("%s/%s" % (previous, d))
                return result

            dirs = [p for p in path.split("/") if p.strip() != '']
            dir_full_paths = reduce(full_path, dirs, [])
            non_existant_dirs = dropwhile(lambda d: self.path_exists(sftp, d),
                                          dir_full_paths)

            for d in non_existant_dirs:
                sftp.mkdir(d)

            logger.debug("created dir %s OK" % path)

        except Exception as exc:
            logger.error(exc)
            raise RetryException(exc, traceback.format_exc())
        finally:
            try:
                if ssh is not None:
                    ssh.close()
            except:
                pass
예제 #10
0
파일: sftpbackend.py 프로젝트: muccg/yabi
    def mkdir(self, uri):
        """mkdir at uri"""
        self.set_cred(uri)
        scheme, parts = uriparse(uri)
        path = parts.path
        ssh = sshclient(parts.hostname, parts.port, self.cred.credential)
        try:
            sftp = ssh.open_sftp()
            try:
                self._rm(sftp, path)
                logger.debug("deleted existing directory %s OK" % path)
            except Exception as ex:
                logger.debug("could not remove directory %s: %s" % (path, ex))

            def full_path(result, d):
                previous = result[-1] if result else ""
                result.append("%s/%s" % (previous, d))
                return result

            dirs = [p for p in path.split("/") if p.strip() != ""]
            dir_full_paths = reduce(full_path, dirs, [])
            non_existant_dirs = dropwhile(lambda d: self.path_exists(sftp, d), dir_full_paths)

            for d in non_existant_dirs:
                sftp.mkdir(d)

            logger.debug("created dir %s OK" % path)

        except Exception as exc:
            logger.error(exc)
            raise RetryException(exc, traceback.format_exc())
        finally:
            try:
                if ssh is not None:
                    ssh.close()
            except:
                pass
예제 #11
0
파일: pooling.py 프로젝트: muccg/yabi
 def connect(self, host, port, credential):
     return sshclient(host, port, credential)
예제 #12
0
 def connect(self, host, port, credential):
     return sshclient(host, port, credential)