Govern Terraform applies. Chain the downstream stack.

Trigger terraform plan on cron, on a Git push, or any HTTP event. Gate between plan and apply with the Pause task, retry the failed step on transient errors, and chain Terraform, Ansible, and ArgoCD in one execution history.

From plan to apply, end to end.

Terraform solves reproducibility. Kestra solves the operational layer around it: when runs happen, who approves them, what runs next, and where the audit lives.

Plan, gate, and apply as one flow

terraform plan and terraform apply become two steps in a Kestra flow. The flow pauses between them on a Pause task, surfaces the plan diff in the UI, and resumes only after a named reviewer approves. The decision is logged with a timestamp and identity.

Native scheduling and drift detection

Kestra runs terraform plan on a cron or interval schedule and checks the output. If the plan is non-empty, the flow routes the diff to Slack, email, or a webhook. No cron job on a jump box, no polling script, no missed drift.

Coordination with Ansible, ArgoCD, and the rest of the stack

Terraform provisions the VM. Ansible configures it. ArgoCD ships the app. All three run as sequential tasks in one flow, with Terraform outputs (IPs, resource IDs) passed forward and per-step retries on the step that fails. The Terraform step does not re-run when Ansible fails.

Per-step execution history with attribution

Every run captures the trigger source, the inputs, the plan output, the apply result, and the reviewer. The record is searchable by date, status, or operator. Auditors get evidence by default, attached to the execution that produced it.

How platform teams use Terraform and Kestra

Patterns infrastructure teams run in production today. Each one shows the flow end to end, with the real plugin classes in play.

Scheduled

Scheduled drift detection

Run terraform plan on a cron schedule against the production state. If the plan returns a non-empty diff, Kestra captures the output, posts the change set to Slack, and links straight to the execution. No one has to remember to check.

Cron + interval schedules

Native scheduler with cron, fixed intervals, or condition-based triggers.

Plan output stored per run

Every drift check is timestamped, attributed, and replayable in the UI.

Slack / email / webhook routing

Route the diff to the team that owns the affected modules.

cron trigger
on schedule
terraform plan
capture diff
diff check
non-empty?
alert
Slack / email
Governance

Approval gate between plan and apply

Run terraform plan automatically. Pause the flow on the plan output. A named reviewer reads the diff in the Kestra UI and resumes the flow. Only then does terraform apply run. The approver and timestamp land in the execution history.

Native pause + resume

Built-in Pause task suspends execution until a reviewer approves.

Reviewer + timestamp logged

Identity and approval moment stored in execution history automatically.

Retry on transient apply errors

Configure a per-step retry policy on terraform apply with backoff.

Replayable from any step

Re-run the apply without re-running the plan, or vice versa.

trigger
on event or PR
terraform plan
capture diff
pause / review
human approves
terraform apply
with retries
audit log
who + when
Full pipeline

Provision with Terraform, configure with Ansible, deploy with ArgoCD

Run terraform apply to provision the VM, hand the outputs (IP, hostname) to ansible-playbook to configure the app, then trigger an argocd app sync for the deployment. If Ansible fails, Kestra retries the Ansible step. The Terraform apply does not re-run.

Step-level retries

Retry only the failed step. The Terraform apply is not re-run on Ansible failure.

Outputs flow forward

Pass IPs, resource IDs, and Terraform output values into the next task.

Shared execution context

One execution ID across Terraform, Ansible, and ArgoCD. One UI to debug.

Single audit history

Search every run by date, status, or operator from one place.

trigger
on demand or schedule
terraform apply
provision VM
ansible-playbook
configure app
argocd sync
deploy
notify
Slack + CMDB
Multi-env

Promotion across dev, staging, and production

One flow runs terraform apply against the dev workspace, validates, pauses for a reviewer, applies against staging, validates again, pauses, then applies against production. Each gate logs the approver. Each apply runs against its own remote state.

Workspace as a flow input

Pass the target workspace, var-file, or backend config as a flow input.

