Add OVN processes validations to faults tests
OVN processes will be validated when OVN is configured Change-Id: I4bb13e3442efec6fa728dc4257a7c0fbaa33a695
This commit is contained in:
parent
5fa0d03c26
commit
5fd10be4d3
|
@ -40,8 +40,9 @@ def check_pacemaker_resources_health():
|
|||
|
||||
|
||||
def check_overcloud_processes_health():
|
||||
return processes.OvercloudProcessesStatus(
|
||||
).basic_overcloud_processes_running
|
||||
procs = processes.OvercloudProcessesStatus()
|
||||
return (procs.basic_overcloud_processes_running and
|
||||
procs.ovn_overcloud_processes_validations)
|
||||
|
||||
|
||||
@undercloud.skip_if_missing_undercloud
|
||||
|
|
|
@ -14,6 +14,7 @@ from tobiko import podman
|
|||
from tobiko import docker
|
||||
from tobiko.openstack import topology
|
||||
from tobiko.shell import ssh
|
||||
from tobiko.tripleo import overcloud
|
||||
from tobiko.tripleo import topology as tripleo_topology
|
||||
|
||||
|
||||
|
@ -32,14 +33,13 @@ def get_container_runtime_module():
|
|||
return podman
|
||||
|
||||
|
||||
container_runtime_module = get_container_runtime_module()
|
||||
|
||||
|
||||
def get_container_runtime_name():
|
||||
return container_runtime_module.__name__.rsplit('.', 1)[1]
|
||||
|
||||
|
||||
container_runtime_name = get_container_runtime_name()
|
||||
if overcloud.has_overcloud():
|
||||
container_runtime_module = get_container_runtime_module()
|
||||
container_runtime_name = get_container_runtime_name()
|
||||
|
||||
|
||||
@functools.lru_cache()
|
||||
|
|
|
@ -7,6 +7,8 @@ import pandas
|
|||
import six
|
||||
|
||||
import tobiko
|
||||
from tobiko.openstack import topology
|
||||
from tobiko.tripleo import containers
|
||||
from tobiko.tripleo import overcloud
|
||||
from tobiko.shell import sh
|
||||
|
||||
|
@ -103,6 +105,16 @@ class OvercloudProcessesStatus(object):
|
|||
'nova-scheduler', 'neutron-server',
|
||||
'nova-compute', 'glance-api']
|
||||
|
||||
self.ovn_processes_to_check_per_node = [{'name': 'ovn-controller',
|
||||
'node_group': 'controller',
|
||||
'number': 'all'},
|
||||
{'name': 'ovn-controller',
|
||||
'node_group': 'compute',
|
||||
'number': 'all'},
|
||||
{'name': 'ovn-northd',
|
||||
'node_group': 'controller',
|
||||
'number': 1}]
|
||||
|
||||
self.oc_procs_df = overcloud.get_overcloud_nodes_dataframe(
|
||||
get_overcloud_node_processes_table)
|
||||
|
||||
|
@ -146,3 +158,57 @@ class OvercloudProcessesStatus(object):
|
|||
get_overcloud_node_processes_table)
|
||||
# exhausted all retries
|
||||
tobiko.fail('Not all overcloud processes are running !\n')
|
||||
|
||||
@property
|
||||
def ovn_overcloud_processes_validations(self):
|
||||
"""
|
||||
Checks that the oc_procs_df dataframe has OVN processes running on the
|
||||
expected overcloud node or nodes
|
||||
:return: Bool
|
||||
"""
|
||||
if not containers.ovn_used_on_overcloud():
|
||||
LOG.info("Networking OVN not configured")
|
||||
return True
|
||||
|
||||
for process_dict in self.ovn_processes_to_check_per_node:
|
||||
if not self.oc_procs_df.query('PROCESS=="{}"'.format(
|
||||
process_dict['name'])).empty:
|
||||
LOG.info("overcloud processes status checks: "
|
||||
f"process {process_dict['name']} is "
|
||||
"in running state")
|
||||
|
||||
ovn_proc_filtered_df = self.oc_procs_df.query(
|
||||
'PROCESS=="{}"'.format(process_dict['name']))
|
||||
|
||||
if (process_dict['node_group'] not in
|
||||
topology.list_openstack_node_groups()):
|
||||
LOG.debug(f"{process_dict['node_group']} is not "
|
||||
"a node group part of this Openstack cloud")
|
||||
continue
|
||||
node_filter = (ovn_proc_filtered_df.overcloud_node.
|
||||
str.startswith(process_dict['node_group']))
|
||||
# obtain the processes running on a specific type of nodes
|
||||
ovn_proc_filtered_per_node_df = \
|
||||
ovn_proc_filtered_df[node_filter]
|
||||
if type(process_dict['number']) == int:
|
||||
assert process_dict['number'] == \
|
||||
len(ovn_proc_filtered_per_node_df), (
|
||||
"Unexpected number"
|
||||
f" of processes {process_dict['name']} running on "
|
||||
f"{process_dict['node_group']} nodes")
|
||||
elif process_dict['number'] == 'all':
|
||||
num_nodes = len(topology.list_openstack_nodes(
|
||||
group=process_dict['node_group']))
|
||||
assert num_nodes == len(ovn_proc_filtered_per_node_df), (
|
||||
"Unexpected number of processes "
|
||||
f"{process_dict['name']} running on "
|
||||
f"{process_dict['node_group']} nodes")
|
||||
else:
|
||||
raise RuntimeError("Unexpected value:"
|
||||
f"{process_dict['node_group']}")
|
||||
# process successfully validated
|
||||
LOG.debug(f"{process_dict['name']} successfully validated on "
|
||||
f"{process_dict['node_group']} nodes")
|
||||
|
||||
# if all procs are running we can return true
|
||||
return True
|
||||
|
|
Loading…
Reference in New Issue