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:
parent
7fc0923029
commit
ceee4237bf
|
@ -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'
|
||||
]
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue