class

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

DEFAULTS = {"compression" => "lz4", "recordsize" => "1M"}
PROP_ORDER = ["quota", "mountpoint", "compression", "recordsize"] of ::String

Props gérées, dans un ordre déterministe (quota d'abord = garde-fou tenant).

Class methods

build_props(params : Hash(String, YAML::Any)) : Array(Tuple(String, String))

Props effectives : défauts (compression/recordsize) écrasés par les params,

  • quota/mountpoint si fournis. Ordre déterministe (PROP_ORDER).
Source
create_cmd(dataset : String, props : Array(Tuple(String, String))) : String

Commande zfs create -o k=v … <dataset> (props dans l'ordre).

Source
exists?(shell : Shell, dataset : String) : Bool

Le dataset existe-t-il ? (csh-safe : pas de redir Bourne ; SudoShell→sh).

Source
valid_name?(name : String) : Bool

Nom de client : strict (c'est un tenant, va dans un chemin ZFS + montage).

Source
valid_pool?(pool : String) : Bool

Nom de pool : alphanumérique + _-.: (pas de / — c'est un pool racine).

Source

Instance methods

apply(shell : Shell, params : Hash(String, YAML::Any), dry_run : Bool, context : Context) : StepResult

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).

Source
name

Nom kebab-case utilisé comme clé de step dans les recettes (« pkg-install », « service-enable », …).

Source