🟡 Intermediate

OpenTofu — Open-source fork Terraformu

OpenTofu je open-source fork Terraformu, ktorý vznikol v auguste 2023 ako reakcia komunity na zmenu licencie Terraformu z Mozilla Public License v2 (MPL) na Business Source License (BSL). Dnes je OpenTofu projektom pod hlavičkou Linux Foundation a jeho cieľom je udržať Infrastructure as Code skutočne otvorený, kompatibilný a riadený komunitou.


Prečo OpenTofu vznikol?

  1. augusta 2023 HashiCorp oznámil, že Terraform (a väčšina ich produktov) prechádza z MPL na BSL 1.1. BSL je licencia s tzv. "non-compete" klauzulou — zakazuje používať zdrojový kód v produkte, ktorý priamo konkuruje HashiCorpu. To síce umožňuje interné firemné použitie, ale blokuje platformy ako Spacelift, env0 či Scalr, ktoré postavili biznis okolo Terraformu.

Komunita reagovala rýchlo:

  1. Manifest "OpenTF" — otvorený list podpísaný stovkami firiem a tisíckami vývojárov žiadajúci HashiCorp o návrat k otvorenej licencii.
  2. Odmietnutie zo strany HashiCorpu — po týždňoch bez reakcie sa komunita rozhodla pre fork.
  3. Vznik OpenTofu — fork z poslednej MPL verzie Terraformu (1.5.x), prijatý Linux Foundation ako oficiálny projekt pod značkou OpenTofu.
  4. Akvizícia HashiCorpu IBM-om (2024) situáciu neupokojila — IBM nenavrátil licenciu späť na MPL, takže OpenTofu pokračuje ako plne nezávislá alternatíva.

OpenTofu vs Terraform — hlavné rozdiely

Aspekt Terraform (BSL) OpenTofu (MPL)
Licencia Business Source License 1.1 Mozilla Public License 2.0
Governance HashiCorp/IBM Linux Foundation, komunita
CLI príkaz terraform tofu
Syntax HCL Identická Identická (plne kompatibilná)
State formát v4 v4 (kompatibilný obojsmerne s 1.5.x)
Provider registry registry.terraform.io registry.opentofu.org (mirror + vlastné)
Module registry HashiCorp OpenTofu registry
Nové features Proprietárne (1.6+) State encryption, early variable eval, provider iteration

V praxi: existujúce Terraform moduly, providery a state súbory fungujú v OpenTofu bez zmeny — pokiaľ ste na verzii ≤ 1.5.x. Od Terraformu 1.6 sa features začínajú rozchádzať.


Migrácia z Terraformu na OpenTofu

Oficiálna migrácia je navrhnutá tak, aby bola takmer bezbolestná:

# 1. Nainštaluj OpenTofu (macOS/Linux)
brew install opentofu
# alebo
curl --proto '=https' --tlsv1.2 -fsSL \
  https://get.opentofu.org/install-opentofu.sh | sh

# 2. V existujúcom projekte spusti
tofu init

# 3. Over plán — musí sedieť s posledným terraform plan
tofu plan

# 4. Aplikuj
tofu apply

State file OpenTofu dokáže prečítať bez migrácie. Providery sa sťahujú z registry.opentofu.org (obsahuje mirror všetkých populárnych providerov ako aws, azurerm, google, kubernetes).

Backend kompatibilita

Zdieľanie state medzi terraform a tofu CLI funguje, ak obaja používajú rovnaký backend (S3, GCS, Consul, atď.). Odporúčanie: v projekte si zvoľte jeden nástroj a držte sa ho, aby ste sa vyhli zmätku v CI.


Nové features v OpenTofu, ktoré Terraform nemá

1. State encryption (1.7+)

OpenTofu podporuje natívne šifrovanie state súboru bez externých nástrojov. Konfigurácia v terraform bloku:

terraform {
  encryption {
    key_provider "pbkdf2" "mykey" {
      passphrase = var.tofu_encryption_passphrase
    }

    method "aes_gcm" "secure" {
      keys = key_provider.pbkdf2.mykey
    }

    state {
      method = method.aes_gcm.secure
    }
  }
}

Po šifrovaní je .tfstate na disku binárny a nečitateľný bez hesla — riešenie dlhoročného problému Terraformu, kde state obsahoval citlivé údaje v čistom texte.

