summaryrefslogtreecommitdiff
path: root/packages/python-google-compute-engine/google_compute_engine/distro_lib
diff options
context:
space:
mode:
Diffstat (limited to 'packages/python-google-compute-engine/google_compute_engine/distro_lib')
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/__init__.py0
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/__init__.py0
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/utils_test.py80
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/utils.py71
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_9/utils.py8
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/el_6/utils.py14
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/el_7/utils.py8
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/freebsd_11/utils.py8
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/helpers.py15
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/__init__.py0
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/__init__.py0
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/utils_test.py91
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/utils.py88
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_12/utils.py8
14 files changed, 61 insertions, 330 deletions
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/__init__.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/__init__.py
+++ /dev/null
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/__init__.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/__init__.py
+++ /dev/null
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/utils_test.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/utils_test.py
deleted file mode 100644
index 7f92795..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/tests/utils_test.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/python
-# Copyright 2018 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Unittest for utils.py module."""
-
-from google_compute_engine.distro_lib.debian_8 import utils
-from google_compute_engine.test_compat import mock
-from google_compute_engine.test_compat import unittest
-
-
-class UtilsTest(unittest.TestCase):
-
- def setUp(self):
- self.mock_logger = mock.Mock()
- self.mock_setup = mock.create_autospec(utils.Utils)
-
- @mock.patch('google_compute_engine.distro_lib.helpers.CallDhclientIpv6')
- @mock.patch('google_compute_engine.distro_lib.helpers.CallEnableRouteAdvertisements')
- def testEnableIpv6(self, mock_call_enable_ra, mock_call_dhclient):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call_dhclient, 'dhclient')
- mocks.attach_mock(mock_call_enable_ra, 'enable_ra')
-
- utils.Utils.EnableIpv6(self.mock_setup, ['A', 'B'], self.mock_logger)
- expected_calls = [
- mock.call.enable_ra(['A', 'B'], mock.ANY),
- mock.call.dhclient(['A', 'B'], mock.ANY),
- ]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.helpers.CallDhclientIpv6')
- def testDisableIpv6(self, mock_call_dhclient):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call_dhclient, 'dhclient')
-
- utils.Utils.DisableIpv6(self.mock_setup, ['A', 'B'], self.mock_logger)
- expected_calls = [
- mock.call.dhclient(['A', 'B'], mock.ANY, None, release_lease=True),
- ]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.helpers.CallDhclient')
- def testEnableNetworkInterfaces(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
-
- utils.Utils.EnableNetworkInterfaces(
- self.mock_setup, ['A', 'B'], self.mock_logger)
- expected_calls = [mock.call.call(['A', 'B'], mock.ANY)]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.helpers.CallHwclock')
- def testHandleClockSync(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
-
- utils.Utils.HandleClockSync(self.mock_setup, self.mock_logger)
- expected_calls = [mock.call.call(mock.ANY)]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.ip_forwarding_utils.IpForwardingUtilsIproute')
- def testIpForwardingUtils(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
-
- utils.Utils.IpForwardingUtils(self.mock_setup, self.mock_logger, '66')
- expected_calls = [mock.call.call(mock.ANY, '66')]
- self.assertEqual(mocks.mock_calls, expected_calls)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/utils.py
deleted file mode 100644
index 7872d1b..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_8/utils.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/python
-# Copyright 2018 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Utilities that are distro specific for use on Debian 8."""
-
-from google_compute_engine.distro_lib import helpers
-from google_compute_engine.distro_lib import ip_forwarding_utils
-from google_compute_engine.distro_lib import utils
-
-
-class Utils(utils.Utils):
- """Utilities used by Linux guest services on Debian 8."""
-
- def EnableIpv6(self, interfaces, logger, dhclient_script=None):
- """Configure the network interfaces for IPv6 using dhclient.
-
- Args:
- interface: string, the output device names for enabling IPv6.
- logger: logger object, used to write to SysLog and serial port.
- dhclient_script: string, the path to a dhclient script used by dhclient.
- """
- helpers.CallEnableRouteAdvertisements(interfaces, logger)
- helpers.CallDhclientIpv6(interfaces, logger)
-
- def DisableIpv6(self, interfaces, logger):
- """Disable Ipv6 by giving up the DHCP lease using dhclient.
-
- Args:
- interface: string, the output device names for enabling IPv6.
- logger: logger object, used to write to SysLog and serial port.
- """
- helpers.CallDhclientIpv6(interfaces, logger, None, release_lease=True)
-
- def EnableNetworkInterfaces(self, interfaces, logger, dhclient_script=None):
- """Enable the list of network interfaces.
-
- Args:
- interfaces: list of string, the output device names to enable.
- logger: logger object, used to write to SysLog and serial port.
- dhclient_script: string, the path to a dhclient script used by dhclient.
- """
- helpers.CallDhclient(interfaces, logger)
-
- def HandleClockSync(self, logger):
- """Sync the software clock with the hypervisor clock.
-
- Args:
- logger: logger object, used to write to SysLog and serial port.
- """
- helpers.CallHwclock(logger)
-
- def IpForwardingUtils(self, logger, proto_id=None):
- """Get system IP address configuration utilities.
-
- Args:
- logger: logger object, used to write to SysLog and serial port.
- proto_id: string, the routing protocol identifier for Google IP changes.
- """
- return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_9/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_9/utils.py
index 9255214..2b12058 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_9/utils.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/debian_9/utils.py
@@ -69,3 +69,11 @@ class Utils(utils.Utils):
proto_id: string, the routing protocol identifier for Google IP changes.
"""
return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
+
+ def RestartNetworking(self, logger):
+ """Restart the networking service to force a DHCP refresh.
+
+ Args:
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ helpers.SystemctlRestart('networking', logger)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_6/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_6/utils.py
index 9f9bb98..a0fb839 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_6/utils.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_6/utils.py
@@ -15,6 +15,8 @@
"""Utilities that are distro specific for use on EL 6."""
+import subprocess
+
from google_compute_engine.distro_lib import helpers
from google_compute_engine.distro_lib import ip_forwarding_utils
from google_compute_engine.distro_lib import utils
@@ -70,3 +72,15 @@ class Utils(utils.Utils):
proto_id: string, the routing protocol identifier for Google IP changes.
"""
return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
+
+ def RestartNetworking(self, logger):
+ """Restart the networking service to force a DHCP refresh.
+
+ Args:
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ logger.info('Restarting networking via "service network restart".')
+ try:
+ subprocess.check_call(['service', 'network', 'restart'])
+ except subprocess.CalledProcessError:
+ logger.warning('Failed to restart networking.')
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_7/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_7/utils.py
index e0e318b..8b82aef 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_7/utils.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/el_7/utils.py
@@ -127,3 +127,11 @@ class Utils(utils.Utils):
proto_id: string, the routing protocol identifier for Google IP changes.
"""
return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
+
+ def RestartNetworking(self, logger):
+ """Restart the networking service to force a DHCP refresh.
+
+ Args:
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ helpers.SystemctlRestart('NetworkManager', logger)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/freebsd_11/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/freebsd_11/utils.py
index 2734c8f..121cad7 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/freebsd_11/utils.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/freebsd_11/utils.py
@@ -59,3 +59,11 @@ class Utils(utils.Utils):
proto_id: string, the routing protocol identifier for Google IP changes.
"""
return ip_forwarding_utils.IpForwardingUtilsIfconfig(logger)
+
+ def RestartNetworking(self, logger):
+ """Restart the networking service to force a DHCP refresh.
+
+ Args:
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ pass
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/helpers.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/helpers.py
index b7d16a1..a0be6a0 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/helpers.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/helpers.py
@@ -80,6 +80,7 @@ def CallDhclientIpv6(interfaces, logger, dhclient_script=None,
def CallEnableRouteAdvertisements(interfaces, logger):
"""Enable route advertisements.
+
Args:
interfaces: list of string, the output device names to enable.
logger: logger object, used to write to SysLog and serial port.
@@ -140,3 +141,17 @@ def CallSysctl(logger, name, value):
subprocess.check_call(sysctl_command)
except subprocess.CalledProcessError:
logger.warning('Unable to configure sysctl %s.', name)
+
+def SystemctlRestart(service, logger):
+ """Restart a service using systemctl.
+
+ Args:
+ service: the name of the service to restart.
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ logger.info('Restarting service via "systemctl restart %s".', service)
+ systemctl_command = ['systemctl', 'restart', service]
+ try:
+ subprocess.check_call(systemctl_command)
+ except subprocess.CalledProcessError:
+ logger.warning('Failed to restart service %s.', service)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/__init__.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/__init__.py
+++ /dev/null
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/__init__.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/__init__.py
+++ /dev/null
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/utils_test.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/utils_test.py
deleted file mode 100644
index 22d54de..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/tests/utils_test.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/python
-# Copyright 2018 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""Unittest for utils.py module."""
-
-import subprocess
-
-from google_compute_engine.distro_lib.sles_11 import utils
-from google_compute_engine.test_compat import mock
-from google_compute_engine.test_compat import unittest
-
-
-class UtilsTest(unittest.TestCase):
-
- def setUp(self):
- self.mock_logger = mock.Mock()
- self.mock_setup = mock.create_autospec(utils.Utils)
-
- def testEnableNetworkInterfacesWithSingleNic(self):
- mocks = mock.Mock()
-
- utils.Utils.EnableNetworkInterfaces(
- self.mock_setup, ['eth0'], self.mock_logger)
- expected_calls = []
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- def testEnableNetworkInterfacesWithMultipleNics(self):
- mocks = mock.Mock()
- mocks.attach_mock(self.mock_setup._Dhcpcd, 'dhcpcd')
-
- utils.Utils.EnableNetworkInterfaces(
- self.mock_setup, ['eth0', 'eth1', 'eth2'], self.mock_logger)
- expected_calls = [
- mock.call.dhcpcd(['eth1', 'eth2'], mock.ANY),
- ]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch(
- 'google_compute_engine.distro_lib.sles_11.utils.subprocess.check_call')
- def testDhcpcd(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
- mocks.attach_mock(self.mock_logger, 'logger')
- mock_call.side_effect = [
- None, None, None, None,
- subprocess.CalledProcessError(1, 'Test'),
- subprocess.CalledProcessError(1, 'Test'),
- ]
-
- utils.Utils._Dhcpcd(
- self.mock_setup, ['eth1', 'eth2', 'eth3'], self.mock_logger)
- expected_calls = [
- mock.call.call(['/sbin/dhcpcd', '-x', 'eth1']),
- mock.call.call(['/sbin/dhcpcd', 'eth1']),
- mock.call.call(['/sbin/dhcpcd', '-x', 'eth2']),
- mock.call.call(['/sbin/dhcpcd', 'eth2']),
- mock.call.call(['/sbin/dhcpcd', '-x', 'eth3']),
- mock.call.logger.info(mock.ANY, 'eth3'),
- mock.call.call(['/sbin/dhcpcd','eth3']),
- mock.call.logger.warning(mock.ANY, 'eth3'),
- ]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.helpers.CallHwclock')
- def testHandleClockSync(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
-
- utils.Utils.HandleClockSync(self.mock_setup, self.mock_logger)
- expected_calls = [mock.call.call(mock.ANY)]
- self.assertEqual(mocks.mock_calls, expected_calls)
-
- @mock.patch('google_compute_engine.distro_lib.ip_forwarding_utils.IpForwardingUtilsIproute')
- def testIpForwardingUtils(self, mock_call):
- mocks = mock.Mock()
- mocks.attach_mock(mock_call, 'call')
-
- utils.Utils.IpForwardingUtils(self.mock_setup, self.mock_logger, '66')
- expected_calls = [mock.call.call(mock.ANY, '66')]
- self.assertEqual(mocks.mock_calls, expected_calls)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/utils.py
deleted file mode 100644
index 623505c..0000000
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_11/utils.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/python
-# Copyright 2018 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Utilities that are distro specific for use on SUSE 11."""
-
-import os
-import subprocess
-
-from google_compute_engine import constants
-from google_compute_engine.distro_lib import helpers
-from google_compute_engine.distro_lib import ip_forwarding_utils
-from google_compute_engine.distro_lib import utils
-
-
-class Utils(utils.Utils):
- """Utilities used by Linux guest services on SUSE 11."""
-
- def EnableIpv6(self, interfaces, logger, dhclient_script=None):
- """Configure the network interfaces for IPv6 using dhclient.
-
- Args:
- interface: string, the output device names for enabling IPv6.
- logger: logger object, used to write to SysLog and serial port.
- dhclient_script: string, the path to a dhclient script used by dhclient.
- """
- pass
-
- def EnableNetworkInterfaces(self, interfaces, logger, dhclient_script=None):
- """Enable the list of network interfaces.
-
- Args:
- interfaces: list of string, the output device names to enable.
- logger: logger object, used to write to SysLog and serial port.
- dhclient_script: string, the path to a dhclient script used by dhclient.
- """
- interfaces_to_up = [i for i in interfaces if i != 'eth0']
- if interfaces_to_up:
- logger.info('Enabling the Ethernet interfaces %s.', interfaces_to_up)
- self._Dhcpcd(interfaces_to_up, logger)
-
- def _Dhcpcd(self, interfaces, logger):
- """Use dhcpcd to activate the interfaces.
-
- Args:
- interfaces: list of string, the output device names to enable.
- logger: logger object, used to write to SysLog and serial port.
- """
- for interface in interfaces:
- dhcpcd = ['/sbin/dhcpcd']
- try:
- subprocess.check_call(dhcpcd + ['-x', interface])
- except subprocess.CalledProcessError:
- # Dhcpcd not yet running for this device.
- logger.info('Dhcpcd not yet running for interface %s.', interface)
- try:
- subprocess.check_call(dhcpcd + [interface])
- except subprocess.CalledProcessError:
- # The interface is already active.
- logger.warning('Could not activate interface %s.', interface)
-
- def HandleClockSync(self, logger):
- """Sync the software clock with the hypervisor clock.
-
- Args:
- logger: logger object, used to write to SysLog and serial port.
- """
- helpers.CallHwclock(logger)
-
- def IpForwardingUtils(self, logger, proto_id=None):
- """Get system IP address configuration utilities.
-
- Args:
- logger: logger object, used to write to SysLog and serial port.
- proto_id: string, the routing protocol identifier for Google IP changes.
- """
- return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
diff --git a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_12/utils.py b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_12/utils.py
index b4a3d00..a8bd486 100644
--- a/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_12/utils.py
+++ b/packages/python-google-compute-engine/google_compute_engine/distro_lib/sles_12/utils.py
@@ -108,3 +108,11 @@ class Utils(utils.Utils):
proto_id: string, the routing protocol identifier for Google IP changes.
"""
return ip_forwarding_utils.IpForwardingUtilsIproute(logger, proto_id)
+
+ def RestartNetworking(self, logger):
+ """Restart the networking service to force a DHCP refresh.
+
+ Args:
+ logger: logger object, used to write to SysLog and serial port.
+ """
+ helpers.SystemctlRestart('wickedd-nanny', logger)