diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-02-16 14:46:24 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-02-16 14:46:24 +0200 |
| commit | 34f5f546841c8e9022ac0ccf957f636907e643bb (patch) | |
| tree | 8885e5f2209baa04128d75ca9bb340a999723828 /jprov/config.py | |
| parent | 5f46fde558c467414fa151ad962caaf7f07628fa (diff) | |
Diffstat (limited to 'jprov/config.py')
| -rw-r--r-- | jprov/config.py | 29 |
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 == "": |
