Epic 2

opentofu Zarządzenie przestrzenią pl.rachuna-net w gitlab za pomocą OpenTofu

🎯 Cel epiki

Pełna automatyzacja zarządzania strukturą grup i projektów w przestrzeni pl.rachuna-net na GitLabie przy wykorzystaniu podejścia Infrastructure as Code (IaC) opartego na OpenTofu.

  • Utworzenie modułów OpenTofu do zarządzania grupami (gitlab-group), projektami (gitlab-project) oraz kontenerami (OpenTofu).

  • Import istniejących zasobów do OpenTofu state (OpenTofu import).

  • Ujednolicenie struktury folderów i repozytoriów (infrastructure/OpenTofu, modules, iac-gitlab, containers).

  • Przeniesienie konfiguracji do zarządzalnych modułów oraz refaktoryzację kodu.

---
config:
  theme: neo
  layout: dagre
  look: neo
---
flowchart TD
 subgraph s1["Czynności manualne"]
        n5["Utworzenie grup i repozytoriów<br>"]
  end
 subgraph s2["Utworzenie modułów"]
        n8["gitlab-group"]
        n10["gitlab-project"]
  end
 subgraph s3["Repozytorium IAC"]
        n12["iac-gitlab"]
  end
 subgraph s4["Wykonywanie zmian"]
        n13["tofu plan<br>(wyświetlenie zmian)"]
        n14["tofu apply<br>(Wykonywanie zmian)"]
  end
    s1 --> s2
    n8 --> n12
    n10 --> n12
    n13 --> n14
    n12 --> s4
    n11["Utworzenie obrazu <br>kontenerowego<br>z OpenTofu"] --> s4

    n5@{ shape: rect}
    n12@{ shape: rounded}
    n11@{ shape: rounded}
     n8:::Sky
     n10:::Sky
     n12:::Sky
     n11:::Sky
    classDef Sky stroke-width:1px, stroke-dasharray:none, stroke:#374D7C, fill:#E2EBFF, color:#374D7C
    click n8 "https://gitlab.com/pl.rachuna-net/infrastructure/opentofu/modules/gitlab-group"
    click n10 "https://gitlab.com/pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project"
    click n12 "https://gitlab.com/pl.rachuna-net/infrastructure/opentofu/iac-gitlab"
    click n11 "https://gitlab.com/pl.rachuna-net/containers/opentofu"

Manualne tworzenie repozytoriów i grup

  • ✅ Utworzenie manualne grupy pl.rachuna-net
  • ✅ Utworzenie manualne grupy pl.rachuna-net/infrastructure
  • ✅ Utworzenie manualne grupy pl.rachuna-net/infrastructure/opentofu
  • ✅ Utworzenie manualne grupy pl.rachuna-net/infrastructure/opentofu/modules
  • ✅ Utworzenie manualne repozytorium pl.rachuna-net/infrastructure/opentofu/iac-gitlab
  • ✅ Utworzenie manualne repozytorium pl.rachuna-net/infrastructure/opentofu/modules/gitlab-group
  • ✅ Utworzenie manualne repozytorium pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project

Moduły OpenTofu


Utworzenie obrazu z OpenTofu

podman run -it -v $PWD:/opentofu -v ~/.ssh:/root/.ssh -u root registry.gitlab.com/pl.rachuna-net/containers/opentofu:1.0.0-3d3738b8 bash

cd /opentofu

CI_SERVER_URL="https://gitlab.com"
CI_PROJECT_ID="123456789"
CI_USERNAME="gitlab-runner"
CI_JOB_TOKEN="***"
TF_STATE_NAME="default"

tofu init \
  -backend-config="address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/opentofu/state/${TF_STATE_NAME}" \
  -backend-config="lock_address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/opentofu/state/${TF_STATE_NAME}/lock" \
  -backend-config="unlock_address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/opentofu/state/${TF_STATE_NAME}/lock" \
  -backend-config="username=${CI_USERNAME}" \
  -backend-config="password=${CI_JOB_TOKEN}" \
  -backend-config="lock_method=POST" \
  -backend-config="unlock_method=DELETE" \
  -backend-config="retry_wait_min=5" \
  -lock=false \
  -migrate-state
tofu plan
tofu apply -auto-aprove

Import istniejących zasobów do OpenTofu

tofu import module.group_pl_rachuna-net.gitlab_group.group 105046057

Utworzenie zasobów do OpenTofu

Last modified August 14, 2025: feat!: DEVOPS-123 Zmiana mkdocs na hugo (660375f)