From: Ido Schimmel <idosch(a)mellanox.com>
We are going to need to enable the lldpad service from the QoS recipes,
so we might as well provide generic enable / disable methods for recipes
to use.
In order to support both Systemd and SysVinit systems the requested
service is configured using 'systemctl' or 'service', depending on the
output of `pidof systemd`.
Suggested-by: Ondrej Lichtner <olichtne(a)redhat.com>
Signed-off-by: Ido Schimmel <idosch(a)mellanox.com>
---
lnst/Controller/Machine.py | 18 ++++++++++++++++++
lnst/Controller/Task.py | 6 ++++++
lnst/Slave/NetTestSlave.py | 18 ++++++++++++++++++
3 files changed, 42 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 70295ba..ec1a72b 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -74,6 +74,7 @@ class Machine(object):
self._interfaces = []
self._namespaces = []
+ self._services = []
self._bg_cmds = {}
self._device_database = {}
@@ -332,6 +333,7 @@ class Machine(object):
for iface in ordered_ifaces:
iface.cleanup()
+ self.disable_services()
self.del_namespaces()
self.restore_nm_option()
@@ -578,6 +580,22 @@ class Machine(object):
def get_security(self):
return self._security
+ def enable_service(self, service):
+ self._services.append(service)
+ return self._rpc_call("enable_service", service)
+
+ def disable_service(self, service):
+ try:
+ self._services.remove(service)
+ except ValueError:
+ return False
+ return self._rpc_call("disable_service", service)
+
+ def disable_services(self):
+ for service in self._services:
+ self.disable_service(service)
+ return True
+
class Interface(object):
""" Abstraction of a test network interface on a slave machine
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py
index f9a15f2..4fa5f4a 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -489,6 +489,12 @@ class HostAPI(object):
return self._add_iface("vxlan", if_id, netns, ip, options, slaves)
+ def enable_service(self, service):
+ return self._m.enable_service(service)
+
+ def disable_service(self, service):
+ return self._m.disable_service(service)
+
class DeviceAPI(object):
def __init__(self, net_device, host):
self._dev = net_device
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index f0b3183..2636556 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -903,6 +903,24 @@ class SlaveMethods:
return False
return True
+ def _is_systemd(self):
+ stdout, _ = exec_cmd("pidof systemd", die_on_err=False)
+ return len(stdout) != 0
+
+ def _configure_service(self, service, start=True):
+ action = "start" if start else "stop"
+ if self._is_systemd():
+ exec_cmd("systemctl {} {}".format(action, service))
+ else:
+ exec_cmd("service {} {}".format(service, action))
+ return True
+
+ def enable_service(self, service):
+ return self._configure_service(service)
+
+ def disable_service(self, service):
+ return self._configure_service(service, start=False)
+
class ServerHandler(ConnectionHandler):
def __init__(self, addr):
super(ServerHandler, self).__init__()
--
2.7.4