Fix journald add-on option to work with default Debian (#2742)

This commit is contained in:
Franck Nijhof 2021-03-22 17:04:20 +01:00 committed by GitHub
parent bedb37ca6b
commit 2a892544c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 11 deletions

View File

@ -27,7 +27,8 @@ MACHINE_ID = Path("/etc/machine-id")
SOCKET_DBUS = Path("/run/dbus/system_bus_socket")
SOCKET_DOCKER = Path("/run/docker.sock")
RUN_SUPERVISOR_STATE = Path("/run/supervisor")
SYSTEMD_JOURNAL = Path("/var/logs/journal")
SYSTEMD_JOURNAL_PERSISTENT = Path("/var/logs/journal")
SYSTEMD_JOURNAL_VOLATILE = Path("/run/log/journal")
DOCKER_NETWORK = "hassio"
DOCKER_NETWORK_MASK = ip_network("172.30.32.0/23")

View File

@ -26,7 +26,8 @@ from ..const import (
MAP_SSL,
SECURITY_DISABLE,
SECURITY_PROFILE,
SYSTEMD_JOURNAL,
SYSTEMD_JOURNAL_PERSISTENT,
SYSTEMD_JOURNAL_VOLATILE,
)
from ..coresys import CoreSys
from ..exceptions import CoreDNSError, DockerError, DockerNotFound, HardwareNotFound
@ -416,10 +417,15 @@ class DockerAddon(DockerInterface):
# System Journal access
if self.addon.with_journald:
# Systemd uses volatile by default, unless persistent location exists.
bind = SYSTEMD_JOURNAL_VOLATILE
if SYSTEMD_JOURNAL_PERSISTENT.exists():
bind = SYSTEMD_JOURNAL_PERSISTENT
volumes.update(
{
str(SYSTEMD_JOURNAL): {
"bind": str(SYSTEMD_JOURNAL),
str(SYSTEMD_JOURNAL_PERSISTENT): {
"bind": str(bind),
"mode": "ro",
}
}

View File

@ -7,7 +7,7 @@ import pytest
from supervisor.addons import validate as vd
from supervisor.addons.addon import Addon
from supervisor.addons.model import Data
from supervisor.const import SYSTEMD_JOURNAL
from supervisor.const import SYSTEMD_JOURNAL_PERSISTENT, SYSTEMD_JOURNAL_VOLATILE
from supervisor.coresys import CoreSys
from supervisor.docker.addon import DockerAddon
@ -97,16 +97,35 @@ def test_addon_map_folder_defaults(
assert str(docker_addon.sys_config.path_extern_share) not in volumes
def test_journald_addon(coresys: CoreSys, addonsdata_system: Dict[str, Data]):
"""Validate volume for journald option."""
def test_journald_addon_volatile(coresys: CoreSys, addonsdata_system: Dict[str, Data]):
"""Validate volume for journald option, with volatile logs."""
docker_addon = get_docker_addon(
coresys, addonsdata_system, "journald-addon-config.json"
)
volumes = docker_addon.volumes
assert str(SYSTEMD_JOURNAL) in volumes
assert volumes.get(str(SYSTEMD_JOURNAL)).get("bind") == str(SYSTEMD_JOURNAL)
assert volumes.get(str(SYSTEMD_JOURNAL)).get("mode") == "ro"
assert str(SYSTEMD_JOURNAL_PERSISTENT) in volumes
assert volumes.get(str(SYSTEMD_JOURNAL_PERSISTENT)).get("bind") == str(
SYSTEMD_JOURNAL_VOLATILE
)
assert volumes.get(str(SYSTEMD_JOURNAL_PERSISTENT)).get("mode") == "ro"
def test_journald_addon_persistent(
coresys: CoreSys, addonsdata_system: Dict[str, Data]
):
"""Validate volume for journald option, with persistent logs."""
with patch("pathlib.Path.exists", return_value=True):
docker_addon = get_docker_addon(
coresys, addonsdata_system, "journald-addon-config.json"
)
volumes = docker_addon.volumes
assert str(SYSTEMD_JOURNAL_PERSISTENT) in volumes
assert volumes.get(str(SYSTEMD_JOURNAL_PERSISTENT)).get("bind") == str(
SYSTEMD_JOURNAL_PERSISTENT
)
assert volumes.get(str(SYSTEMD_JOURNAL_PERSISTENT)).get("mode") == "ro"
def test_not_journald_addon(coresys: CoreSys, addonsdata_system: Dict[str, Data]):
@ -116,4 +135,4 @@ def test_not_journald_addon(coresys: CoreSys, addonsdata_system: Dict[str, Data]
)
volumes = docker_addon.volumes
assert str(SYSTEMD_JOURNAL) not in volumes
assert str(SYSTEMD_JOURNAL_PERSISTENT) not in volumes