nextcloud: Implement enable/disable container

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2024-04-16 16:00:16 -07:00 committed by James Valleroy
parent f8ddc774b0
commit f1276d736a
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
3 changed files with 79 additions and 1 deletions

View File

@ -11,6 +11,8 @@ import subprocess
import tempfile
from contextlib import contextmanager
import augeas
logger = logging.getLogger(__name__)
UWSGI_ENABLED_PATH = '/etc/uwsgi/apps-enabled/{config_name}.ini'
@ -553,6 +555,46 @@ WantedBy=default.target
service_daemon_reload()
def _podman_augeus(container_name: str):
"""Return an augues instance to edit container configuration file."""
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
augeas.Augeas.NO_MODL_AUTOLOAD)
container = f'/etc/containers/systemd/{container_name}.container'
aug.transform('Systemd', container)
aug.set('/augeas/context', '/files' + container)
aug.load()
return aug
def podman_is_enabled(container_name: str) -> bool:
"""Return whether the container to start on boot."""
aug = _podman_augeus(container_name)
aug = _podman_augeus(container_name)
value = 'default.target'
key = 'Install/WantedBy'
return any(
(aug.get(match_ + '/value') == value for match_ in aug.match(key)))
def podman_enable(container_name: str):
"""Enable container to start on boot."""
aug = _podman_augeus(container_name)
value = 'default.target'
key = 'Install/WantedBy'
found = any(
(aug.get(match_ + '/value') == value for match_ in aug.match(key)))
if not found:
aug.set(f'{key}[last() +1]/value', value)
aug.save()
def podman_disable(container_name: str):
"""Disable container to start on boot."""
aug = _podman_augeus(container_name)
aug.remove('Install/WantedBy')
aug.save()
def podman_uninstall(container_name: str, volume_name: str, image_name: str,
volume_path: str):
"""Remove a podman container's components and systemd unit."""

View File

@ -105,7 +105,7 @@ class NextcloudApp(app_module.App):
daemon = SharedDaemon('shared-daemon-nextcloud-mysql', 'mysql')
self.add(daemon)
daemon = Daemon('daemon-nextcloud', 'nextcloud-freedombox')
daemon = NextcloudDaemon('daemon-nextcloud', 'nextcloud-freedombox')
self.add(daemon)
daemon = Daemon('daemon-nextcloud-timer',
@ -145,6 +145,24 @@ class NextcloudApp(app_module.App):
return results
class NextcloudDaemon(Daemon):
"""Component to manage Nextcloud container service."""
def is_enabled(self):
"""Return if the daemon/unit is enabled."""
return privileged.is_enabled()
def enable(self):
"""Run operations to enable the daemon/unit."""
super().enable()
privileged.enable()
def disable(self):
"""Run operations to disable the daemon/unit."""
super().disable()
privileged.disable()
class NextcloudBackupRestore(BackupRestore):
"""Component to backup/restore Nextcloud."""

View File

@ -86,6 +86,24 @@ def _run_occ(*args, **kwargs) -> subprocess.CompletedProcess:
return _run_in_container('/var/www/html/occ', *args, **kwargs)
@privileged
def is_enabled() -> bool:
"""Return if the systemd container service is enabled."""
return action_utils.podman_is_enabled(CONTAINER_NAME)
@privileged
def enable():
"""Enable the systemd container service."""
action_utils.podman_enable(CONTAINER_NAME)
@privileged
def disable():
"""Disable the systemd container service."""
action_utils.podman_disable(CONTAINER_NAME)
@privileged
def get_domain():
"""Return domain name set in Nextcloud."""