2. Early variable evaluation (1.8+)

V Terraforme nemôžete použiť premennú v backend alebo module.source. OpenTofu to dovoľuje:

variable "environment" {
  type = string
}

terraform {
  backend "s3" {
    bucket = "tfstate-${var.environment}"
    key    = "main.tfstate"
    region = "eu-central-1"
  }
}

Výrazne zjednodušuje multi-environment setup bez generátorov ako Terragrunt.

3. for_each pre providery

Dynamické vytváranie inštancií providera podľa zoznamu regiónov alebo účtov:

provider "aws" {
  for_each = toset(["eu-central-1", "us-east-1", "ap-southeast-1"])
  alias    = "region"
  region   = each.key
}

Toto je častý use-case v multi-region deploymentoch, ktorý v Terraforme vyžaduje manuálne opakovanie blokov.


Praktický príklad — kompletný modul

Jednoduchý S3 bucket s verzovaním a šifrovaním:

terraform {
  required_version = ">= 1.7.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = var.region
}

variable "region" {
  type    = string
  default = "eu-central-1"
}

variable "bucket_name" {
  type = string
}

resource "aws_s3_bucket" "data" {
  bucket = var.bucket_name
}

resource "aws_s3_bucket_versioning" "data" {
  bucket = aws_s3_bucket.data.id
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_server_side_encryption_configuration" "data" {
  bucket = aws_s3_bucket.data.id
  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"
    }
  }
}

output "bucket_arn" {
  value = aws_s3_bucket.data.arn
}
tofu init
tofu plan -var="bucket_name=my-unique-bucket-2026"
tofu apply -var="bucket_name=my-unique-bucket-2026"

Identicky to funguje v Terraforme — ukazuje plnú kompatibilitu.


Ekosystém a integrácie

OpenTofu má dnes širokú podporu v nástrojoch, ktoré boli pôvodne postavené nad Terraformom:

  • Atlantis — PR-driven automation, podporuje tofu binary cez env premennú.
  • Spacelift, env0, Scalr — všetky prešli na OpenTofu ako default.
  • Terragrunt — podporuje tofu cez TERRAGRUNT_TFPATH=tofu.
  • tflint, tfsec, Checkov — fungujú bezo zmeny (pracujú nad HCL súbormi, nie nad CLI).
  • GitHub Actions — oficiálny opentofu/setup-opentofu@v1 action.

GitHub Actions príklad

name: OpenTofu CI

on: [pull_request]

jobs:
  plan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: opentofu/setup-opentofu@v1
        with:
          tofu_version: 1.8.0
      - run: tofu fmt -check
      - run: tofu init
      - run: tofu validate
      - run: tofu plan -no-color

Kedy zvoliť OpenTofu a kedy Terraform?

OpenTofu je vhodný ak:

  • Chcete mať istotu, že váš IaC nástroj zostane open-source.
  • Potrebujete state encryption bez externých nástrojov.
  • Pracujete s multi-region / multi-backend setupom, kde sa hodí early variable evaluation.
  • Využívate platformy (Spacelift, env0), ktoré aj tak prešli na OpenTofu.

Terraform má zmysel ak:

  • Máte platenú zmluvu s HashiCorp/IBM a používate Terraform Cloud / Enterprise funkcie (napr. Sentinel, no-code modules, run tasks), ktoré OpenTofu nereplikuje.
  • Máte hlboké napojenie na HCP (HashiCorp Cloud Platform).

V oboch prípadoch sú HCL súbory prenositeľné — voľba nie je "lock-in", skôr politická a strategická.


Zhrnutie

OpenTofu ukazuje, že aktívna komunita dokáže udržať kritický open-source nástroj aj proti vôli pôvodného vendora. Za necelé dva roky od svojho vzniku sa stal de facto štandardom pre firmy, ktoré chcú IaC bez právneho rizika BSL licencie, s aktívnym vývojom (state encryption, early eval, provider iteration) a s kompletnou kompatibilitou existujúcich Terraform kódov.

Ak dnes začínate nový projekt, OpenTofu je bezpečná voľba — dostanete všetko, čo Terraform ponúkal v období 1.5.x, plus features, ktoré HashiCorp do Terraformu nikdy nepridal.

Odkazy