Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: tools/telemetry/third_party/gsutil/third_party/boto/boto/manage/cmdshell.py

Issue 1260493004: Revert "Add gsutil 4.13 to telemetry/third_party" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/gsutil/third_party/boto/boto/manage/cmdshell.py
diff --git a/tools/telemetry/third_party/gsutil/third_party/boto/boto/manage/cmdshell.py b/tools/telemetry/third_party/gsutil/third_party/boto/boto/manage/cmdshell.py
deleted file mode 100644
index f53227763a08a4c9c1beb94e585ab04c0e4dce40..0000000000000000000000000000000000000000
--- a/tools/telemetry/third_party/gsutil/third_party/boto/boto/manage/cmdshell.py
+++ /dev/null
@@ -1,407 +0,0 @@
-# Copyright (c) 2006-2009 Mitch Garnaat http://garnaat.org/
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish, dis-
-# tribute, sublicense, and/or sell copies of the Software, and to permit
-# persons to whom the Software is furnished to do so, subject to the fol-
-# lowing conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-"""
-The cmdshell module uses the paramiko package to create SSH connections
-to the servers that are represented by instance objects. The module has
-functions for running commands, managing files, and opening interactive
-shell sessions over those connections.
-"""
-from boto.mashups.interactive import interactive_shell
-import boto
-import os
-import time
-import shutil
-import paramiko
-import socket
-import subprocess
-
-from boto.compat import StringIO
-
-class SSHClient(object):
- """
- This class creates a paramiko.SSHClient() object that represents
- a session with an SSH server. You can use the SSHClient object to send
- commands to the remote host and manipulate files on the remote host.
-
- :ivar server: A Server object or FakeServer object.
- :ivar host_key_file: The path to the user's .ssh key files.
- :ivar uname: The username for the SSH connection. Default = 'root'.
- :ivar timeout: The optional timeout variable for the TCP connection.
- :ivar ssh_pwd: An optional password to use for authentication or for
- unlocking the private key.
- """
- def __init__(self, server,
- host_key_file='~/.ssh/known_hosts',
- uname='root', timeout=None, ssh_pwd=None):
- self.server = server
- self.host_key_file = host_key_file
- self.uname = uname
- self._timeout = timeout
- self._pkey = paramiko.RSAKey.from_private_key_file(server.ssh_key_file,
- password=ssh_pwd)
- self._ssh_client = paramiko.SSHClient()
- self._ssh_client.load_system_host_keys()
- self._ssh_client.load_host_keys(os.path.expanduser(host_key_file))
- self._ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- self.connect()
-
- def connect(self, num_retries=5):
- """
- Connect to an SSH server and authenticate with it.
-
- :type num_retries: int
- :param num_retries: The maximum number of connection attempts.
- """
- retry = 0
- while retry < num_retries:
- try:
- self._ssh_client.connect(self.server.hostname,
- username=self.uname,
- pkey=self._pkey,
- timeout=self._timeout)
- return
- except socket.error as xxx_todo_changeme:
- (value, message) = xxx_todo_changeme.args
- if value in (51, 61, 111):
- print('SSH Connection refused, will retry in 5 seconds')
- time.sleep(5)
- retry += 1
- else:
- raise
- except paramiko.BadHostKeyException:
- print("%s has an entry in ~/.ssh/known_hosts and it doesn't match" % self.server.hostname)
- print('Edit that file to remove the entry and then hit return to try again')
- raw_input('Hit Enter when ready')
- retry += 1
- except EOFError:
- print('Unexpected Error from SSH Connection, retry in 5 seconds')
- time.sleep(5)
- retry += 1
- print('Could not establish SSH connection')
-
- def open_sftp(self):
- """
- Open an SFTP session on the SSH server.
-
- :rtype: :class:`paramiko.sftp_client.SFTPClient`
- :return: An SFTP client object.
- """
- return self._ssh_client.open_sftp()
-
- def get_file(self, src, dst):
- """
- Open an SFTP session on the remote host, and copy a file from
- the remote host to the specified path on the local host.
-
- :type src: string
- :param src: The path to the target file on the remote host.
-
- :type dst: string
- :param dst: The path on your local host where you want to
- store the file.
- """
- sftp_client = self.open_sftp()
- sftp_client.get(src, dst)
-
- def put_file(self, src, dst):
- """
- Open an SFTP session on the remote host, and copy a file from
- the local host to the specified path on the remote host.
-
- :type src: string
- :param src: The path to the target file on your local host.
-
- :type dst: string
- :param dst: The path on the remote host where you want to store
- the file.
- """
- sftp_client = self.open_sftp()
- sftp_client.put(src, dst)
-
- def open(self, filename, mode='r', bufsize=-1):
- """
- Open an SFTP session to the remote host, and open a file on
- that host.
-
- :type filename: string
- :param filename: The path to the file on the remote host.
-
- :type mode: string
- :param mode: The file interaction mode.
-
- :type bufsize: integer
- :param bufsize: The file buffer size.
-
- :rtype: :class:`paramiko.sftp_file.SFTPFile`
- :return: A paramiko proxy object for a file on the remote server.
- """
- sftp_client = self.open_sftp()
- return sftp_client.open(filename, mode, bufsize)
-
- def listdir(self, path):
- """
- List all of the files and subdirectories at the specified path
- on the remote host.
-
- :type path: string
- :param path: The base path from which to obtain the list.
-
- :rtype: list
- :return: A list of files and subdirectories at the specified path.
- """
- sftp_client = self.open_sftp()
- return sftp_client.listdir(path)
-
- def isdir(self, path):
- """
- Check the specified path on the remote host to determine if
- it is a directory.
-
- :type path: string
- :param path: The path to the directory that you want to check.
-
- :rtype: integer
- :return: If the path is a directory, the function returns 1.
- If the path is a file or an invalid path, the function
- returns 0.
- """
- status = self.run('[ -d %s ] || echo "FALSE"' % path)
- if status[1].startswith('FALSE'):
- return 0
- return 1
-
- def exists(self, path):
- """
- Check the remote host for the specified path, or a file
- at the specified path. This function returns 1 if the
- path or the file exist on the remote host, and returns 0 if
- the path or the file does not exist on the remote host.
-
- :type path: string
- :param path: The path to the directory or file that you want to check.
-
- :rtype: integer
- :return: If the path or the file exist, the function returns 1.
- If the path or the file do not exist on the remote host,
- the function returns 0.
- """
-
- status = self.run('[ -a %s ] || echo "FALSE"' % path)
- if status[1].startswith('FALSE'):
- return 0
- return 1
-
- def shell(self):
- """
- Start an interactive shell session with the remote host.
- """
- channel = self._ssh_client.invoke_shell()
- interactive_shell(channel)
-
- def run(self, command):
- """
- Run a command on the remote host.
-
- :type command: string
- :param command: The command that you want to send to the remote host.
-
- :rtype: tuple
- :return: This function returns a tuple that contains an integer status,
- the stdout from the command, and the stderr from the command.
-
- """
- boto.log.debug('running:%s on %s' % (command, self.server.instance_id))
- status = 0
- try:
- t = self._ssh_client.exec_command(command)
- except paramiko.SSHException:
- status = 1
- std_out = t[1].read()
- std_err = t[2].read()
- t[0].close()
- t[1].close()
- t[2].close()
- boto.log.debug('stdout: %s' % std_out)
- boto.log.debug('stderr: %s' % std_err)
- return (status, std_out, std_err)
-
- def run_pty(self, command):
- """
- Request a pseudo-terminal from a server, and execute a command on that
- server.
-
- :type command: string
- :param command: The command that you want to run on the remote host.
-
- :rtype: :class:`paramiko.channel.Channel`
- :return: An open channel object.
- """
- boto.log.debug('running:%s on %s' % (command, self.server.instance_id))
- channel = self._ssh_client.get_transport().open_session()
- channel.get_pty()
- channel.exec_command(command)
- return channel
-
- def close(self):
- """
- Close an SSH session and any open channels that are tied to it.
- """
- transport = self._ssh_client.get_transport()
- transport.close()
- self.server.reset_cmdshell()
-
-class LocalClient(object):
- """
- :ivar server: A Server object or FakeServer object.
- :ivar host_key_file: The path to the user's .ssh key files.
- :ivar uname: The username for the SSH connection. Default = 'root'.
- """
- def __init__(self, server, host_key_file=None, uname='root'):
- self.server = server
- self.host_key_file = host_key_file
- self.uname = uname
-
- def get_file(self, src, dst):
- """
- Copy a file from one directory to another.
- """
- shutil.copyfile(src, dst)
-
- def put_file(self, src, dst):
- """
- Copy a file from one directory to another.
- """
- shutil.copyfile(src, dst)
-
- def listdir(self, path):
- """
- List all of the files and subdirectories at the specified path.
-
- :rtype: list
- :return: Return a list containing the names of the entries
- in the directory given by path.
- """
- return os.listdir(path)
-
- def isdir(self, path):
- """
- Check the specified path to determine if it is a directory.
-
- :rtype: boolean
- :return: Returns True if the path is an existing directory.
- """
- return os.path.isdir(path)
-
- def exists(self, path):
- """
- Check for the specified path, or check a file at the specified path.
-
- :rtype: boolean
- :return: If the path or the file exist, the function returns True.
- """
- return os.path.exists(path)
-
- def shell(self):
- raise NotImplementedError('shell not supported with LocalClient')
-
- def run(self):
- """
- Open a subprocess and run a command on the local host.
-
- :rtype: tuple
- :return: This function returns a tuple that contains an integer status
- and a string with the combined stdout and stderr output.
- """
- boto.log.info('running:%s' % self.command)
- log_fp = StringIO()
- process = subprocess.Popen(self.command, shell=True, stdin=subprocess.PIPE,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- while process.poll() is None:
- time.sleep(1)
- t = process.communicate()
- log_fp.write(t[0])
- log_fp.write(t[1])
- boto.log.info(log_fp.getvalue())
- boto.log.info('output: %s' % log_fp.getvalue())
- return (process.returncode, log_fp.getvalue())
-
- def close(self):
- pass
-
-class FakeServer(object):
- """
- This object has a subset of the variables that are normally in a
- :class:`boto.manage.server.Server` object. You can use this FakeServer
- object to create a :class:`boto.manage.SSHClient` object if you
- don't have a real Server object.
-
- :ivar instance: A boto Instance object.
- :ivar ssh_key_file: The path to the SSH key file.
- """
- def __init__(self, instance, ssh_key_file):
- self.instance = instance
- self.ssh_key_file = ssh_key_file
- self.hostname = instance.dns_name
- self.instance_id = self.instance.id
-
-def start(server):
- """
- Connect to the specified server.
-
- :return: If the server is local, the function returns a
- :class:`boto.manage.cmdshell.LocalClient` object.
- If the server is remote, the function returns a
- :class:`boto.manage.cmdshell.SSHClient` object.
- """
- instance_id = boto.config.get('Instance', 'instance-id', None)
- if instance_id == server.instance_id:
- return LocalClient(server)
- else:
- return SSHClient(server)
-
-def sshclient_from_instance(instance, ssh_key_file,
- host_key_file='~/.ssh/known_hosts',
- user_name='root', ssh_pwd=None):
- """
- Create and return an SSHClient object given an
- instance object.
-
- :type instance: :class`boto.ec2.instance.Instance` object
- :param instance: The instance object.
-
- :type ssh_key_file: string
- :param ssh_key_file: A path to the private key file that is
- used to log into the instance.
-
- :type host_key_file: string
- :param host_key_file: A path to the known_hosts file used
- by the SSH client.
- Defaults to ~/.ssh/known_hosts
- :type user_name: string
- :param user_name: The username to use when logging into
- the instance. Defaults to root.
-
- :type ssh_pwd: string
- :param ssh_pwd: The passphrase, if any, associated with
- private key.
- """
- s = FakeServer(instance, ssh_key_file)
- return SSHClient(s, host_key_file, user_name, ssh_pwd)

Powered by Google App Engine
This is Rietveld 408576698