Concepts

Providers & volumes

Comment Xbee délègue les VM et volumes à un binaire provider externe.

Un provider est un binaire externe nommé xbee-<nom> — par exemple xbee-aws ou xbee-azure — auquel Xbee délègue le cycle de vie des VM, images, réseaux et volumes.

À la première utilisation, Xbee télécharge directement le binaire correspondant à l’OS et à l’architecture courants :

https://download.xbee.io/latest/<os>_<arch>/xbee-<nom>.gz

Le téléchargement utilise cache-artefacts/ dans le répertoire interne Xbee.

Configurer un environnement avec un provider

Le provider est une map dont name est obligatoire. La forme scalaire historique provider: aws n’est plus acceptée :

provider:
  name: aws
  region: eu-west-3

Ces valeurs communes sont fusionnées avec default.host.provider, host.<nom>.provider et volume.<nom>.provider. Les valeurs les plus spécifiques complètent ou remplacent les valeurs communes. Xbee vérifie la structure générale et que les valeurs requises ne sont pas vides ; la signification précise des champs reste le contrat du binaire provider.

Enfin, un pack système peut fournir des métadonnées sous provider.<nom>. Elles sont transmises séparément au provider pour identifier son image OS de base. L’environnement n’a donc généralement pas à répéter une AMI, une famille d’image GCP ou son équivalent.

AWS (host.provider) :

provider:
  name: aws
  region: eu-west-3

default:
  host:
    system: ubuntu:24.04
    net: default
    provider:
      availabilityZone: eu-west-3a
      instanceType: t3a.medium
      size: 20

host:
  a: {}

volume:
  data1:
    size: 20
    provider:
      volumeType: gp3
      iops: 3000
      throughput: 125

GCP (host.provider) :

provider:
  name: gcp
  projectId: my-project
  zone: europe-west9-b

default:
  host:
    system: ubuntu:26.04
    net: xbee-net
    provider:
      instanceType: e2-medium
      size: 20

host:
  a: {}

volume:
  data1:
    size: 20
    provider:
      diskType: pd-balanced

Azure (host.provider) :

provider:
  name: azure
  subscriptionId: <subscription-id>
  resourceGroup: my-rg
  location: westeurope

default:
  host:
    system: ubuntu:26.04
    net: xbee-net
    provider:
      vmSize: Standard_D2s_v3
      size: 30

host:
  a: {}

volume:
  data1:
    size: 20
    provider:
      sku: Premium_LRS

Les valeurs par défaut connues de Xbee vivent dans ~/xbee.yaml. La commande xbee new env --provider <nom> les utilise pour générer le squelette de xbee-env.yaml. Les providers actuellement présents dans cette configuration sont virtualbox, aws, gcp, azure, scaleway et ovh; la convention de téléchargement permet d’en utiliser d’autres si leur binaire est publié.

Ces valeurs se consultent et se modifient avec xbee config; voir Configuration globale.

Données envoyées au binaire

Avant chaque appel, Xbee écrit une représentation normalisée de l’environnement dans .xbee/env.yaml, puis lance le binaire avec une action (up, down, infos, image, suppression de volumes ou d’images, etc.). Cette représentation distingue :

  • les paramètres communs du provider ;
  • la configuration provider de chaque hôte et volume ;
  • les métadonnées provider.<nom> de chaque pack système ;
  • l’identité et le hash des systèmes et packs applicatifs.

Orchestrateur

L’Orchestrateur (xbee/orchestrator.go) abstrait le cycle de vie container vs VM derrière une interface commune :

Up / Down / Enter / Delete / Operate / Pack

Les implémentations vivent sous xbee/container/ pour Docker et xbee/vm/ pour tous les providers externes. Le reste du modèle — packs, environnements et actions — est commun.

Volumes

Voir Environnements pour la déclaration d’un volume (volume: racine) et son association à un hôte (host.<nom>.volume:).