Terraform/OpenTofu provider for managing Jitsu Console configuration objects.
jitsu_workspacejitsu_functionjitsu_destinationjitsu_streamjitsu_link
- Go
1.24+(for local build/development) - Terraform or OpenTofu
- Running Jitsu Console API
terraform {
required_providers {
jitsu = {
source = "chilipiper/jitsu"
}
}
}- Build the provider:
make build- Configure
~/.terraformrcor~/.tofurc:
provider_installation {
dev_overrides {
"chilipiper/jitsu" = "/absolute/path/to/terraform-provider-jitsu"
}
direct {}
}- Initialize your Terraform/OpenTofu project:
terraform init
# or
tofu initProvider uses session authentication via:
username+password(or envJITSU_USERNAME/JITSU_PASSWORD)
console_url can be set via JITSU_CONSOLE_URL.
database_url is optional but strongly recommended. Jitsu uses soft-delete; database_url allows the provider to hard-delete stale rows during recreate flows.
terraform {
required_providers {
jitsu = {
source = "chilipiper/jitsu"
}
}
}
provider "jitsu" {
console_url = "http://localhost:3300"
username = "admin@jitsu.com"
password = "admin123"
database_url = "postgres://reporting:plz_no_hack!@localhost:5432/reporting?sslmode=disable"
}
resource "jitsu_workspace" "main" {
name = "Terraform Workspace"
slug = "terraform-workspace"
}
resource "jitsu_function" "enrich" {
workspace_id = jitsu_workspace.main.id
id = "enrich_event"
name = "Enrich Event"
code = <<-JS
export default async function(event) {
event.properties = event.properties || {};
event.properties.source = "terraform";
return event;
}
JS
}
resource "jitsu_stream" "site" {
workspace_id = jitsu_workspace.main.id
id = "site-stream"
name = "Site Stream"
public_keys = [{
id = "js.site"
plaintext = "js.site"
}]
}
resource "jitsu_destination" "clickhouse" {
workspace_id = jitsu_workspace.main.id
id = "dest-clickhouse"
name = "Local ClickHouse"
destination_type = "clickhouse"
protocol = "http"
hosts = ["clickhouse:8123"]
username = "reporting"
password = ""
database = "default"
}
resource "jitsu_link" "site_to_clickhouse" {
workspace_id = jitsu_workspace.main.id
from_id = jitsu_stream.site.id
to_id = jitsu_destination.clickhouse.id
mode = "batch"
frequency = 1
batch_size = 10000
functions = [jitsu_function.enrich.id]
}For a fuller local example, see examples/main.tf.
jitsu_workspace:workspace_id_or_slugjitsu_function:workspace_id/function_idjitsu_destination:workspace_id/destination_idjitsu_stream:workspace_id/stream_idjitsu_link:workspace_id/from_id/to_id
Examples:
terraform import jitsu_workspace.main <workspace_id_or_slug>
terraform import jitsu_function.enrich <workspace_id>/<function_id>
terraform import jitsu_destination.clickhouse <workspace_id>/<destination_id>
terraform import jitsu_stream.site <workspace_id>/<stream_id>
terraform import jitsu_link.site_to_clickhouse <workspace_id>/<from_id>/<to_id>- Unit and resource tests:
make test- Acceptance tests:
TF_ACC=1 go test ./internal/provider -v -timeout 300s
# or
make testaccCommon environment variables:
JITSU_CONSOLE_URLJITSU_USERNAMEJITSU_PASSWORDJITSU_DATABASE_URL
Local stack for testing is available at workbench/docker-compose.yaml.