Aller au contenu

Gérer Olivares AI comme du code (Terraform)

Olivares AI expose un provider Terraform qui vous permet de gérer le control plane en tant que code — agents, politiques de gouvernance, liaisons agent↔identité et définitions de déploiement déclarés en HCL et réconciliés contre le moteur en cours d’exécution via son API REST. Il s’agit du module XIX (API propre + manage-as-code) ; le provider est un client léger sur la même surface REST que documente la référence de l’API, donc tout ce que vous pouvez faire en HCL, vous pouvez le faire via REST.

Le provider et la CLI sont sous Apache-2.0 et n’importent jamais les internes du moteur ; le HCL n’est qu’une autre interface vers l’API gouvernée.

terraform {
required_providers {
olivares = {
source = "olivaresai/olivares"
}
}
}
provider "olivares" {
endpoint = "https://olivares.internal:8443" # or OLIVARES_ENDPOINT
api_token = var.olivares_token # or OLIVARES_API_TOKEN (sensitive)
# tenant = "…" # optional; or OLIVARES_TENANT (sent as X-Olivares-Tenant)
# insecure_skip_verify = true # dev self-signed cert only
}
Paramètre Requis Variable d’env. de repli Notes
endpoint oui OLIVARES_ENDPOINT URL de base de l’API du control plane
api_token oui OLIVARES_API_TOKEN Jeton bearer opaque (le produit utilise des jetons opaques et révocables, pas des JWT)
tenant non OLIVARES_TENANT UUID du tenant ; à omettre lorsque le jeton est lié à un tenant
insecure_skip_verify non — Ignore la vérification TLS pour le certificat auto-signé de développement ; jamais en production

L’authentification est un jeton bearer envoyé à chaque requête, le tenant étant transporté dans l’en-tête X-Olivares-Tenant — avec le même RBAC deny-by-default, le même cloisonnement par tenant et le même audit par action que le reste de l’API. Émettez un jeton pour une identité de service au moindre privilège, et gardez-le hors de l’état (utilisez une variable et un backend de secrets).

Ressource Gère Attributs clés
olivares_agent Une entité agent dans l’inventaire name (requis), kind (requis), external_id (optionnel) ; calculés id, status, version
olivares_policy Une politique de gouvernance name (requis), kind (abac ou approval, requis, immuable), enabled, spec (requis, JSON) ; calculé spec_canonical
olivares_agent_identity_binding Lier un agent à une identité non humaine (le pont qui affine l’attribution R/RW) agent_id, identity_id/identity_ref, mint, allow_unknown ; calculés minted, shared, agent_count
olivares_deployment Une définition de déploiement (état désiré déclaratif) subject_kind, subject_ref, name, environment, runtime, target, source_ref, spec, desired_status ; calculés current_version, applied_version, spec_hash

Vues en lecture seule pour qu’un module puisse référencer l’état gouverné sans réimplémenter les appels REST : olivares_policies, olivares_identities, olivares_deployment, olivares_server_info et olivares_access_edges — cette dernière expose les arêtes R/RW et, avec include_drift = true, la dérive Permitted-vs-Observed (y compris le drapeau honnête reconciliation_pending pour un accès qui n’est pas encore attribuable de façon ferme).

resource "olivares_agent" "billing_bot" {
name = "billing-reconciler"
kind = "service"
}
resource "olivares_policy" "require_approval_for_prod" {
name = "prod-deploys-need-approval"
kind = "approval"
enabled = true
spec = jsonencode({
# policy body — see the API reference for the schema of each kind
})
}
# Read the current Permitted-vs-Observed drift as data:
data "olivares_access_edges" "estate" {
include_drift = true
}

terraform plan réconcilie votre HCL contre le moteur ; terraform apply crée ou met à jour les objets via l’API gouvernée. Parce que les politiques et les liaisons modifient la surface d’autorisation, traitez le plan comme un changement à relire — le moteur audite chaque mutation avec l’acteur réel.