diff options
Diffstat (limited to 'packages/python-google-compute-engine/google_compute_engine/distro_lib')
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) |