Terraform je abstrakce pro konfiguraci infrastruktury (jak ARM, mozna Cloud Foundry, …)

Komponenty

Terratest … testovani Tarraformovych sablon
Yeoman … pro praci s modulama

soubory

main.tf … povinny soubor, ktery se odkazuje na dalsi
inputs.tf … nadefinovane vstupni promenne
terraform.tfvars … pevne definovane vychozi promenne
terraform.tfstate … status nasazenych zdroju, muze obsahovat citlive udaje

systémové proměnné

TF_LOG=TRACE … úroveň logování, DEBUG, INFO, WARN, ERROR
TF_LOG_CORE, TF_LOG_PROVIDER … úroveň logování jednotlivých složek
TF_LOG_PATH=./terraform.log … logování do souboru
TF_INPUT=0 … vypne vstup
TF_VAR_promenna=hodnota … nastavení hodnoty proměnné pro tf soubory
TF_WORKSPACE=prod … nastavení workspace
TF_DATA_DIR=/prod … kde se nachárá .terraform složka

prikazy

cd /adresar .. prejdu do adresare ktery obsahuje main.tf terraform init … vytvori si docasne soubory, kde si kompiluje tf soubory
terraform validate … overi syntaxi
terraform plan … pokusi se udelat deployment na necisto
terraform apply -autoapprove … aplikuje zmenu, nevyzaduje schvalovani
terraform apply –var-file=dev.tfvars -var user=tomas … vezme vstupni parametry se souboru dev.tfvars a nadefinuje promennou user=tomas
terraform apply –target='docker_service.vault[1]' … naimplementuje změny pouze pro tento resource
terraform destroy -auto-approve … smaze, co je nadefinovano v terraform definici
terraform import … naimportuje do tfstate objekty z cloudu podle tf definic (objekty zminene v tf se nactou do tfstate
terrafrom state rm azuread_service_principal.sp[3] … odebere tento objekt z tfstate
terraform state list … seznam objektů v tfstate
terraform state show vault_mount.volume … ukáže nastavení daného objektu
terraform state -json … ukáže komplet tfstate, včetně secretů
terraform force-unlock 9db590f1-b6fe-c5f2-2678-8804f089deba … udemknutí tfstate, pokud předchozí terraform běh selže

terraform workspace list … vylistuje worspaces - prostřředí = instance tfstate souboru
terraform workspace select prod … vybere workspace prod a nastaví ho jako výchozí

tf soubory

locals {}

seznam_jmen = [for i in var.jmena: “$i.txt”]

variable "region" {}

output "timestamp" {}

provider {}

resource {}

for_each = toset(local.seznam_jmen) … iterace celého resourcu
dynamic “statemen” {

for_each = var.dpc_s3_designer-postfixes\\
content {\\
  parametr = "${statement.value}"\\
}\\

} … iterace bloku v resourcu

podmínky a iterace

count=var.istest == true ? 1 : 0 … podmínka
count=3 … provede blok 3x

funkce

sensitive() … obsah se považuje za důvěrný obsah, nezobrazí se ve výstuperch
merge() … sloučí mapy, poslední má přednost
lookup() … vrátí buď hodnotu z mapy, nebo default hodnotu
trimsuffix(“abcd”, “cd”) … odřízne koncovku z řetězce, když se shoduje, v tomto případě vrátí ab
base64encode() … zakóduje řetězed co base64
templatefile(“a.tftpl”, {a=[“bb”, “cc”]}) … vezme hodnoty a a doplní je do vzoru z a.tftpl a vrátí to jako text
file(“a.txt”) … načte obsah souboru
yamldecode(file(“a.yaml”)) … dekóduje yaml do objektu
join(“-”, [“aa”, “bb”]) … spojí řetězce, výsledek aa-bb
concat([“a”, “c”], [“b”, “c”]) … spojí seznamy, výsledek [“a”, “b”, “c”]

endswith(“abc.txt”, “.txt”) … vrátí true, když 1. řetězec končí 2. řetězcem