mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
datetime: Refactor handling systemd-timesyncd not running in VMs
- Merged the two DateTimeApp classes. In future, we will remove all
module.init() methods in favor of automatically performing the operations from
module_loader.
- Also fix an error running './run --list-dependencies' when running without
systemd support inside a test case container:
ERROR plinth.module_loader Exception while running init for <module 'plinth.modules.datetime' from '/builds/sunilmohan/plinth/plinth/modules/datetime/__init__.py'>: Command '['systemctl', 'show', '--property=ConditionResult', '--value', 'systemd-timesyncd']' returned non-zero exit status 1.
Traceback (most recent call last):
File "/builds/sunilmohan/plinth/plinth/module_loader.py", line 123, in _initialize_module
init()
File "/builds/sunilmohan/plinth/plinth/modules/datetime/__init__.py", line 77, in init
if _is_time_managed():
File "/builds/sunilmohan/plinth/plinth/modules/datetime/__init__.py", line 112, in _is_time_managed
output = subprocess.check_output([
File "/usr/lib/python3.8/subprocess.py", line 411, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/lib/python3.8/subprocess.py", line 512, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['systemctl', 'show', '--property=ConditionResult', '--value', 'systemd-timesyncd']' returned non-zero exit status 1.
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
CC: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
b1780f5e09
commit
57daf338c8
@ -29,12 +29,37 @@ _description = [
|
|||||||
app = None
|
app = None
|
||||||
|
|
||||||
|
|
||||||
class UnmanagedDateTimeApp(app_module.App):
|
class DateTimeApp(app_module.App):
|
||||||
"""FreedomBox app for date and time if time syncronization is unmanaged."""
|
"""FreedomBox app for date and time if time syncronization is unmanaged."""
|
||||||
|
|
||||||
app_id = 'datetime'
|
app_id = 'datetime'
|
||||||
|
|
||||||
can_be_disabled = False
|
_time_managed = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def can_be_disabled(self):
|
||||||
|
"""Return whether the app can be disabled."""
|
||||||
|
return self._is_time_managed()
|
||||||
|
|
||||||
|
def _is_time_managed(self):
|
||||||
|
"""Check whether time should be syncronized by the systemd-timesyncd.
|
||||||
|
|
||||||
|
systemd-timesyncd does not run if we have another NTP daemon installed
|
||||||
|
or FreedomBox runs inside a container where the host manages the time.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self._time_managed is None:
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output([
|
||||||
|
'systemctl', 'show', '--property=ConditionResult',
|
||||||
|
'--value', 'systemd-timesyncd'
|
||||||
|
])
|
||||||
|
self._time_managed = 'yes' in output.decode()
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
# When systemd is not running.
|
||||||
|
self._time_managed = False
|
||||||
|
|
||||||
|
return self._time_managed
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Create components for the app."""
|
"""Create components for the app."""
|
||||||
@ -50,16 +75,7 @@ class UnmanagedDateTimeApp(app_module.App):
|
|||||||
'datetime:index', parent_url_name='system')
|
'datetime:index', parent_url_name='system')
|
||||||
self.add(menu_item)
|
self.add(menu_item)
|
||||||
|
|
||||||
|
if self._is_time_managed():
|
||||||
class ManagedDateTimeApp(UnmanagedDateTimeApp):
|
|
||||||
"""FreedomBox app for date and time if time syncronization is managed."""
|
|
||||||
|
|
||||||
can_be_disabled = True
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
"""Create components for the app."""
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
daemon = Daemon('daemon-datetime', managed_services[0])
|
daemon = Daemon('daemon-datetime', managed_services[0])
|
||||||
self.add(daemon)
|
self.add(daemon)
|
||||||
|
|
||||||
@ -73,11 +89,7 @@ class ManagedDateTimeApp(UnmanagedDateTimeApp):
|
|||||||
def init():
|
def init():
|
||||||
"""Initialize the date/time module."""
|
"""Initialize the date/time module."""
|
||||||
global app
|
global app
|
||||||
|
app = DateTimeApp()
|
||||||
if _is_time_managed():
|
|
||||||
app = ManagedDateTimeApp()
|
|
||||||
else:
|
|
||||||
app = UnmanagedDateTimeApp()
|
|
||||||
|
|
||||||
if app.is_enabled():
|
if app.is_enabled():
|
||||||
app.set_enabled(True)
|
app.set_enabled(True)
|
||||||
@ -100,17 +112,3 @@ def _diagnose_time_synchronized():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
return [_('Time synchronized to NTP server'), result]
|
return [_('Time synchronized to NTP server'), result]
|
||||||
|
|
||||||
|
|
||||||
def _is_time_managed():
|
|
||||||
"""Check whether time should be syncronized by the systemd-timesyncd.
|
|
||||||
|
|
||||||
systemd-timesyncd does not run if we have another NTP daemon installed or
|
|
||||||
FreedomBox runs inside a container where the host manages the time.
|
|
||||||
|
|
||||||
"""
|
|
||||||
output = subprocess.check_output([
|
|
||||||
'systemctl', 'show', '--property=ConditionResult', '--value',
|
|
||||||
'systemd-timesyncd'
|
|
||||||
])
|
|
||||||
return 'yes' in output.decode()
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user