---
title: "Reliable, repeatable deployments | Grafana Labs"
description: "How Terraform keeps deployments reliable, with no duplicates and automatic drift correction"
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

## How Terraform handles existing resources

A reliable pipeline produces the same result no matter how many times you run it, with no duplicate resources and no errors. Terraform ensures this with a state file: a record of the resources it has created. On each run, Terraform decides what to change by comparing three things:

- Your configuration
- The state file
- What actually exists in Grafana

When a live resource no longer matches your code (for example, someone edited an alert threshold in the UI), that difference is called drift. Because of this, you can safely retry failed runs and merge to main repeatedly without creating duplicates.

| Scenario                     | What Terraform does                          |
|------------------------------|----------------------------------------------|
| Resource doesn’t exist       | Creates it and records in state              |
| Resource exists and matches  | No changes needed                            |
| Resource was edited manually | Detects drift, restores code-defined version |

## Singleton resources

Some Grafana resources, like the notification policy tree, exist as a single instance. Terraform handles these correctly: it updates the existing policy tree in place rather than trying to create a second one. This means your pipeline can safely manage the full alerting pipeline, including the notification policy, without conflicts.

## Safe retries

The practical benefit of state management: you can rerun your pipeline as many times as you want. Failed runs can be retried safely. Multiple merges to main won’t create duplicate alert rules or contact points. And manual edits in the UI get corrected on the next pipeline run.
