Aller au contenu principal

Workspaces

À venir

Fonctionnalité en préparation. Cette page décrit l'interface cible pour recueillir vos retours ; rien n'est encore utilisable.

L'exécution de modules OpenTofu est en préparation. Cette page décrit l'interface cible pour recueillir vos retours ; les manifestes ne sont pas encore acceptés.

Un Workspace déclare un module OpenTofu (publié en OCI) et ses entrées. La plateforme l'exécute pour vous, dans votre tenant, et publie ses outputs dans un secret. Vous n'installez ni OpenTofu, ni backend de state, ni credentials sur un poste.

Ce que ça change par rapport à tofu apply en local​

En localAvec un Workspace
Le state est sur votre machine ou dans un bucket que vous gérezLe state est tenu par la plateforme, verrouillé, par Workspace
Les credentials des providers sont dans votre environnementIls sont dans des secrets du tenant, injectés dans le run
Vous relancez plan pour voir la dériverefresh.interval la détecte et l'expose dans le status
Les dépendances entre racines se gèrent à la main ou avec terragruntdependsOn et workspaceOutputRef enchaînent les Workspaces

Exemple​

network.yml
apiVersion: tofu.stackngo.io/v1alpha1
kind: Workspace
metadata:
name: network
spec:
module:
source: oci://ovh-gra-0.registry.dev.stackngo.fr/acme/ovh-network
tag: 1.4.0
providers: [{name: ovh-gra}]
vars:
cidr: 10.20.0.0/16
refresh: {interval: 30m, mode: plan}
app.yml
apiVersion: tofu.stackngo.io/v1alpha1
kind: Workspace
metadata:
name: app
spec:
module:
source: oci://ovh-gra-0.registry.dev.stackngo.fr/acme/ovh-instance
digest: sha256:9f1c… # digest plutôt que tag pour une version figée
providers: [{name: ovh-gra}]
dependsOn: [{name: network}]
vars: {size: s1-2}
varsFrom:
- workspaceOutputRef: {name: network, output: subnet_id}
default: subnet-mock # permet un plan avant que network ait publié
- secretRef: {name: app-secrets, key: ssh-key}
varName: ssh_public_key
refresh: {interval: 1h, mode: apply}
approval: manual
deletionPolicy: Orphan

Entrées​

  • module.source : une référence oci://…, avec tag ou digest (jamais les deux ; ni l'un ni l'autre = latest). pullSecretRef si le registre exige une authentification.
  • vars : un objet libre, écrit tel quel en terraform.tfvars.json.
  • varsFrom : une variable alimentée par une clé de secret (secretRef), ou par un output d'un autre Workspace du tenant (workspaceOutputRef). varName renomme ; default donne une valeur de secours pour planifier avant que le parent ait publié (jamais pour appliquer).
  • providers : les Provider du tenant à utiliser, par nom.
  • imports : adopter des ressources existantes (to = adresse dans le module, id ou idFrom un secret).

Sorties​

Les outputs du module sont écrits dans un secret du tenant, <nom>-outputs par défaut (spec.outputs.secretName), une clé par output. Un output non textuel est encodé en JSON. C'est ce secret qu'un autre Workspace lit via workspaceOutputRef, et qu'une App peut injecter en variable d'environnement.

Rafraîchissement et dérive​

refresh.interval (au moins 1m) relance un run périodique :

  • mode: plan : détecte la dérive sans rien changer ; la condition Drifted passe à True et le status.lastPlan compte les ajouts, modifications et destructions.
  • mode: apply : réapplique pour corriger la dérive.

Un run est aussi déclenché par tout changement d'entrée : spec, secret référencé, Provider, output d'un parent.

Approbation manuelle​

Avec approval: manual, un plan qui contient des changements s'arrête et attend. La condition AwaitingApproval donne l'identifiant du plan (status.lastPlan.id) ; approuvez-le depuis la console ou avec l'API. L'apply re-planifie et refuse si le résultat a changé entre-temps (PlanChangedSinceApproval).

Un verrou de state tenu par un tiers bloque les runs (StateLocked, détenteur dans status.lock) ; s'il est orphelin, contactez le support.

Dépendances​

dependsOn impose l'ordre ; workspaceOutputRef crée en plus un lien de données. Un enfant attend que ses parents soient Ready. Quand les outputs d'un parent changent, ses enfants rejouent. Les cycles sont détectés (DependencyCycle). Avec deletionPolicy: Destroy, la destruction se fait dans l'ordre inverse : un parent attend la disparition de ses enfants.

Suppression​

deletionPolicyEffet de sng kind delete Workspace app
Orphan (défaut)Le manifeste et le state sont retirés ; les ressources créées restent en place
Destroytofu destroy est exécuté d'abord ; refusé s'il reste des imports, sauf autorisation explicite (prévue)

Lire l'état​

L'état d'un Workspace sera affiché par sng. Il portera lastPlan (identifiant, compteurs, hash), lastApply (date, résultat Succeeded, Failed, Rejected, Interrupted, StateLocked), nextRunAt, consecutiveFailures, et lock si un verrou tiers bloque.

Voir aussi​