Správa Gitlabu pomocí Terraformu
#terraform #gitlab #devopslive
Tento blog post je shrnutím mého prvního live streamu DevOps Live. DevOps Live je stream live codingu na nějaké DevOps téma, které typicky nepokrývám ve svých školeních. Tento stream byl o možnosti spravovat konfiguraci Gitlabu deklarativním přístupem, čili Terraformem.
Gitlab představovat nemusím, je to DevOps platforma: hosting Git repozitářů, CI, ... Terraform je nástroj "Infrastructure as a Code", čili na správu infrastrury formou kódu. Terraform se převážně používá na správu Virtuálních strojů, S3 bucketu a Kubernetes clusteru v cloudu, ale dá se použít i na správu Gitlabu (čehokoliv co má API). Jdeme na to.
Setup Terraform konfigurace
Vytvoříme si repozitář, kam budeme vše dávat. První co vytvoříme bude soubor terraform.tf
, kde nakonfigurujeme remote backend v Terraform Cloudu, soubor versions.tf
kde definujeme jaké providery budeme používat a soubor providers.tf
kde je nainicializujeme.
// terraform.tf
terraform {
backend "remote" {
organization = "ondrejsika"
workspaces {
name = "gitlab"
}
}
}
// versions.tf
terraform {
required_providers {
gitlab = {
source = "terraform-providers/gitlab"
}
}
required_version = ">= 0.13"
}
// providers.tf
variable "gitlab_token" {}
variable "gitlab_domain" {}
provider "gitlab" {
base_url = "https://${var.gitlab_token}/api/v4/"
token = var.gitlab_token
}
Terraform nainicializujeme příkazem terraform init
. Potřebujeme nastavit akorát token, kterému dáme práva na API a sudo a doménu Gitlabu. Používám Terraform remote execution, tyto proměnné mám definované v Terraform Cloudu (samozřejmě Terraformem).
A teď k samotné správě Gitlabu. Dokumentace ke Gitlab Provideru (terraform-provider-gitlab
) je na: https://www.terraform.io/docs/providers/gitlab/index.html a je dobře napsaná.
Uživatelé
Já v Gitlabu potřebuji spravovat hlavně uživatele, skupiny a repozitáře. A samozřejmě vazby mezi nimi.
Všechny uživatele definuju v jednom souboru users.tf
.
// users.tf
resource "gitlab_user" "vojtechmares" {
name = "Ondrej Sika"
username = "ondrejsika"
email = "xxx@xxx.com"
can_create_group = false
reset_password = false
projects_limit = 100000
}
resource "gitlab_user" "vojtechmares" {
name = "Vojtěch Mareš"
username = "vojtechmares"
email = "xxx@xxx.com"
can_create_group = false
reset_password = false
projects_limit = 100000
}
Skupiny
Ostatní resources se snažím mít odděleně, pro každý mám vlastní soubor, například pro skupinu www
mám soubor group_www.tf
. V tomto souboru definuju skupinu, uživatele, kteří jsou v té skupině a další nastavení skupiny, jako například CI environment variables.
Právě správa CI variables mě přiměla k tomu zamyslet se jak můžu Gitlab spravovat efektivněji, protože spravovat ho ručně je peklo.
Ukázka konfiguace skupiny je:
// group_www.tf
resource "gitlab_group" "www" {
name = "www"
path = "www"
visibility_level = "public"
}
# --- Members ---
resource "gitlab_group_membership" "www_vojtechmares" {
group_id = gitlab_group.www.id
user_id = gitlab_user.vojtechmares.id
access_level = "owner"
}
# --- Variables ---
resource "gitlab_group_variable" "www_DEV_DOMAIN_SUFFIX" {
group = gitlab_group.www.id
key = "DEV_DOMAIN_SUFFIX"
value = "xsika.cz"
protected = false
masked = false
}
Projekty
A nakonec definice projektu. Velkou výhodou vytváření projektu Terraformem je, že je možné nastavit parametry, které se musí manuálně nastavovat pro každý repozitář manuálně, jako je například Fast-Forward Only merge strategie. Pokud použiju Terrafrom modul, nebo duplikuji konfiguraci předchozího projektu, mám jistotu, že nastavení je rovnou správné. Zde je ukázka www/www
projektu v souboru project_www_www.tf
:
// project_www_www.tf
resource "gitlab_project" "www_www" {
namespace_id = gitlab_group.www.id
name = "www"
visibility_level = "public"
merge_method = "ff"
default_branch = "master"
remove_source_branch_after_merge = true
}
Závěr
A teď už stačí po každé úpravě zavolat terraform apply
a máme změny nasazené. Gitlab provider podporuje ještě mnoho další konfigurace, například integrace s Kubernetes, ale o tom příště.
Já beru možnost konfigurovat Gitlab deklarativní formou jako velké šetření času a možnost mít přehled o aktuálním stavu, navíc verzovaný Gitem.
Školení Terraformu
Zaujal Vás Terraform? Chcete se dozvědět více? Přijďte na mé Školení Terraformu!
Případně si můžete vybrat z nabídky otevřených kurzů.
Ondřej Šika
Jsem freelance DevOps konzultant a lektor. Zlepšuji práci vývojářských týmu zaváděním efektivních procesů ve vývoji. Naučím Vás používat prověřené nástroje a technologie, které povedou k rychlejšímu vývoji a bezpečnějšímu provozu vašeho software.