# Terraform Implementation Guide

This guide gives a quick template for provisioning the same infrastructure that’s managed by the homelab repository, but using Terraform as the IaC tool.

> ⚠️ **NOTE**: These are *example* configurations. In production, ensure you manage secrets with Vault or an equivalent system.

## 1. Prerequisites

- Terraform >= 1.5
- `terraform-provider-external` for custom scripts
- `oci` or `proxmox-ve` provider for hypervisor configuration

## 2. Terragrunt Directory Layout

```text
infra/
├── terragrunt.hcl          # Root provider config
├── nodes/
│   ├── atlas/terragrunt.hcl   # Synology Atlas
│   ├── concord/terragrunt.hcl # Intel NUC
│   └── pi5/terragrunt.hcl    # Raspberry Pi 5
└── services/
    ├── nginx/terragrunt.hcl
    ├── prometheus/terragrunt.hcl
    └── ...
```

## 3. Example Module: Synology NAS

```hcl
# modules/synology-nas/main.tf
resource "garden_nas" "atlas" {
  hostname = "atlantis.vish.local"
  username = var.special_user
  password = "REDACTED_PASSWORD"
  tags     = ["primary", "nas"]
}
```

## 4. Deployment Steps

```bash
# Install terragrunt
curl -L https://github.com/gruntwork-io/terragrunt/releases/download/v0.50.0/terragrunt_linux_amd64 -o /usr/local/bin/terragrunt && chmod +x /usr/local/bin/terragrunt

# Bootstrap provider
terraform init

# Apply infra plan
terragrunt run-all apply
```

## 5. Maintaining State

Use a remote backend such as Vault, Consul or an S3 bucket to avoid state drift.

---

For reference: the homelab repo uses **git‑ops**. The Terraform guide is a *parallel* fabric.  Keep both in sync via CI tags.
