Beryl::Apply::ZfsDataset
Inherits Beryl::Apply::Primitive < Reference < Object
Primitive zfs-dataset : crée (idempotent) un dataset ZFS « par client » sous
<pool>/clients/<name>, avec quota/compression/recordsize/mountpoint. Calquée
sur jail-create. Cf. spec adoc/zfs-dataset-per-client-spec.adoc.
- zfs-dataset:
pool: tank # zpool data existant
name: acme # = client → <pool>/clients/acme
quota: 2T # plafonne données + snapshots (garde-fou tenant)
# compression: lz4 # défaut
# recordsize: 1M # défaut (16k si réception InnoDB)
# mountpoint: /tank/clients/acme # défaut ZFS sinon
Idempotent : dataset présent → ajuste les props divergentes (zfs set) ; absent
→ zfs create. Le conteneur <pool>/clients (canmount=off) est créé une fois.
JAMAIS de zfs destroy (retrait d'un client = opération explicite séparée).
⚠️ À VALIDER IN VIVO (ZFS non testable hors FreeBSD) : générateurs purs testés.
Constants
Props gérées, dans un ordre déterministe (quota d'abord = garde-fou tenant).
Class methods
Props effectives : défauts (compression/recordsize) écrasés par les params,
- quota/mountpoint si fournis. Ordre déterministe (PROP_ORDER).
Commande zfs create -o k=v … <dataset> (props dans l'ordre).
Le dataset existe-t-il ? (csh-safe : pas de redir Bourne ; SudoShell→sh).
Nom de client : strict (c'est un tenant, va dans un chemin ZFS + montage).
Instance methods
params est le hash brut du step YAML (ex: {"packages" => [...]}),
déjà interpolé par l'Executor. context porte les infos
dérivées du host (cf. Context).
Nom kebab-case utilisé comme clé de step dans les recettes (« pkg-install », « service-enable », …).