64 lines
1.3 KiB
Python
Executable File
64 lines
1.3 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
import json
|
|
import sys
|
|
from subprocess import check_output
|
|
from typing import Optional
|
|
from typing import overload
|
|
from typing import TypeVar
|
|
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
@overload
|
|
def get_json(d: dict[str, str], key: str, default: None = None) -> None:
|
|
...
|
|
|
|
|
|
@overload
|
|
def get_json(d: dict[str, str], key: str, default: T = None) -> T:
|
|
...
|
|
|
|
|
|
def get_json(d: dict[str, str], key: str, default: Optional[T] = None) -> Optional[T]:
|
|
if key not in d:
|
|
return default
|
|
|
|
return json.loads(d[key])
|
|
|
|
|
|
query = json.load(sys.stdin)
|
|
|
|
# Required
|
|
template_path = query["template_path"]
|
|
|
|
# Optional
|
|
consul_address = query.get("consul_address")
|
|
if consul_address is not None:
|
|
consul_address = f"-consul-address={consul_address}"
|
|
|
|
# Need to parse JSON back
|
|
variables = [
|
|
f'--var={key}={value}' for key, value in get_json(query, "variables", {}).items()
|
|
]
|
|
variable_files = [
|
|
f'--var-file={value}' for value in get_json(query, "var_files", [])
|
|
]
|
|
|
|
args: list[str] = list(
|
|
filter(
|
|
None,
|
|
["levant", "render", consul_address]
|
|
+ variables
|
|
+ variable_files
|
|
+ [template_path],
|
|
)
|
|
)
|
|
|
|
# print(" ".join(args), file=sys.stderr)
|
|
# exit(1)
|
|
|
|
template = check_output(args, stderr=sys.stderr)
|
|
|
|
print(json.dumps({"template": template.decode()}))
|