diff options
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | configs/kvmd/kvmd.v1-hdmi.yaml (renamed from configs/kvmd/v1-hdmi.yaml) | 24 | ||||
-rw-r--r-- | configs/kvmd/kvmd.v1-vga.yaml (renamed from configs/kvmd/v1-vga.yaml) | 24 | ||||
-rw-r--r-- | configs/kvmd/logging.yaml | 20 | ||||
-rw-r--r-- | kvmd/application.py | 33 | ||||
-rw-r--r-- | kvmd/apps/cleanup/__init__.py | 2 | ||||
-rw-r--r-- | kvmd/apps/kvmd/__init__.py | 2 | ||||
-rw-r--r-- | testenv/kvmd.yaml | 25 |
8 files changed, 61 insertions, 78 deletions
@@ -5,12 +5,15 @@ TESTENV_LOOP ?= /dev/loop7 TESTENV_CMD ?= /bin/bash -c " \ (socat PTY,link=$(TESTENV_HID) PTY,link=/dev/ttyS11 &) \ && rm -rf /etc/nginx/* \ - && cp -r /configs/nginx/* /etc/nginx \ + && cp -r /usr/share/kvmd/configs/nginx/* /etc/nginx \ + && mkdir -p /etc/kvmd \ + && cp /usr/share/kvmd/configs/kvmd/logging.yaml /etc/kvmd/logging.yaml \ + && cp /testenv/kvmd.yaml /etc/kvmd \ && nginx -c /etc/nginx/nginx.conf \ && ln -s $(TESTENV_VIDEO) /dev/kvmd-streamer \ && (losetup -d /dev/kvmd-msd || true) \ && losetup /dev/kvmd-msd /root/loop.img \ - && python -m kvmd.apps.kvmd -c testenv/kvmd.yaml \ + && python -m kvmd.apps.kvmd -c /etc/kvmd/kvmd.yaml \ " @@ -29,8 +32,8 @@ run: - docker run --rm \ --volume `pwd`/kvmd:/kvmd:ro \ --volume `pwd`/web:/usr/share/kvmd/web:ro \ + --volume `pwd`/configs:/usr/share/kvmd/configs:ro \ --volume `pwd`/testenv:/testenv:ro \ - --volume `pwd`/configs:/configs:ro \ --device $(TESTENV_LOOP):/dev/kvmd-msd \ --device $(TESTENV_VIDEO):$(TESTENV_VIDEO) \ --publish 8080:80/tcp \ diff --git a/configs/kvmd/v1-hdmi.yaml b/configs/kvmd/kvmd.v1-hdmi.yaml index 0e199ac6..1ac41a12 100644 --- a/configs/kvmd/v1-hdmi.yaml +++ b/configs/kvmd/kvmd.v1-hdmi.yaml @@ -73,26 +73,4 @@ kvmd: state_poll: 1.0 -logging: - version: 1 - disable_existing_loggers: false - - formatters: - console: - (): logging.Formatter - style: "{" - format: "{name:30.30} {levelname:>7} --- {message}" - - handlers: - console: - level: DEBUG - class: logging.StreamHandler - stream: ext://sys.stdout - formatter: console - - root: - level: INFO - handlers: - - console - -# vim: syntax=yaml filetype=yaml +logging: !include logging.yaml diff --git a/configs/kvmd/v1-vga.yaml b/configs/kvmd/kvmd.v1-vga.yaml index c4cd2778..3065c262 100644 --- a/configs/kvmd/v1-vga.yaml +++ b/configs/kvmd/kvmd.v1-vga.yaml @@ -74,26 +74,4 @@ kvmd: state_poll: 1.0 -logging: - version: 1 - disable_existing_loggers: false - - formatters: - console: - (): logging.Formatter - style: "{" - format: "{name:30.30} {levelname:>7} --- {message}" - - handlers: - console: - level: DEBUG - class: logging.StreamHandler - stream: ext://sys.stdout - formatter: console - - root: - level: INFO - handlers: - - console - -# vim: syntax=yaml filetype=yaml +logging: !include logging.yaml diff --git a/configs/kvmd/logging.yaml b/configs/kvmd/logging.yaml new file mode 100644 index 00000000..e572ad32 --- /dev/null +++ b/configs/kvmd/logging.yaml @@ -0,0 +1,20 @@ +version: 1 +disable_existing_loggers: false + +formatters: + console: + (): logging.Formatter + style: "{" + format: "{name:30.30} {levelname:>7} --- {message}" + +handlers: + console: + level: DEBUG + class: logging.StreamHandler + stream: ext://sys.stdout + formatter: console + +root: + level: INFO + handlers: + - console diff --git a/kvmd/application.py b/kvmd/application.py index a78c1047..31a57925 100644 --- a/kvmd/application.py +++ b/kvmd/application.py @@ -1,10 +1,15 @@ +import os import argparse import logging import logging.config from typing import Dict +from typing import IO +from typing import Any import yaml +import yaml.loader +import yaml.nodes # ===== @@ -13,10 +18,32 @@ def init() -> Dict: parser.add_argument("-c", "--config", required=True, metavar="<path>") options = parser.parse_args() - with open(options.config) as config_file: - config = yaml.load(config_file) + config: Dict = _load_yaml_file(options.config) logging.captureWarnings(True) logging.config.dictConfig(config["logging"]) - return config["kvmd"] + return config + + +# ===== +def _load_yaml_file(path: str) -> Any: + with open(path) as yaml_file: + try: + return yaml.load(yaml_file, _YamlLoader) + except Exception: + # Reraise internal exception as standard ValueError and show the incorrect file + raise ValueError("Incorrect YAML syntax in file '{}'".format(path)) + + +class _YamlLoader(yaml.loader.Loader): # pylint: disable=too-many-ancestors + def __init__(self, yaml_file: IO) -> None: + yaml.loader.Loader.__init__(self, yaml_file) + self.__root = os.path.dirname(yaml_file.name) + + def include(self, node: yaml.nodes.Node) -> str: + path = os.path.join(self.__root, self.construct_scalar(node)) # pylint: disable=no-member + return _load_yaml_file(path) + + +_YamlLoader.add_constructor("!include", _YamlLoader.include) # pylint: disable=no-member diff --git a/kvmd/apps/cleanup/__init__.py b/kvmd/apps/cleanup/__init__.py index 60446c2b..c99fd271 100644 --- a/kvmd/apps/cleanup/__init__.py +++ b/kvmd/apps/cleanup/__init__.py @@ -10,7 +10,7 @@ from ... import gpio # ===== def main() -> None: - config = init() + config = init()["kvmd"] logger = get_logger(0) logger.info("Cleaning up ...") diff --git a/kvmd/apps/kvmd/__init__.py b/kvmd/apps/kvmd/__init__.py index 1959f05c..099fd192 100644 --- a/kvmd/apps/kvmd/__init__.py +++ b/kvmd/apps/kvmd/__init__.py @@ -17,7 +17,7 @@ from .server import Server # ===== def main() -> None: - config = init() + config = init()["kvmd"] with gpio.bcm(): loop = asyncio.get_event_loop() http_session = aiohttp.ClientSession(loop=loop) diff --git a/testenv/kvmd.yaml b/testenv/kvmd.yaml index 78c06498..34489afb 100644 --- a/testenv/kvmd.yaml +++ b/testenv/kvmd.yaml @@ -68,27 +68,4 @@ kvmd: state_poll: 1.0 -logging: - version: 1 - disable_existing_loggers: false - - formatters: - console: - (): logging.Formatter - style: "{" - datefmt: "%H:%M:%S" - format: "[{asctime}] {name:30.30} {levelname:>7} --- {message}" - - handlers: - console: - level: DEBUG - class: logging.StreamHandler - stream: ext://sys.stdout - formatter: console - - root: - level: INFO - handlers: - - console - -# vim: syntax=yaml filetype=yaml +logging: !include logging.yaml |