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 Kuberneres 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" "vojtamares" {
  name             = "Ondrej Sika"
  username         = "ondrejsika"
  email            = "xxx@xxx.com"
  can_create_group = false
  reset_password   = false
  projects_limit    = 100000
}

resource "gitlab_user" "vojtamares" {
  name             = "Vojtěch Mareš"
  username         = "vojtamares"
  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_vojtamares" {
  group_id     = gitlab_group.www.id
  user_id      = gitlab_user.vojtamares.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.

Ondrej Sika

ondrej@sika.io
+420 773 452 376

Company ID
88114163

VAT ID
CZ9302252102

Zajímají Vás novinky?

Odebírejte můj newsletter a budete v obraze!

Website by Zuzana Jeschke