From 168033a0d5829aa9c9690c5d2baea42e26c74054 Mon Sep 17 00:00:00 2001 From: Artem Grechanichenko Date: Thu, 28 Apr 2016 15:31:34 +0300 Subject: [PATCH] Refactor Setup_environment Move some actions executing after master node boostrapping to TestBasics action to using them in separate_master node deployment Implements blueprint: fuelwebclient-refactoring Change-Id: Idb8954c71861840124a805e8982a2fe63c94376f --- fuel_tests/models/manager.py | 1 + fuelweb_test/models/environment.py | 111 +---------------- fuelweb_test/tests/base_test_case.py | 117 ++++++++++++++++++ fuelweb_test/tests/test_backup_restore.py | 2 +- .../tests_upgrade/test_data_driven_upgrade.py | 8 +- system_test/actions/base.py | 1 + 6 files changed, 125 insertions(+), 115 deletions(-) diff --git a/fuel_tests/models/manager.py b/fuel_tests/models/manager.py index 492d2f692..907d7a42a 100644 --- a/fuel_tests/models/manager.py +++ b/fuel_tests/models/manager.py @@ -193,6 +193,7 @@ class Manager(Basic): else: with TimeStat("setup_environment", is_uniq=True): self.env.setup_environment() + self.fuel_post_install_actions() self.env.make_snapshot("empty", is_make=True) self.env.resume_environment() diff --git a/fuelweb_test/models/environment.py b/fuelweb_test/models/environment.py index 93ca8354f..d1ad43e9e 100644 --- a/fuelweb_test/models/environment.py +++ b/fuelweb_test/models/environment.py @@ -40,7 +40,6 @@ from fuelweb_test.helpers.fuel_actions import PostgresActions from fuelweb_test.helpers.fuel_actions import NessusActions from fuelweb_test.helpers.fuel_actions import FuelBootstrapCliActions from fuelweb_test.helpers.ssh_manager import SSHManager -from fuelweb_test.helpers.utils import erase_data_from_hdd from fuelweb_test.helpers.utils import TimeStat from fuelweb_test.helpers import multiple_networks_hacks from fuelweb_test.models.fuel_web_client import FuelWebClient @@ -383,20 +382,10 @@ class EnvironmentModel(object): name) subprocess.check_call(cmd, shell=True) - def reinstall_master_node(self): - """Erase boot sector and run setup_environment""" - with self.d_env.get_admin_remote() as remote: - erase_data_from_hdd(remote, mount_point='/boot') - remote.execute("/sbin/shutdown") - self.d_env.nodes().admin.destroy() - self.insert_cdrom_tray() - self.setup_environment() - def setup_environment(self, custom=settings.CUSTOM_ENV, build_images=settings.BUILD_IMAGES, iso_connect_as=settings.ADMIN_BOOT_DEVICE, - security=settings.SECURITY_TEST, - force_ssl=settings.FORCE_HTTPS_MASTER_NODE): + security=settings.SECURITY_TEST): # Create environment and start the Fuel master node admin = self.d_env.nodes().admin self.d_env.start([admin]) @@ -426,105 +415,7 @@ class EnvironmentModel(object): self.admin_actions.modify_configs(self.d_env.router()) self.kill_wait_for_external_config() self.wait_bootstrap() - - if settings.UPDATE_FUEL: - # Update Ubuntu packages - self.admin_actions.upload_packages( - local_packages_dir=settings.UPDATE_FUEL_PATH, - centos_repo_path=None, - ubuntu_repo_path=settings.LOCAL_MIRROR_UBUNTU) - self.admin_actions.wait_for_fuel_ready() - time.sleep(10) - self.set_admin_keystone_password() - self.sync_time(['admin']) - if settings.UPDATE_MASTER: - if settings.UPDATE_FUEL_MIRROR: - for i, url in enumerate(settings.UPDATE_FUEL_MIRROR): - conf_file = '/etc/yum.repos.d/temporary-{}.repo'.format(i) - cmd = ("echo -e" - " '[temporary-{0}]\nname=" - "temporary-{0}\nbaseurl={1}/" - "\ngpgcheck=0\npriority=" - "1' > {2}").format(i, url, conf_file) - - self.ssh_manager.execute( - ip=self.ssh_manager.admin_ip, - cmd=cmd - ) - self.admin_install_updates() - if settings.MULTIPLE_NETWORKS: - self.describe_other_admin_interfaces(admin) - if settings.FUEL_STATS_HOST: - self.nailgun_actions.set_collector_address( - settings.FUEL_STATS_HOST, - settings.FUEL_STATS_PORT, - settings.FUEL_STATS_SSL) - # Restart statsenderd to apply settings(Collector address) - self.nailgun_actions.force_fuel_stats_sending() - if settings.FUEL_STATS_ENABLED and settings.FUEL_STATS_HOST: - self.fuel_web.client.send_fuel_stats(enabled=True) - logger.info('Enabled sending of statistics to {0}:{1}'.format( - settings.FUEL_STATS_HOST, settings.FUEL_STATS_PORT - )) - if settings.PATCHING_DISABLE_UPDATES: - cmd = "find /etc/yum.repos.d/ -type f -regextype posix-egrep" \ - " -regex '.*/mos[0-9,\.]+\-(updates|security).repo' | " \ - "xargs -n1 -i sed '$aenabled=0' -i {}" - self.ssh_manager.execute_on_remote( - ip=self.ssh_manager.admin_ip, - cmd=cmd - ) - if settings.DISABLE_OFFLOADING: - logger.info( - '========================================' - 'Applying workaround for bug #1526544' - '========================================' - ) - # Disable TSO offloading for every network interface - # that is not virtual (loopback, bridges, etc) - ifup_local = ( - """#!/bin/bash\n""" - """if [[ -z "${1}" ]]; then\n""" - """ exit\n""" - """fi\n""" - """devpath=$(readlink -m /sys/class/net/${1})\n""" - """if [[ "${devpath}" == /sys/devices/virtual/* ]]; then\n""" - """ exit\n""" - """fi\n""" - """ethtool -K ${1} tso off\n""" - ) - cmd = ( - "echo -e '{0}' | sudo tee /sbin/ifup-local;" - "sudo chmod +x /sbin/ifup-local;" - ).format(ifup_local) - self.ssh_manager.execute_on_remote( - ip=self.ssh_manager.admin_ip, - cmd=cmd - ) - cmd = ( - 'for ifname in $(ls /sys/class/net); do ' - 'sudo /sbin/ifup-local ${ifname}; done' - ) - self.ssh_manager.execute_on_remote( - ip=self.ssh_manager.admin_ip, - cmd=cmd - ) - # Log interface settings - cmd = ( - 'for ifname in $(ls /sys/class/net); do ' - '([[ $(readlink -e /sys/class/net/${ifname}) == ' - '/sys/devices/virtual/* ]] ' - '|| ethtool -k ${ifname}); done' - ) - result = self.ssh_manager.execute_on_remote( - ip=self.ssh_manager.admin_ip, - cmd=cmd - ) - logger.debug('Offloading settings:\n{0}\n'.format( - ''.join(result['stdout']))) - if force_ssl: - self.enable_force_https(self.ssh_manager.admin_ip) @logwrap def enable_force_https(self, admin_node_ip): diff --git a/fuelweb_test/tests/base_test_case.py b/fuelweb_test/tests/base_test_case.py index 25d4c37dd..23a19b57b 100644 --- a/fuelweb_test/tests/base_test_case.py +++ b/fuelweb_test/tests/base_test_case.py @@ -12,12 +12,16 @@ # License for the specific language governing permissions and limitations # under the License. +import time + from proboscis import TestProgram from proboscis import SkipTest from proboscis import test from fuelweb_test import logger +from fuelweb_test import settings from fuelweb_test.helpers.decorators import log_snapshot_after_test +from fuelweb_test.helpers.utils import erase_data_from_hdd from fuelweb_test.helpers.utils import get_test_method_name from fuelweb_test.helpers.utils import TimeStat from fuelweb_test.helpers.ssh_manager import SSHManager @@ -149,6 +153,117 @@ class TestBasic(object): return True return False + def fuel_post_install_actions(self, + force_ssl=settings.FORCE_HTTPS_MASTER_NODE + ): + if settings.UPDATE_FUEL: + # Update Ubuntu packages + self.env.admin_actions.upload_packages( + local_packages_dir=settings.UPDATE_FUEL_PATH, + centos_repo_path=None, + ubuntu_repo_path=settings.LOCAL_MIRROR_UBUNTU) + time.sleep(10) + self.env.set_admin_keystone_password() + self.env.sync_time(['admin']) + if settings.UPDATE_MASTER: + if settings.UPDATE_FUEL_MIRROR: + for i, url in enumerate(settings.UPDATE_FUEL_MIRROR): + conf_file = '/etc/yum.repos.d/temporary-{}.repo'.format(i) + cmd = ("echo -e" + " '[temporary-{0}]\nname=" + "temporary-{0}\nbaseurl={1}/" + "\ngpgcheck=0\npriority=" + "1' > {2}").format(i, url, conf_file) + + self.ssh_manager.execute( + ip=self.ssh_manager.admin_ip, + cmd=cmd + ) + self.env.admin_install_updates() + if settings.MULTIPLE_NETWORKS: + self.env.describe_other_admin_interfaces( + self.env.d_env.nodes().admin) + if settings.FUEL_STATS_HOST: + self.env.nailgun_actions.set_collector_address( + settings.FUEL_STATS_HOST, + settings.FUEL_STATS_PORT, + settings.FUEL_STATS_SSL) + # Restart statsenderd to apply settings(Collector address) + self.env.nailgun_actions.force_fuel_stats_sending() + if settings.FUEL_STATS_ENABLED and settings.FUEL_STATS_HOST: + self.fuel_web.client.send_fuel_stats(enabled=True) + logger.info('Enabled sending of statistics to {0}:{1}'.format( + settings.FUEL_STATS_HOST, settings.FUEL_STATS_PORT + )) + if settings.PATCHING_DISABLE_UPDATES: + cmd = "find /etc/yum.repos.d/ -type f -regextype posix-egrep" \ + " -regex '.*/mos[0-9,\.]+\-(updates|security).repo' | " \ + "xargs -n1 -i sed '$aenabled=0' -i {}" + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd=cmd + ) + if settings.DISABLE_OFFLOADING: + logger.info( + '========================================' + 'Applying workaround for bug #1526544' + '========================================' + ) + # Disable TSO offloading for every network interface + # that is not virtual (loopback, bridges, etc) + ifup_local = ( + """#!/bin/bash\n""" + """if [[ -z "${1}" ]]; then\n""" + """ exit\n""" + """fi\n""" + """devpath=$(readlink -m /sys/class/net/${1})\n""" + """if [[ "${devpath}" == /sys/devices/virtual/* ]]; then\n""" + """ exit\n""" + """fi\n""" + """ethtool -K ${1} tso off\n""" + ) + cmd = ( + "echo -e '{0}' | sudo tee /sbin/ifup-local;" + "sudo chmod +x /sbin/ifup-local;" + ).format(ifup_local) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd=cmd + ) + cmd = ( + 'for ifname in $(ls /sys/class/net); do ' + 'sudo /sbin/ifup-local ${ifname}; done' + ) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd=cmd + ) + # Log interface settings + cmd = ( + 'for ifname in $(ls /sys/class/net); do ' + '([[ $(readlink -e /sys/class/net/${ifname}) == ' + '/sys/devices/virtual/* ]] ' + '|| ethtool -k ${ifname}); done' + ) + result = self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd=cmd + ) + logger.debug('Offloading settings:\n{0}\n'.format( + ''.join(result['stdout']))) + if force_ssl: + self.env.enable_force_https(self.ssh_manager.admin_ip) + + def reinstall_master_node(self): + """Erase boot sector and run setup_environment""" + with self.env.d_env.get_admin_remote() as remote: + erase_data_from_hdd(remote, mount_point='/boot') + remote.execute("/sbin/shutdown") + self.env.d_env.nodes().admin.destroy() + self.env.insert_cdrom_tray() + self.env.setup_environment() + self.fuel_post_install_actions() + @test class SetupEnvironment(TestBasic): @@ -172,6 +287,7 @@ class SetupEnvironment(TestBasic): with TimeStat("setup_environment", is_uniq=True): self.env.setup_environment() + self.fuel_post_install_actions() self.env.make_snapshot("empty", is_make=True) self.current_log_step = 0 @@ -195,6 +311,7 @@ class SetupEnvironment(TestBasic): self.show_step(3) if REPLACE_DEFAULT_REPOS and REPLACE_DEFAULT_REPOS_ONLY_ONCE: self.fuel_web.replace_default_repos() + self.fuel_post_install_actions() self.env.make_snapshot("empty_custom_manifests", is_make=True) self.current_log_step = 0 diff --git a/fuelweb_test/tests/test_backup_restore.py b/fuelweb_test/tests/test_backup_restore.py index c209be8ab..d30b18453 100644 --- a/fuelweb_test/tests/test_backup_restore.py +++ b/fuelweb_test/tests/test_backup_restore.py @@ -420,7 +420,7 @@ class BackupReinstallRestoreHA(NeutronTunHaBase): assert_true(os.path.exists(local_backup), "Backup file wasn't downloaded!") - self.env.reinstall_master_node() + self.reinstall_master_node() with self.env.d_env.get_admin_remote() as remote: remote.execute('mkdir -p {}'.format(os.path.dirname(backup))) diff --git a/fuelweb_test/tests/tests_upgrade/test_data_driven_upgrade.py b/fuelweb_test/tests/tests_upgrade/test_data_driven_upgrade.py index 8c1f93365..48f8fce1b 100644 --- a/fuelweb_test/tests/tests_upgrade/test_data_driven_upgrade.py +++ b/fuelweb_test/tests/tests_upgrade/test_data_driven_upgrade.py @@ -509,7 +509,7 @@ class UpgradeRollback(DataDrivenUpgradeBase): "{!r} does not exists".format(self.source_snapshot_name)) self.show_step(2) old_cluster_id = self.fuel_web.get_last_created_cluster() - self.env.reinstall_master_node() + self.reinstall_master_node() self.show_step(3) self.do_restore(self.backup_path, self.local_path, self.repos_backup_path, self.repos_local_path) @@ -695,7 +695,7 @@ class UpgradeSmoke(DataDrivenUpgradeBase): "The test can not use given environment - snapshot " "{!r} does not exists".format(self.source_snapshot_name)) self.show_step(2) - self.env.reinstall_master_node() + self.reinstall_master_node() self.show_step(3) self.show_step(4) self.show_step(5) @@ -960,7 +960,7 @@ class UpgradeCephHA(DataDrivenUpgradeBase): cluster_id = self.fuel_web.get_last_created_cluster() self.show_step(2) - self.env.reinstall_master_node() + self.reinstall_master_node() self.show_step(3) self.show_step(4) self.show_step(5) @@ -1076,7 +1076,7 @@ class UpgradeDetach_Plugin(DataDrivenUpgradeBase): cluster_id = self.fuel_web.get_last_created_cluster() self.show_step(2) - self.env.reinstall_master_node() + self.reinstall_master_node() self.show_step(3) self.show_step(4) self.show_step(5) diff --git a/system_test/actions/base.py b/system_test/actions/base.py index 14f41c5b6..770c264e9 100644 --- a/system_test/actions/base.py +++ b/system_test/actions/base.py @@ -114,6 +114,7 @@ class PrepareActions(object): self.check_run("empty") with TimeStat("setup_environment", is_uniq=True): self.env.setup_environment() + self.fuel_post_install_actions() self.env.make_snapshot("empty", is_make=True)