Fix faults tests when External LB is configured

Tobiko faults tests that depend on the Main VIP resource configured
should be skipped because this resource is not created when an External
LB is used.
Disabling the haproxy resource should be skipped because that resource
does not exist then an External LB is used.

Change-Id: Ic20fa2f321989aa4c49aeff8b4e01b2025bd4160
This commit is contained in:
Eduardo Olivares 2023-04-10 11:46:02 +02:00
parent 2ad24dd2f0
commit 75939feb20
2 changed files with 48 additions and 23 deletions

View File

@ -27,6 +27,7 @@ import netaddr
from oslo_log import log
import tobiko
from tobiko import config
from tobiko.openstack import glance
from tobiko.openstack import keystone
from tobiko.openstack import neutron
@ -42,6 +43,8 @@ from tobiko.tripleo import pacemaker
from tobiko.tripleo import topology as tripleo_topology
from tobiko import tripleo
CONF = config.CONF
LOG = log.getLogger(__name__)
network_disruption = """
@ -549,19 +552,26 @@ def remove_one_grastate_galera():
else:
nodes = topology.list_openstack_nodes(group='controller')
node = random.choice(nodes)
LOG.info(f'disable {pacemaker.HAPROXY_RESOURCE}')
if f"resource '{pacemaker.HAPROXY_RESOURCE}' is not running on any node" \
not in pacemaker.run_pcs_resource_operation(
pacemaker.HAPROXY_RESOURCE,
pacemaker.DISABLE,
node.ssh_client,
operation_wait=30):
raise PcsDisableException()
LOG.info('shut down {} on all servers: {}'.format(
pacemaker.GALERA_RESOURCE, nodes))
if f"resource '{pacemaker.GALERA_RESOURCE}' is not running on any node" \
not in pacemaker.run_pcs_resource_operation(
pacemaker.GALERA_RESOURCE,
pcs_haproxy = pacemaker.HAPROXY_RESOURCE
pcs_galera = pacemaker.GALERA_RESOURCE
if not CONF.tobiko.tripleo.has_external_load_balancer:
LOG.info(f'disable {pcs_haproxy}')
if f"resource '{pcs_haproxy}' is not running on any node" not in \
pacemaker.run_pcs_resource_operation(
pcs_haproxy,
pacemaker.DISABLE,
node.ssh_client,
operation_wait=30):
raise PcsDisableException()
else:
LOG.debug(f'With Ext LB setups, {pcs_haproxy} is not deployed')
LOG.info('shut down {} on all servers: {}'.format(pcs_galera, nodes))
if f"resource '{pcs_galera}' is not running on any node" not in \
pacemaker.run_pcs_resource_operation(
pcs_galera,
pacemaker.DISABLE,
node.ssh_client):
raise PcsDisableException()
@ -569,23 +579,27 @@ def remove_one_grastate_galera():
node.name))
sh.execute(remove_grastate, ssh_client=node.ssh_client)
LOG.info('enable back {} on all servers: {}'.format(
pacemaker.GALERA_RESOURCE, nodes))
LOG.info('enable back {} on all servers: {}'.format(pcs_galera, nodes))
if topology.verify_osp_version('17.0', lower=True):
promoted = "master"
else:
promoted = "promoted"
if f"resource '{pacemaker.GALERA_RESOURCE}' is {promoted} on node" not in \
if f"resource '{pcs_galera}' is {promoted} on node" not in \
pacemaker.run_pcs_resource_operation(
pacemaker.GALERA_RESOURCE, pacemaker.ENABLE, node.ssh_client,
pcs_galera, pacemaker.ENABLE, node.ssh_client,
operation_wait=90):
raise PcsEnableException()
LOG.info(f'enable {pacemaker.HAPROXY_RESOURCE}')
if f"resource '{pacemaker.HAPROXY_RESOURCE}' is running on node" not in \
pacemaker.run_pcs_resource_operation(pacemaker.HAPROXY_RESOURCE,
pacemaker.ENABLE,
node.ssh_client):
raise PcsEnableException()
if not CONF.tobiko.tripleo.has_external_load_balancer:
LOG.info(f'enable {pcs_haproxy}')
if f"resource '{pcs_haproxy}' is running on node" not in \
pacemaker.run_pcs_resource_operation(pcs_haproxy,
pacemaker.ENABLE,
node.ssh_client):
raise PcsEnableException()
else:
LOG.debug(f'With Ext LB setups, {pcs_haproxy} is not deployed')
# gcomm:// without args means that bootstrap is done from this node
bootstrap = sh.execute(check_bootstrap, ssh_client=node.ssh_client).stdout
if re.search('wsrep-cluster-address=gcomm://', bootstrap) is None:

View File

@ -22,6 +22,7 @@ from oslo_log import log
import testtools
import tobiko
from tobiko import config
from tobiko.openstack import neutron
from tobiko.openstack import nova as nova_osp
from tobiko.openstack import topology
@ -35,7 +36,11 @@ from tobiko.tripleo import overcloud
from tobiko.tripleo import undercloud
CONF = config.CONF
LOG = log.getLogger(__name__)
SKIP_MESSAGE_EXTLB = ('Tests requiring a main VIP should be skipped when an '
'external load balancer is used')
has_external_lb = CONF.tobiko.tripleo.has_external_load_balancer
def overcloud_health_checks(passive_checks_only=False,
@ -169,6 +174,7 @@ class DisruptTripleoNodesTest(testtools.TestCase):
except nova_osp.ServerNotFoundError:
LOG.debug(f"Server {vm_id} not found")
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_z99_reboot_controller_galera_main_vip(self):
# This test case may fail at times if RHBZ#2124877 is not resolved
# but that bug is due to a race condition,
@ -182,28 +188,33 @@ class DisruptTripleoNodesTest(testtools.TestCase):
cloud_disruptions.check_no_duplicate_ips(
self.vms_detailed_info, ports_before_stack_creation)
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_z99_reboot_controller_main_vip(self):
OvercloudHealthCheck.run_before()
cloud_disruptions.reset_controller_main_vip()
OvercloudHealthCheck.run_after()
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_z99_reboot_controller_non_main_vip(self):
OvercloudHealthCheck.run_before()
cloud_disruptions.reset_controllers_non_main_vip()
OvercloudHealthCheck.run_after()
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_z99_crash_controller_main_vip(self):
OvercloudHealthCheck.run_before()
cloud_disruptions.crash_controller_main_vip()
OvercloudHealthCheck.run_after()
@overcloud.skip_unless_kexec_tools_installed
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_z99_crash_controller_non_main_vip(self):
OvercloudHealthCheck.run_before()
cloud_disruptions.crash_controllers_non_main_vip()
OvercloudHealthCheck.run_after()
@pacemaker.skip_if_fencing_not_deployed
@testtools.skipIf(has_external_lb, SKIP_MESSAGE_EXTLB)
def test_network_disruptor_main_vip(self):
OvercloudHealthCheck.run_before()
cloud_disruptions.network_disrupt_controller_main_vip()