From 0e469aa5a35dd4c6739cab86bcf451a0f3b9ae6c Mon Sep 17 00:00:00 2001 From: Morgan Willcock Date: Fri, 19 Jul 2019 21:13:52 +0100 Subject: [PATCH 1/2] Power-off when shutting down FreeBSD, NetBSD, and OpenBSD These platforms don't power-off by default when halted. --- salt/modules/system.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/salt/modules/system.py b/salt/modules/system.py index 37e5f4823511..c834fd52564c 100644 --- a/salt/modules/system.py +++ b/salt/modules/system.py @@ -122,7 +122,15 @@ def shutdown(at_time=None): salt '*' system.shutdown 5 ''' - cmd = ['shutdown', '-h', ('{0}'.format(at_time) if at_time else 'now')] + if (salt.utils.platform.is_freebsd() or + salt.utils.platform.is_netbsd() or + salt.utils.platform.is_openbsd()): + # these platforms don't power off by default when halted + flag = '-p' + else: + flag = '-h' + + cmd = ['shutdown', flag, ('{0}'.format(at_time) if at_time else 'now')] ret = __salt__['cmd.run'](cmd, python_shell=False) return ret From d33eeb163d0744627e0cd2c74333321d350102c5 Mon Sep 17 00:00:00 2001 From: Morgan Willcock Date: Fri, 9 Aug 2019 00:50:34 +0100 Subject: [PATCH 2/2] Add tests for shutting down FreeBSD, NetBSD, and OpenBSD --- tests/unit/modules/test_system.py | 44 +++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/tests/unit/modules/test_system.py b/tests/unit/modules/test_system.py index af32b3cae874..ca88d0e21dc3 100644 --- a/tests/unit/modules/test_system.py +++ b/tests/unit/modules/test_system.py @@ -72,6 +72,46 @@ def test_shutdown(self): ''' Test to shutdown a running system ''' - with patch.dict(system.__salt__, - {'cmd.run': MagicMock(return_value='A')}): + cmd_mock = MagicMock(return_value='A') + with patch.dict(system.__salt__, {'cmd.run': cmd_mock}), \ + patch('salt.utils.platform.is_freebsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_netbsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_openbsd', MagicMock(return_value=False)): + self.assertEqual(system.shutdown(), 'A') + cmd_mock.assert_called_with(['shutdown', '-h', 'now'], python_shell=False) + + def test_shutdown_freebsd(self): + ''' + Test to shutdown a running FreeBSD system + ''' + cmd_mock = MagicMock(return_value='A') + with patch.dict(system.__salt__, {'cmd.run': cmd_mock}), \ + patch('salt.utils.platform.is_freebsd', MagicMock(return_value=True)), \ + patch('salt.utils.platform.is_netbsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_openbsd', MagicMock(return_value=False)): + self.assertEqual(system.shutdown(), 'A') + cmd_mock.assert_called_with(['shutdown', '-p', 'now'], python_shell=False) + + def test_shutdown_netbsd(self): + ''' + Test to shutdown a running NetBSD system + ''' + cmd_mock = MagicMock(return_value='A') + with patch.dict(system.__salt__, {'cmd.run': cmd_mock}), \ + patch('salt.utils.platform.is_freebsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_netbsd', MagicMock(return_value=True)), \ + patch('salt.utils.platform.is_openbsd', MagicMock(return_value=False)): + self.assertEqual(system.shutdown(), 'A') + cmd_mock.assert_called_with(['shutdown', '-p', 'now'], python_shell=False) + + def test_shutdown_openbsd(self): + ''' + Test to shutdown a running OpenBSD system + ''' + cmd_mock = MagicMock(return_value='A') + with patch.dict(system.__salt__, {'cmd.run': cmd_mock}), \ + patch('salt.utils.platform.is_freebsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_netbsd', MagicMock(return_value=False)), \ + patch('salt.utils.platform.is_openbsd', MagicMock(return_value=True)): self.assertEqual(system.shutdown(), 'A') + cmd_mock.assert_called_with(['shutdown', '-p', 'now'], python_shell=False)