From 9f2850278a797fc33f0371ea04c92aad4dd87f3a Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 29 Nov 2015 19:07:36 +0100 Subject: [PATCH] openstack: TeuthologyOpenStack.ssh continuous output Instead of waiting for the completion of the ssh command, display stdout/stderr continously. Signed-off-by: Loic Dachary --- teuthology/openstack/__init__.py | 22 ++++++++++----------- teuthology/openstack/test/test_openstack.py | 19 +++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/teuthology/openstack/__init__.py b/teuthology/openstack/__init__.py index 4fcb8d77b6..009a1d1a3c 100644 --- a/teuthology/openstack/__init__.py +++ b/teuthology/openstack/__init__.py @@ -523,17 +523,17 @@ ssh access : ssh {identity}{username}@{ip} # logs in /usr/share/nginx/ log.debug("ssh overriding key with " + self.key_filename) client_args['key_filename'] = self.key_filename client = connection.connect(**client_args) - stdin, stdout, stderr = client.exec_command(command) - stdout.channel.settimeout(300) - out = '' - try: - out = stdout.read() - log.debug('ssh stdout ' + command + ' ' + out) - except Exception: - log.exception('ssh ' + command + ' failed') - err = stderr.read() - log.debug('ssh stderr ' + command + ' ' + err) - return out + ' ' + err + # get the I/O channel to iterate line by line + transport = client.get_transport() + channel = transport.open_session() + channel.get_pty() + channel.settimeout(900) + output = channel.makefile('r', 1) + log.debug(":ssh@" + ip + ":" + command) + channel.exec_command(command) + for line in iter(output.readline, b''): + log.info(line.strip()) + return channel.recv_exit_status() def verify_openstack(self): """ diff --git a/teuthology/openstack/test/test_openstack.py b/teuthology/openstack/test/test_openstack.py index c46287be3f..06bd9486cc 100644 --- a/teuthology/openstack/test/test_openstack.py +++ b/teuthology/openstack/test/test_openstack.py @@ -280,15 +280,16 @@ openstack keypair delete {key_name} || true teuthology.teuthology_suite = 'echo --' teuthology.main() - assert 'Ubuntu 14.04' in teuthology.ssh("lsb_release -a") - variables = teuthology.ssh("grep 'substituded variables' /var/log/cloud-init.log") - assert "nworkers=" + str(args.simultaneous_jobs) in variables - assert "username=" + teuthology.username in variables - assert "upload=--archive-upload user@archive:/tmp" in variables - assert "clone=git clone" in variables - assert os.environ['OS_AUTH_URL'] in variables - - assert " ".join(teuthology_argv) in caplog.text() + assert 0 == teuthology.ssh("lsb_release -a") + assert 0 == teuthology.ssh("grep 'substituded variables' /var/log/cloud-init.log") + l = caplog.text() + assert 'Ubuntu 14.04' in l + assert "nworkers=" + str(args.simultaneous_jobs) in l + assert "username=" + teuthology.username in l + assert "upload=--archive-upload user@archive:/tmp" in l + assert "clone=git clone" in l + assert os.environ['OS_AUTH_URL'] in l + assert " ".join(teuthology_argv) in l if self.can_create_floating_ips: ip = teuthology.get_floating_ip(self.name) -- 2.39.5