61 lines
1.2 KiB
Python
61 lines
1.2 KiB
Python
|
#! /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")
|
||
|
# 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()}))
|