Promotion stops on failure

A failed staging apply halts the flow before the production run.

Reviewer per environment

Different approvers per gate, with the identity logged at each step.

trigger
git push or webhook
dev apply
workspace = dev
review
gate
staging apply
workspace = staging
review
gate
prod apply
workspace = prod
Self-service

Self-service VM and resource provisioning

Wrap a Terraform module behind a Kestra App: a form with typed inputs (region, size, owner) that runs the same flow every time. Engineers request infrastructure without cloning the repo, editing HCL, or holding cloud console access.

Typed inputs and dropdowns

Form inputs validated before the flow runs. No malformed tfvars.

RBAC on who can run what

Role-based access on the form itself, not on the cloud console.

Same flow, every request

Every provision goes through the same audited, retry-aware execution.

Kestra App
form input
generate hostname
naming convention
terraform apply
provision
notify
Slack + IP
Operations

State backend migration with auth and verification

Move Terraform state from one backend to another (on-prem database to Azure Blob, S3 to GCS, local to remote) as one auditable flow. Kestra handles the credentialed auth step, backs up the source state, runs terraform state mv, and verifies the new backend before marking the migration complete.

Credentialed execution

Pull workload identity tokens or static secrets from a vault, scoped per task.

Backup before migrate

Snapshot the source state to a versioned location before touching anything.

Post-migration verification

List the new backend, confirm the state file is present, halt if not.

auth
workload identity
state backup
snapshot source
terraform state mv
migrate
verify
list new backend
notify
on complete
Terraform provisions the VM, Ansible configures the application, ArgoCD handles the deployment. All orchestrated through Kestra.
Censhare

Blueprints for Terraform orchestration.

One blueprint per use case above. Copy the YAML, point it at your state backend, ship it.

Scheduled drift detection
Approval gate between plan and apply
Provision with Terraform, configure with Ansible, deploy with ArgoCD

Scheduled drift detection

Runs terraform plan hourly with -detailed-exitcode. If exit code 2 (changes detected), Kestra captures the full plan output and posts a Slack alert with a link to the execution. Replayable per run, no cron job on a jump box.

Explore Blueprints

Approval gate between plan and apply

Runs terraform plan, pauses the flow on the plan output, waits for a named reviewer, then runs terraform apply against the same plan. The reviewer identity and timestamp are logged automatically. Retries the apply step on transient failure.

Explore Blueprints

Provision with Terraform, configure with Ansible, deploy with ArgoCD

terraform apply provisions the VM and writes the private IP to a task artifact. ansible-playbook configures the app using that IP, with per-step retries. argocd app sync ships the deployment. Slack confirms when all three steps succeed.

Explore Blueprints

Kestra vs Terraform orchestration alternatives

Capability
Terraform Cloud / HCP
GitHub Actions
Jenkins
Scheduling
Native cron + events
Run triggers, no cronCron-based workflowsCron in pipelines
Approval gate between plan and apply
Native pause + resume
Run approvals (paid tiers)Environment approvals (deploy only)Pipeline input step
Retry per step on apply failure
Configurable per task
Re-run from startRe-run from start or stepBuilt in, pipeline-coded
Chain Terraform with Ansible / ArgoCD
Native, with outputs
Terraform onlyPossible, glue scripts requiredPossible, plugin-dependent
Per-run execution history with attribution
Execution history + task state
Run history in HCP UIRun history in Actions UIBuild history
Self-service forms for non-engineers
Kestra Apps
No-code modules (paid tiers)No native form layerParameterized build
OpenTofu / Terragrunt support
Dedicated plugins
Terraform onlyRun any CLI manuallyRun any CLI manually

Terraform & Kestra: common questions

Find answers to your questions right here, and don't hesitate to Contact Us if you couldn't find what you're looking for.

See How

Ready to orchestrate your Terraform runs?

Schedule plans, gate applies, retry failures, and chain Terraform with Ansible and ArgoCD. Open source, self-hosted, event-driven.