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:
@@ -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
|
||||
from distutils.version import StrictVersion
|
||||
|
||||
@@ -9,8 +11,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
|
||||
|
||||
|
||||
@@ -46,7 +46,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):
|
||||
@@ -72,20 +71,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
|
||||
|
||||
@@ -129,11 +115,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'
|
||||
@@ -148,21 +132,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)
|
||||
|
||||
@@ -175,12 +162,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
|
||||
@@ -232,11 +218,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))
|
||||
@@ -260,10 +247,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))
|
||||
@@ -300,7 +288,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,
|
||||
@@ -458,7 +446,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)
|
||||
|
||||
Reference in New Issue
Block a user