New to Kestra?
Use blueprints to kickstart your first workflows.
Run terragrunt run-all plan across every unit of a live infrastructure repo with Kestra, keep the plan log as an artifact, and post a Slack summary.
See the whole estate's pending changes in one execution. Terragrunt mono-repos split infrastructure into many small units, which keeps blast radius low but makes "what would change right now" a question that spans dozens of folders. This blueprint answers it with a single io.kestra.plugin.terragrunt.cli.TerragruntCLI task: terragrunt run-all plan walks every unit under the live folder, resolves the dependency graph, plans each unit, and the flow keeps the combined log as an execution artifact and posts a Slack summary.
The demo ships a miniature but structurally faithful repository inline through inputFiles: a root.hcl with shared inputs, two units (live/network and live/app) that include it, and two local modules that only create local_file resources, so the flow runs end to end without any cloud credentials.
plan_estate (io.kestra.plugin.terragrunt.cli.TerragruntCLI) materializes the repository layout from inputFiles into the task working directory. The terragrunt binary is on the PATH inside the task container, and the underlying terraform binary ships with the alpine/terragrunt image.terragrunt run-all plan --non-interactive --working-dir live discovers both units, includes the shared root.hcl in each, and plans them in dependency order. The output is captured to plan.log and echoed to the task log.find and emits the number through Kestra's outputs protocol, so it is available as {{ outputs.plan_estate.vars.units }}.notify posts the unit count to Slack, and the errors block posts a distinct alert when the plan fails anywhere in the estate.run-all plan log stored as a downloadable artifact on the execution.namespaceFiles or a Git clone.Running run-all plan from a laptop produces a wall of text that disappears with the terminal session. Kestra turns the same command into a governed operation: the log becomes a stored artifact, the unit count becomes structured output, Slack gets a summary, failures raise a distinct alert, and every run is preserved in the execution history so you can compare this week's estate against last week's.
env from {{ secret('...') }}.SLACK_WEBHOOK_URL: Slack incoming webhook URL.SLACK_WEBHOOK_URL secret to your Kestra namespace.plan.log in the execution outputs to see both units planned.inputFiles with namespaceFiles so the task mounts your real infrastructure repository from namespace storage, or clone it with io.kestra.plugin.git.Clone inside a WorkingDirectory task.tofu and setting the TERRAGRUNT_TFPATH environment variable through the task env.--working-dir, as shown in the Terragrunt environment promotion blueprint.