File 0002-Test-cts-temporarily-disable-any-enabled-cluster-ser-1.1.patch of Package pacemaker.14737
From ee8046503c9c9d699dd2f24d8b509f3743358825 Mon Sep 17 00:00:00 2001
From: "Gao,Yan" <ygao@suse.com>
Date: Fri, 18 Jan 2019 18:14:13 +0100
Subject: [PATCH 2/2] Test: cts: temporarily disable any enabled cluster
serivces when running remote tests
Cluster nodes are reused as remote nodes in remote tests. If cluster
services were enabled at boot, in case the remote node got fenced, the
cluster node would join instead of the expected remote one. Meanwhile
pacemaker_remote would not be able to start. Depending on the chances,
the situations might not be able to be orchestrated gracefully any more.
---
cts/CTStests.py | 34 ++++++++++++++++++++++++++++++++++
cts/environment.py | 18 ++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/cts/CTStests.py b/cts/CTStests.py
index 4e3fda019..b6cb31d5c 100644
--- a/cts/CTStests.py
+++ b/cts/CTStests.py
@@ -2721,6 +2721,29 @@ class RemoteDriver(CTSTest):
if not self.failed:
self.remote_node_added = 1
+ def disable_services(self, node):
+ self.heartbeat_enabled = self.Env.service_is_enabled(node, "heartbeat")
+ if self.heartbeat_enabled:
+ self.Env.disable_service(node, "heartbeat")
+
+ self.corosync_enabled = self.Env.service_is_enabled(node, "corosync")
+ if self.corosync_enabled:
+ self.Env.disable_service(node, "corosync")
+
+ self.pacemaker_enabled = self.Env.service_is_enabled(node, "pacemaker")
+ if self.pacemaker_enabled:
+ self.Env.disable_service(node, "pacemaker")
+
+ def restore_services(self, node):
+ if self.heartbeat_enabled:
+ self.Env.enable_service(node, "heartbeat")
+
+ if self.corosync_enabled:
+ self.Env.enable_service(node, "corosync")
+
+ if self.pacemaker_enabled:
+ self.Env.enable_service(node, "pacemaker")
+
def stop_pcmk_remote(self, node):
# disable pcmk remote
for i in range(10):
@@ -2750,6 +2773,15 @@ class RemoteDriver(CTSTest):
self.rsh(node, "killall -CONT pacemaker_remoted")
def start_metal(self, node):
+ # Cluster nodes are reused as remote nodes in remote tests. If cluster
+ # services were enabled at boot, in case the remote node got fenced, the
+ # cluster node would join instead of the expected remote one. Meanwhile
+ # pacemaker_remote would not be able to start. Depending on the chances,
+ # the situations might not be able to be orchestrated gracefully any more.
+ #
+ # Temporarily disable any enabled cluster services.
+ self.disable_services(node)
+
pcmk_started = 0
# make sure the resource doesn't already exist for some reason
@@ -2922,6 +2954,8 @@ class RemoteDriver(CTSTest):
return
def cleanup_metal(self, node):
+ self.restore_services(node)
+
if self.pcmk_started == 0:
return
diff --git a/cts/environment.py b/cts/environment.py
index 67b0f6426..02b962ce6 100644
--- a/cts/environment.py
+++ b/cts/environment.py
@@ -224,6 +224,24 @@ class Environment:
# default
self["syslogd"] = "rsyslog"
+ def disable_service(self, node, service):
+ if self["have_systemd"]:
+ # Systemd
+ return self.rsh(node, "systemctl disable %s" % service)
+
+ else:
+ # SYS-V
+ return self.rsh(node, "chkconfig %s off" % service)
+
+ def enable_service(self, node, service):
+ if self["have_systemd"]:
+ # Systemd
+ return self.rsh(node, "systemctl enable %s" % service)
+
+ else:
+ # SYS-V
+ return self.rsh(node, "chkconfig %s on" % service)
+
def service_is_enabled(self, node, service):
if self["have_systemd"]:
# Systemd
--
2.16.4