← Back to reference

Terraform Reference

Provider

terraform {
  required_providers {
    denpex = {
      source  = "denpex/denpex"
      version = "~> 0.7"
    }
  }
}

provider "denpex" {
  api_url = "https://api.denpex.ai"
  api_token = var.denpex_api_token
}

Resources

denpex_cluster

resource "denpex_cluster" "prod" {
  name        = "prod-cluster-a"
  tenant      = "acme"
  description = "Primary training cluster"

  ptp_server = "ptp.example.com"

  fabric_manager = {
    url           = "https://fm.example.com"
    token_secret  = denpex_secret.fm.id
  }

  ufm = {
    url       = "https://ufm.example.com"
    ca_bundle = filebase64("./certs/ufm-ca.pem")
  }

  rma_webhook = {
    url          = "https://rma.example.com"
    token_secret = denpex_secret.rma.id
  }

  tags = {
    cost-center = "ml-platform"
    region      = "us-west-2"
  }
}

denpex_rbac_role

resource "denpex_rbac_role" "sre" {
  tenant = denpex_cluster.prod.tenant
  name   = "sre"
  permissions = [
    "incidents.read",
    "incidents.approve",
    "remediation.execute",
    "audit.read"
  ]
}

denpex_audit_sink

resource "denpex_audit_sink" "splunk" {
  cluster = denpex_cluster.prod.id
  kind    = "splunk_hec"
  url     = "https://splunk.example.com:8088/services/collector/event"
  token_secret = denpex_secret.splunk.id
  hmac_secret  = denpex_secret.splunk_hmac.id
}

denpex_remediation_policy

resource "denpex_remediation_policy" "default" {
  cluster = denpex_cluster.prod.id
  yaml    = file("./policies/cordon.yml")
}

Data sources

denpex_incident

data "denpex_incident" "current" {
  cluster = denpex_cluster.prod.id
  status  = "open"
}

output "incident_url" {
  value = data.denpex_incident.current.url
}

Acceptance Tests

cd terraform-provider-denpex
go test ./...

Compatibility

  • Terraform 1.5+.
  • OpenTofu 1.6+.