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ètreRequisVariable d’env. de repliNotes
endpointouiOLIVARES_ENDPOINTURL de base de l’API du control plane
api_tokenouiOLIVARES_API_TOKENJeton bearer opaque (le produit utilise des jetons opaques et révocables, pas des JWT)
tenantnonOLIVARES_TENANTUUID du tenant ; à omettre lorsque le jeton est lié à un tenant
insecure_skip_verifynonIgnore 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).

RessourceGèreAttributs clés
olivares_agentUne entité agent dans l’inventairename (requis), kind (requis), external_id (optionnel) ; calculés id, status, version
olivares_policyUne politique de gouvernancename (requis), kind (abac ou approval, requis, immuable), enabled, spec (requis, JSON) ; calculé spec_canonical
olivares_agent_identity_bindingLier 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_deploymentUne 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.