]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
cli: tool for manually generating Lua config from declarative config
authorVasek Sraier <git@vakabus.cz>
Tue, 11 Jan 2022 12:28:17 +0000 (13:28 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
closes #37

manager/knot_resolver_manager/client/__main__.py

index 62d8f022e31641e7529cff58c39b2e87b8b98973..06c3b7b5ce39a1ab623ec13d62ccd5766901832b 100644 (file)
@@ -2,8 +2,12 @@ import ipaddress
 import sys
 
 import click
+from click.exceptions import ClickException
 
 from knot_resolver_manager.client import KnotManagerClient
+from knot_resolver_manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.exceptions import KresManagerException
+from knot_resolver_manager.utils.parsing import parse_yaml
 
 BASE_URL = "base_url"
 
@@ -30,6 +34,22 @@ def stop(ctx: click.Context):
     client.stop()
 
 
+@main.command("gen-lua", help="Generate LUA config from a given declarative config")
+@click.argument("config_path", type=str, nargs=1)
+def gen_lua(config_path: str):
+    try:
+        with open(config_path, "r", encoding="utf8") as f:
+            data = f.read()
+        parsed = parse_yaml(data)
+        config = KresConfig(parsed)
+        lua = config.render_lua()
+        click.echo_via_pager(lua)
+    except KresManagerException as e:
+        ne = ClickException(str(e))
+        ne.exit_code = 1
+        raise ne
+
+
 @main.command(help="Set number of workers")
 @click.argument("instances", type=int, nargs=1)
 @click.pass_context