class

Beryl::Apply::Command

Inherits Beryl::Apply::Primitive < Reference < Object

Primitive command : lance une commande UNE FOIS, gardée par unless (commande de contrôle : code 0 → déjà fait, skip). Dernier recours, pour une action d'appli qu'aucune primitive ne couvre (amorçage d'un premier compte…) : sans garde, elle serait rejouée à chaque apply, d'où unless OBLIGATOIRE.

- command:
    run: "monappli-manage bootstrap --email={{ bootstrap_email }}"
    unless: "psql -d monappli -tAc \"…\" | grep -q 1"
    user: monappli                             # facultatif (défaut root)
    env_file: /usr/local/etc/monappli/monappli.env   # facultatif
    if_set: "{{ bootstrap_email }}"            # vide → étape sautée
    show_output: true                          # sortie dans le compte rendu

run et unless passent par sh -c ; env_file (lignes VAR=valeur) est chargé avant, avec set -a. Ils peuvent tenir sur plusieurs lignes (bloc YAML |) : le script voyage en base64, à l'abri du shell de connexion (csh). En dry-run, seule la garde est jouée : elle doit donc être en LECTURE SEULE.

Une garde qui ne s'exécute pas (commande introuvable, erreur de syntaxe du shell) met l'étape en FAILED, en dry-run comme en --apply : ce n'est pas un « pas encore fait ». Une garde qui répond « non » en écrivant sur stderr reste un « would apply », avec ce stderr dans le compte rendu.

Constants

USER_RE = /\A[a-z_][a-z0-9_-]{0,31}\z/

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
systems

Portable : FreeBSD et Linux.

Source