X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fssh.py;h=6914d528d6f8e48ff7f8a6af05d765c566fecd13;hp=ad5fb27b8533970ce13b1da96332a6a2650ca903;hb=3121b691debad27fcea1c6e2031e4a2544e42fbf;hpb=2d54ff480b3f135ef4be951c065b4a6d19a138f8 diff --git a/resources/libraries/python/ssh.py b/resources/libraries/python/ssh.py index ad5fb27b85..6914d528d6 100644 --- a/resources/libraries/python/ssh.py +++ b/resources/libraries/python/ssh.py @@ -10,6 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import socket import paramiko from paramiko import RSAKey import StringIO @@ -67,6 +68,17 @@ class SSH(object): format(self._ssh.get_transport().getpeername())) logger.debug('Connections: {0}'.format(str(SSH.__existing_connections))) + def disconnect(self, node): + """Close SSH connection to the node. + + :param node: The node to disconnect from. + :type node: dict + """ + node_hash = self._node_hash(node) + if node_hash in SSH.__existing_connections: + ssh = SSH.__existing_connections.pop(node_hash) + ssh.close() + def exec_command(self, cmd, timeout=10): """Execute SSH command on a new channel on the connected Node. @@ -84,11 +96,17 @@ class SSH(object): self._ssh.get_transport().getpeername(), end-start)) stdout = "" - while True: - buf = chan.recv(self.__MAX_RECV_BUF) - stdout += buf - if not buf: - break + try: + while True: + buf = chan.recv(self.__MAX_RECV_BUF) + stdout += buf + if not buf: + break + except socket.timeout: + logger.error('Caught timeout exception, current contents ' + 'of buffer: {0}'.format(stdout)) + raise + stderr = "" while True: