Skip to content

Commit baba35f

Browse files
jonathanspwslyon
authored andcommitted
cli:status fail cleanly if systemd-networkd is not present
This has a clean and clear error message instead of a python stack trace if systemd-networkd is not present on the system.
1 parent dee89e8 commit baba35f

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

netplan_cli/cli/state.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,9 @@ def __init__(self, ifname=None, all=False):
433433
'but systemd-networkd.service is masked. '
434434
'Please start it.')
435435
sys.exit(1)
436+
if not utils.systemctl_is_installed('systemd-networkd.service'):
437+
logging.error('systemd-networkd is required for \'netplan status\' functionality')
438+
sys.exit(1)
436439
logging.debug('systemd-networkd.service is not active. Starting...')
437440
utils.systemctl('start', ['systemd-networkd.service'], True)
438441

tests/cli/test_status.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,18 @@ def test_call_cli_networkd_masked(self, is_masked_mock, is_active_mock):
531531
self.assertEqual(1, e.exception.code)
532532
self.assertIn('systemd-networkd.service is masked', cm.output[0])
533533

534+
@patch('netplan_cli.cli.utils.systemctl_is_installed')
535+
@patch('netplan_cli.cli.utils.systemctl_is_active')
536+
@patch('netplan_cli.cli.utils.systemctl_is_masked')
537+
def test_call_cli_networkd_installed_false(self, is_installed_mock, is_active_mock, is_masked_mock):
538+
is_active_mock.return_value = False
539+
is_masked_mock.return_value = False
540+
is_installed_mock.return_value = False
541+
with self.assertLogs() as cm, self.assertRaises(SystemExit) as e:
542+
self._call([])
543+
self.assertEqual(1, e.exception.code)
544+
self.assertIn('systemd-networkd is required for \'netplan status\' functionality', cm.output[0])
545+
534546
@patch('netplan_cli.cli.state.NetplanConfigState.__init__')
535547
@patch('netplan_cli.cli.state_diff.NetplanDiffState.__init__')
536548
@patch('netplan_cli.cli.state_diff.NetplanDiffState.get_diff')

0 commit comments

Comments
 (0)