aboutsummaryrefslogtreecommitdiffstats
path: root/jprov/config.py
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2026-02-16 14:46:24 +0200
committerJan Tuomi <jan@jantuomi.fi>2026-02-16 14:46:24 +0200
commit34f5f546841c8e9022ac0ccf957f636907e643bb (patch)
tree8885e5f2209baa04128d75ca9bb340a999723828 /jprov/config.py
parent5f46fde558c467414fa151ad962caaf7f07628fa (diff)
UpdatesHEADmain
Diffstat (limited to 'jprov/config.py')
-rw-r--r--jprov/config.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/jprov/config.py b/jprov/config.py
index e7fc504..d4eb5dc 100644
--- a/jprov/config.py
+++ b/jprov/config.py
@@ -28,12 +28,13 @@ class Mount:
@dataclass
class JailConfig:
name: str
+ config_path: str
template: str
- cmd: str
overlay: str | None
mounts: list[Mount]
env: dict[str, str]
- extra_jail_conf: str | None
+ jailconf: dict[str, object]
+ cmds: dict[str, str]
class ConfigError(RuntimeError):
@@ -96,28 +97,34 @@ def load_jail_config(main: MainConfig, jailname: str) -> JailConfig:
try:
template = data["template"]
- cmd = data["cmd"]
except KeyError as exc:
raise ConfigError(f"missing jail config key: {exc}") from exc
overlay = data.get("overlay")
env = data.get("env", {})
- extra_jail_conf = data.get("extra_jail_conf")
+ jailconf = data.get("jailconf", {})
+ cmds = data.get("cmds", {})
mounts_raw = data.get("mounts", [])
if not isinstance(template, str) or not template:
raise ConfigError("invalid jail config template")
- if not isinstance(cmd, str) or not cmd:
- raise ConfigError("invalid jail config cmd")
+ if cmds and not isinstance(cmds, dict):
+ raise ConfigError("invalid jail config cmds")
if overlay is not None and not isinstance(overlay, str):
raise ConfigError("invalid jail config overlay")
if env and not isinstance(env, dict):
raise ConfigError("invalid jail config env")
- if extra_jail_conf is not None and not isinstance(extra_jail_conf, str):
- raise ConfigError("invalid jail config extra_jail_conf")
+ if jailconf and not isinstance(jailconf, dict):
+ raise ConfigError("invalid jail config jailconf")
if mounts_raw and not isinstance(mounts_raw, list):
raise ConfigError("invalid jail config mounts")
+ if not isinstance(cmds, dict) or "provision" not in cmds or not isinstance(cmds["provision"], str):
+ raise ConfigError("missing or invalid cmds.provision")
+ for key, val in cmds.items():
+ if not isinstance(val, str) or not val:
+ raise ConfigError(f"invalid cmds.{key}")
+
mounts: list[Mount] = []
for item in mounts_raw:
if not isinstance(item, dict):
@@ -134,12 +141,13 @@ def load_jail_config(main: MainConfig, jailname: str) -> JailConfig:
return JailConfig(
name=jailname,
+ config_path=path,
template=template,
- cmd=cmd,
overlay=overlay,
mounts=mounts,
env={str(k): str(v) for k, v in env.items()} if env else {},
- extra_jail_conf=extra_jail_conf,
+ jailconf=jailconf,
+ cmds={str(k): str(v) for k, v in cmds.items()} if cmds else {},
)
@@ -161,6 +169,7 @@ def validate_configs(main: MainConfig, jail: JailConfig) -> None:
raise ConfigError(f"mount host path does not exist: {mnt.host}")
+
def resolve_overlay_path(main: MainConfig, jail: JailConfig) -> str:
"""Return resolved overlay path for the jail."""
if jail.overlay is None or jail.overlay == "":