Upgrade tests will use modern SSHClient API

run_on_remote and run_on_remote_get_results eliminated
SSHClient is memorized, so cache is not required

Change-Id: I0b364ace4e9e198cda6a961b31a16097c70d07a0
This commit is contained in:
Alexey Stepanov 2016-08-12 10:20:42 +03:00
parent 7fc0923029
commit ceee4237bf
3 changed files with 41 additions and 51 deletions

View File

@ -18,3 +18,10 @@ from fuelweb_test.tests.tests_upgrade import test_data_driven_upgrade # noqa
from fuelweb_test.tests.tests_upgrade import test_data_driven_upgrade_net_tmpl # noqa
from fuelweb_test.tests.tests_upgrade import test_data_driven_upgrade_plugin # noqa
from fuelweb_test.tests.tests_upgrade import upgrader_tool # noqa
__all__ = [
'test_data_driven_upgrade',
'test_data_driven_upgrade_net_tmpl',
'test_data_driven_upgrade_plugin',
'upgrader_tool'
]

View File

@ -1,3 +1,5 @@
from __future__ import unicode_literals
import os
# pylint: disable=import-error
# pylint: disable=no-name-in-module
@ -13,8 +15,6 @@ from proboscis.asserts import assert_not_equal
from fuelweb_test import logger
from fuelweb_test import settings
from fuelweb_test.helpers.utils import run_on_remote
from fuelweb_test.helpers.utils import run_on_remote_get_results
from fuelweb_test.tests.base_test_case import TestBasic
@ -50,7 +50,6 @@ class DataDrivenUpgradeBase(TestBasic):
if hasattr(self.env, "reinstall_master_node"):
self.reinstall_master_node = self.env.reinstall_master_node
# pylint: enable=no-member
self.__admin_remote = None
@property
def backup_path(self):
@ -76,20 +75,7 @@ class DataDrivenUpgradeBase(TestBasic):
@property
def admin_remote(self):
try:
self.__admin_remote.execute("ls")
# I'm not sure which exception will be raised by paramiko
except Exception as e:
logger.debug(
"Got exception in admin_remote: {!r}\n Reconnecting".format(e)
)
self.__admin_remote = self.env.d_env.get_admin_remote()
return self.__admin_remote
@admin_remote.deleter
def admin_remote(self):
if self.__admin_remote:
self.__admin_remote.clear()
return self.env.d_env.get_admin_remote()
# pylint: disable=no-member
@ -133,11 +119,9 @@ class DataDrivenUpgradeBase(TestBasic):
def cleanup(self):
os.remove(self.local_path)
os.remove(self.repos_local_path)
del self.admin_remote
def install_octane(self):
""" Install fuel-octane package to master node"""
del self.admin_remote
conf_file = None
if settings.FUEL_PROPOSED_REPO_URL:
conf_file = '/etc/yum.repos.d/fuel-proposed.repo'
@ -152,21 +136,24 @@ class DataDrivenUpgradeBase(TestBasic):
settings.FUEL_PROPOSED_REPO_URL,
conf_file)
run_on_remote(self.admin_remote, cmd)
# pylint: disable=no-member
self.admin_remote.check_call(cmd)
# pylint: enable=no-member
logger.info("Removing previously installed fuel-octane")
run_on_remote(self.admin_remote, "yum remove -y fuel-octane",
raise_on_assert=False)
run_on_remote(
self.admin_remote,
# pylint: disable=no-member
self.admin_remote.check_call(
"yum remove -y fuel-octane",
raise_on_er=False)
self.admin_remote.check_call(
"rm -rf /usr/lib/python2.*/site-packages/octane",
raise_on_assert=False)
raise_on_er=False)
logger.info("Installing fuel-octane")
run_on_remote(self.admin_remote, "yum install -y fuel-octane")
self.admin_remote.check_call("yum install -y fuel-octane")
octane_log = ''.join(run_on_remote(
self.admin_remote,
"rpm -q --changelog fuel-octane"))
octane_log = self.admin_remote.check_call(
"rpm -q --changelog fuel-octane").stdout_str
# pylint: enable=no-member
logger.info("Octane changes:")
logger.info(octane_log)
@ -179,12 +166,11 @@ class DataDrivenUpgradeBase(TestBasic):
os.path.abspath(os.path.dirname(__file__)),
"octane_patcher.sh"),
"/tmp/octane_patcher.sh")
# pylint: enable=no-member
run_on_remote(
self.admin_remote,
self.admin_remote.check_call(
"bash /tmp/octane_patcher.sh {}".format(
settings.OCTANE_PATCHES))
# pylint: enable=no-member
if settings.FUEL_PROPOSED_REPO_URL:
# pylint: disable=no-member
@ -236,11 +222,12 @@ class DataDrivenUpgradeBase(TestBasic):
self.install_octane()
cmd = "mkdir -p {}".format(self.remote_dir_for_backups)
run_on_remote(self.admin_remote, cmd)
# pylint: disable=no-member
self.admin_remote.check_call(cmd)
self.octane_action("backup", backup_path)
logger.info("Downloading {}".format(backup_path))
# pylint: disable=no-member
self.admin_remote.download(backup_path, local_path)
# pylint: enable=no-member
assert_true(os.path.exists(local_path))
@ -264,10 +251,11 @@ class DataDrivenUpgradeBase(TestBasic):
self.install_octane()
cmd = "mkdir -p {}".format(self.remote_dir_for_backups)
run_on_remote(self.admin_remote, cmd)
# pylint: disable=no-member
self.admin_remote.check_call(cmd)
logger.info("Uploading {}".format(local_path))
# pylint: disable=no-member
self.admin_remote.upload(local_path, backup_path)
# pylint: enable=no-member
logger.info("Applying backup from {}".format(backup_path))
@ -304,7 +292,7 @@ class DataDrivenUpgradeBase(TestBasic):
logger.info("Applying fix for LP:1561092")
for node in d_nodes:
with self.fuel_web.get_ssh_for_node(node_name=node.name) as remote:
run_on_remote(remote, "service mcollective restart")
remote.check_call("service mcollective restart")
def revert_backup(self):
assert_not_equal(self.backup_snapshot_name, None,
@ -462,7 +450,7 @@ class DataDrivenUpgradeBase(TestBasic):
logger.info("Verify bootstrap on slave {0}".format(remote.host))
cmd = 'cat /etc/*release'
output = run_on_remote_get_results(remote, cmd)['stdout_str'].lower()
output = remote.check_call(cmd).stdout_str.lower()
assert_true(os_type in output,
"Slave {0} doesn't use {1} image for bootstrap "
"after {1} images were enabled, /etc/release "

View File

@ -1,5 +1,6 @@
from __future__ import unicode_literals
import os
import signal
from devops.helpers.templates import yaml_template_load
from proboscis import test
@ -7,7 +8,6 @@ from proboscis.asserts import assert_true
from fuelweb_test import settings, logger
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test.helpers.utils import run_on_remote_get_results
from fuelweb_test.tests.tests_upgrade.test_data_driven_upgrade_base import \
DataDrivenUpgradeBase
@ -102,20 +102,15 @@ class UpgradeCustom(DataDrivenUpgradeBase):
cmd = "cd {} && ".format(self.tarball_remote_dir)
cmd += "tar -xpvf" if ext.endswith("tar") else "lrzuntar"
run_on_remote_get_results(self.admin_remote, cmd)
# pylint: disable=no-member
self.admin_remote.check_call(cmd)
# pylint: enable=no-member
cmd = "sh {} --no-rollback --password {}".format(
os.path.join(self.tarball_remote_dir, "upgrade.sh"),
settings.KEYSTONE_CREDS['password'])
class UpgradeTimeoutError(Exception):
pass
def handler():
raise UpgradeTimeoutError("Upgrade via tarball timed out!")
signal.signal(signal.SIGALRM, handler)
signal.alarm(60 * 60)
run_on_remote_get_results(self.admin_remote, cmd)
signal.alarm(0)
# pylint: disable=no-member
self.admin_remote.check_call(cmd, timeout=60 * 60)
# pylint: enable=no-member
self.env.make_snapshot(self.restore_snapshot_name, is_make=True)