Automatyczne zarządzanie repozytoriami
2 minute read
OpenTofu coraz częściej wykorzystywany jest nie tylko do budowy infrastruktury chmurowej, lecz także do zarządzania całym ekosystemem usług.
W repozytorium iac-gitlab przygotowałem modułowy zestaw definicji, który pozwala w deklaratywny sposób tworzyć i utrzymywać grupy oraz projekty w GitLabie.
Po co IaC dla GitLaba?
- Automatyzacja: grupy i projekty tworzą się automatycznie na podstawie kodu.
- Powtarzalność: każda zmiana jest opisana w repozytorium, a
tofu planpokazuje różnice. - Rozliczalność: pełna historia zmian wraz z informacją kto, gdzie i kiedy je zlecił.
- Porządek: struktura katalogów odpowiada strukturze GitLaba, co ułatwia nawigację i odnalezienie definicji konkretnej grupy czy projektu.
Jak zbudowane jest repozytorium?
Struktura katalogów odzwierciedla hierarchię GitLaba:
iac-gitlab
├── data/ # listy do walidacji (typy projektów, avatary, etykiety)
├── pl.rachuna-net/ # główna grupa i jej podgrupy
│ ├── containers/ # definicje projektów kontenerowych
│ ├── cicd/ # ustawienia CI/CD
│ └── infrastructure/ # infrastruktura (np. opentofu)
└── _providers.tf # konfiguracja providerów (m.in. GitLab)
Architektura rozwiązania
flowchart TB
subgraph s1["opentofu module"]
n2["gitlab-group"]
n1("gitlab-project")
end
A["iac-gitlab"] --> n1
A --> n2
n2@{ shape: rounded}
Tworzenie grupy repozytoriów
Definicja grupy korzysta z modułu gitlab-group:
module "_containers" {
source = "git@gitlab.com:pl.rachuna-net/infrastructure/opentofu/modules/gitlab-group.git?ref=v1.0.0"
name = "containers"
description = "Repozytoria z obrazami kontenerowymi."
parent_group = local.parent_name
visibility = "public"
default_branch = "main"
avatar = "containers"
}
module "containers" {
source = "./containers/"
}
Pierwszy moduł tworzy grupę, a drugi ładuje definicje jej podprojektów.
W pliku _locals.tf przechowuję wspólne parametry, aby uniknąć powielania konfiguracji.
Tworzenie projektu
Moduł gitlab-project umożliwia definiowanie parametrów projektu:
module "opentofu" {
source = "git@gitlab.com:pl.rachuna-net/infrastructure/opentofu/modules/gitlab-project.git?ref=v1.0.0"
name = "opentofu"
description = "Obraz Dockerowy z narzędziem opentofu."
visibility = "public"
parent_group = local.parent_name
project_type = "container"
avatar = "opentofu"
}
Jak pracować z iac-gitlab w praktyce?
- Dodaj definicję grupy lub projektu w odpowiednim katalogu.
- Wyślij Merge Request — pipeline wykona tylko plan
- Po mergu GitLab automatycznie tworzy lub aktualizuje grupy, projekty, etykiety, avatary oraz zmienne CI.
Co jeszcze znajduje się w repozytorium?
data/allowed_*— walidacja dozwolonych typów projektów i avatarów; spina IaC z politykami organizacji.images/— katalog z avatarami dla grup i projektów.
Szybki start
- Repozytorium definicji:
- Moduły: