# jprov Configuration

This document defines the main configuration file and per-jail TOML schema.

## Main Config

Default locations (first found wins):

- `/usr/local/etc/jprov.conf`
- `/etc/jprov.conf`

Schema (TOML):

```toml
base_dir = "/usr/local/jails"
jail_conf_dir = "/etc/jail.conf.d"
log_dir = "/var/log/jprov"

[datasets]
templates_prefix = "zroot/jails/templates/"
containers_prefix = "zroot/jails/containers/"
```

Notes:

- `base_dir` contains `templates/` and `defs/`.
- `templates_prefix` and `containers_prefix` are ZFS dataset name prefixes (must end with `/`).
- `log_dir` is where per-run logs are written.

## Per-jail Config

Location:

- `base_dir/defs/<jailname>/jprov.conf`

Schema (TOML):

```toml
# Required
# Relative to datasets.templates_prefix
# Example: "RELEASE-15.0-p3@base" resolves to "zroot/jails/templates/RELEASE-15.0-p3@base"
# Note: ZFS clone requires a snapshot (e.g., "@base") in the template name.
template = "RELEASE-15.0-p3@base"

# Required
# Command executed inside the jail via: jexec <jailname> <cmd>
cmd = "/bin/sh /usr/local/sbin/provision.sh"

# Optional
# Overlay defaults to base_dir/defs/<jailname>/overlay/
overlay = "overlay"

# Optional: environment variables passed to the provisioning command
[env]
FOO = "bar"

# Optional: append raw jail.conf content
extra_jail_conf = """
allow.raw_sockets = 1;
"""

# Optional: nullfs mounts
[[mounts]]
host = "/usr/local/jails/volumes/foo"
jail = "/mnt/foo"
readonly = false
```

Notes:

- `cmd` is executed as a direct command (no implicit shell wrapping); jprov only checks its exit code.
- `overlay` is copied into the jail root after it is created.
- All `mounts[*].host` paths must exist on the host and are mounted via `nullfs`.
