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
This commit is contained in:
Artem Grechanichenko 2016-04-28 15:31:34 +03:00
parent b68a5d9ef7
commit 168033a0d5
6 changed files with 125 additions and 115 deletions

View File

@ -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()

View File

@ -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):

View File

@ -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

View File

@ -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)))

View File

@ -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)

View File

@ -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)