Concepts

Validation

Le validateur récursif qui transforme les raccourcis YAML en forme canonique.

Chaque manifeste de pack (xbee-pack.yaml, xbee-pack-system.yaml, …) et chaque xbee-env.yaml est validé par un parcours récursif de l’arbre YAML (xbee/common/validator.go), qui accumule des diagnostics précis, à la ligne. Les validateurs spécifiques à chaque concept vivent sous xbee/validators/.

La validation a un objectif double : rejeter les documents incohérents, et produire une forme canonique unique à partir des multiples raccourcis syntaxiques autorisés en entrée — le code d’exécution n’a ainsi jamais à réinterpréter ces raccourcis.

Exemple : validation des directives UDC

xbee/validators/env2/udc.go valide les sections configure, up, down et operate.<name> (ensemble désigné UDC, pour Up/Down/Configure) d’un xbee-env.yaml. Elle s’appuie sur xbee/common/validator.go pour le parcours et les diagnostics, et sur xbee-common/yaml2 pour manipuler l’arbre yaml.Node :

validateUdc(v, "configure")
validateUdc(v, "up")
validateUdc(v, "down")
for k := range operateV.ChildMap() {
    validateUdc(operateV, k)
}

Chaque élément final (« leaf ») produit par la validation est une map avec les clés host, index, et soit name (action implicite), soit payload (action explicite) :

host: tosiam1.tosit.org
index: 1
payload:
  shell:
    cmd:
      - bash "cacert.sh"

Lorsque plusieurs leaves doivent s’exécuter en parallèle, elles sont regroupées sous xbee.parallel. La séquence de premier niveau reste, elle, dans son ordre — c’est l’ordre d’exécution séquentiel.

Voir Environnements pour le détail des syntaxes d’entrée acceptées, et Répertoires & cache pour où ces fichiers vivent.

Erreurs détectées

  • Référence d’hôte introuvable (ni clé, ni alias, ni préfixe+numéro valide)
  • Élément de séquence qui n’est ni une chaîne, ni une map
  • Map à plus d’une clé, qui n’est ni xbee ni xbee.parallel
  • xbee.parallel dont la valeur n’est ni une chaîne, ni une séquence
  • xbee.parallel en séquence accompagné de clés voisines (le payload partagé n’a de sens que lorsque xbee.parallel est une chaîne d’hôtes)
  • up/down/configure réduit à une chaîne alors que l’environnement a plusieurs hôtes
  • Payload map contenant une clé non reconnue, ou n’en contenant aucune parmi name/command/cmds/template