summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-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.yaml20
-rw-r--r--kvmd/application.py33
-rw-r--r--kvmd/apps/cleanup/__init__.py2
-rw-r--r--kvmd/apps/kvmd/__init__.py2
-rw-r--r--testenv/kvmd.yaml25
8 files changed, 61 insertions, 78 deletions
diff --git a/Makefile b/Makefile
index c50c7b00..68a8d6ec 100644
--- a/Makefile
+++ b/Makefile
@@ -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