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_net_tmpl # noqa
|
||||||
from fuelweb_test.tests.tests_upgrade import test_data_driven_upgrade_plugin # noqa
|
from fuelweb_test.tests.tests_upgrade import test_data_driven_upgrade_plugin # noqa
|
||||||
from fuelweb_test.tests.tests_upgrade import upgrader_tool # 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
|
import os
|
||||||
# pylint: disable=import-error
|
# pylint: disable=import-error
|
||||||
# pylint: disable=no-name-in-module
|
# 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 logger
|
||||||
from fuelweb_test import settings
|
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
|
from fuelweb_test.tests.base_test_case import TestBasic
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +50,6 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
if hasattr(self.env, "reinstall_master_node"):
|
if hasattr(self.env, "reinstall_master_node"):
|
||||||
self.reinstall_master_node = self.env.reinstall_master_node
|
self.reinstall_master_node = self.env.reinstall_master_node
|
||||||
# pylint: enable=no-member
|
# pylint: enable=no-member
|
||||||
self.__admin_remote = None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def backup_path(self):
|
def backup_path(self):
|
||||||
|
@ -76,20 +75,7 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def admin_remote(self):
|
def admin_remote(self):
|
||||||
try:
|
return self.env.d_env.get_admin_remote()
|
||||||
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()
|
|
||||||
|
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
|
|
||||||
|
@ -133,11 +119,9 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
os.remove(self.local_path)
|
os.remove(self.local_path)
|
||||||
os.remove(self.repos_local_path)
|
os.remove(self.repos_local_path)
|
||||||
del self.admin_remote
|
|
||||||
|
|
||||||
def install_octane(self):
|
def install_octane(self):
|
||||||
""" Install fuel-octane package to master node"""
|
""" Install fuel-octane package to master node"""
|
||||||
del self.admin_remote
|
|
||||||
conf_file = None
|
conf_file = None
|
||||||
if settings.FUEL_PROPOSED_REPO_URL:
|
if settings.FUEL_PROPOSED_REPO_URL:
|
||||||
conf_file = '/etc/yum.repos.d/fuel-proposed.repo'
|
conf_file = '/etc/yum.repos.d/fuel-proposed.repo'
|
||||||
|
@ -152,21 +136,24 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
settings.FUEL_PROPOSED_REPO_URL,
|
settings.FUEL_PROPOSED_REPO_URL,
|
||||||
conf_file)
|
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")
|
logger.info("Removing previously installed fuel-octane")
|
||||||
run_on_remote(self.admin_remote, "yum remove -y fuel-octane",
|
# pylint: disable=no-member
|
||||||
raise_on_assert=False)
|
self.admin_remote.check_call(
|
||||||
run_on_remote(
|
"yum remove -y fuel-octane",
|
||||||
self.admin_remote,
|
raise_on_er=False)
|
||||||
|
self.admin_remote.check_call(
|
||||||
"rm -rf /usr/lib/python2.*/site-packages/octane",
|
"rm -rf /usr/lib/python2.*/site-packages/octane",
|
||||||
raise_on_assert=False)
|
raise_on_er=False)
|
||||||
logger.info("Installing fuel-octane")
|
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(
|
octane_log = self.admin_remote.check_call(
|
||||||
self.admin_remote,
|
"rpm -q --changelog fuel-octane").stdout_str
|
||||||
"rpm -q --changelog fuel-octane"))
|
# pylint: enable=no-member
|
||||||
logger.info("Octane changes:")
|
logger.info("Octane changes:")
|
||||||
logger.info(octane_log)
|
logger.info(octane_log)
|
||||||
|
|
||||||
|
@ -179,12 +166,11 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
os.path.abspath(os.path.dirname(__file__)),
|
os.path.abspath(os.path.dirname(__file__)),
|
||||||
"octane_patcher.sh"),
|
"octane_patcher.sh"),
|
||||||
"/tmp/octane_patcher.sh")
|
"/tmp/octane_patcher.sh")
|
||||||
# pylint: enable=no-member
|
|
||||||
|
|
||||||
run_on_remote(
|
self.admin_remote.check_call(
|
||||||
self.admin_remote,
|
|
||||||
"bash /tmp/octane_patcher.sh {}".format(
|
"bash /tmp/octane_patcher.sh {}".format(
|
||||||
settings.OCTANE_PATCHES))
|
settings.OCTANE_PATCHES))
|
||||||
|
# pylint: enable=no-member
|
||||||
|
|
||||||
if settings.FUEL_PROPOSED_REPO_URL:
|
if settings.FUEL_PROPOSED_REPO_URL:
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
|
@ -236,11 +222,12 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
self.install_octane()
|
self.install_octane()
|
||||||
|
|
||||||
cmd = "mkdir -p {}".format(self.remote_dir_for_backups)
|
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)
|
self.octane_action("backup", backup_path)
|
||||||
logger.info("Downloading {}".format(backup_path))
|
logger.info("Downloading {}".format(backup_path))
|
||||||
# pylint: disable=no-member
|
|
||||||
self.admin_remote.download(backup_path, local_path)
|
self.admin_remote.download(backup_path, local_path)
|
||||||
# pylint: enable=no-member
|
# pylint: enable=no-member
|
||||||
assert_true(os.path.exists(local_path))
|
assert_true(os.path.exists(local_path))
|
||||||
|
@ -264,10 +251,11 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
self.install_octane()
|
self.install_octane()
|
||||||
|
|
||||||
cmd = "mkdir -p {}".format(self.remote_dir_for_backups)
|
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))
|
logger.info("Uploading {}".format(local_path))
|
||||||
# pylint: disable=no-member
|
|
||||||
self.admin_remote.upload(local_path, backup_path)
|
self.admin_remote.upload(local_path, backup_path)
|
||||||
# pylint: enable=no-member
|
# pylint: enable=no-member
|
||||||
logger.info("Applying backup from {}".format(backup_path))
|
logger.info("Applying backup from {}".format(backup_path))
|
||||||
|
@ -304,7 +292,7 @@ class DataDrivenUpgradeBase(TestBasic):
|
||||||
logger.info("Applying fix for LP:1561092")
|
logger.info("Applying fix for LP:1561092")
|
||||||
for node in d_nodes:
|
for node in d_nodes:
|
||||||
with self.fuel_web.get_ssh_for_node(node_name=node.name) as remote:
|
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):
|
def revert_backup(self):
|
||||||
assert_not_equal(self.backup_snapshot_name, None,
|
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))
|
logger.info("Verify bootstrap on slave {0}".format(remote.host))
|
||||||
|
|
||||||
cmd = 'cat /etc/*release'
|
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,
|
assert_true(os_type in output,
|
||||||
"Slave {0} doesn't use {1} image for bootstrap "
|
"Slave {0} doesn't use {1} image for bootstrap "
|
||||||
"after {1} images were enabled, /etc/release "
|
"after {1} images were enabled, /etc/release "
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import signal
|
|
||||||
|
|
||||||
from devops.helpers.templates import yaml_template_load
|
from devops.helpers.templates import yaml_template_load
|
||||||
from proboscis import test
|
from proboscis import test
|
||||||
|
@ -7,7 +8,6 @@ from proboscis.asserts import assert_true
|
||||||
|
|
||||||
from fuelweb_test import settings, logger
|
from fuelweb_test import settings, logger
|
||||||
from fuelweb_test.helpers.decorators import log_snapshot_after_test
|
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 \
|
from fuelweb_test.tests.tests_upgrade.test_data_driven_upgrade_base import \
|
||||||
DataDrivenUpgradeBase
|
DataDrivenUpgradeBase
|
||||||
|
|
||||||
|
@ -102,20 +102,15 @@ class UpgradeCustom(DataDrivenUpgradeBase):
|
||||||
cmd = "cd {} && ".format(self.tarball_remote_dir)
|
cmd = "cd {} && ".format(self.tarball_remote_dir)
|
||||||
cmd += "tar -xpvf" if ext.endswith("tar") else "lrzuntar"
|
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(
|
cmd = "sh {} --no-rollback --password {}".format(
|
||||||
os.path.join(self.tarball_remote_dir, "upgrade.sh"),
|
os.path.join(self.tarball_remote_dir, "upgrade.sh"),
|
||||||
settings.KEYSTONE_CREDS['password'])
|
settings.KEYSTONE_CREDS['password'])
|
||||||
|
|
||||||
class UpgradeTimeoutError(Exception):
|
# pylint: disable=no-member
|
||||||
pass
|
self.admin_remote.check_call(cmd, timeout=60 * 60)
|
||||||
|
# pylint: enable=no-member
|
||||||
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)
|
|
||||||
|
|
||||||
self.env.make_snapshot(self.restore_snapshot_name, is_make=True)
|
self.env.make_snapshot(self.restore_snapshot_name, is_make=True)
|
||||||
|
|
Loading…
Reference in New Issue