Variabile în Terraform
Avem următorul fișier outputs.tf
, unde avem acest bloc:
output "Lab" {
value="lab4 first output"
}
Am creat primul output în Terraform. Pentru a observa comportamentul, urmați pașii din exercițiul anterior pentru a "aplica" infrastructura.
Avem acest bloc cu următorul cod:
variable "LabCCTerraform" {
description = "primul lab in terraform"
default = "valoare default a primului lab in terraform"
}
Aplicați planul și observați comportamentul.
Prioritatea variabilelor
Un alt mod de a seta variabile în Terraform este prin variabile de mediu. By default, Terraform caută variabilele de mediu care încep cu F_VAR_
. De exemplu, o variabilă de mediu cu numele TF_VAR_MYTESTVAR=myvalue
o să atribuie valoarea myvalue unei variabile cu numele MYTESTVAR
. Variabila cu numele MYTESTVAR
trebuie sa fie totuși declarată in configurația noastră de Terraform.
- Creați o variabilă de mediu care sa suprascrie variabilă folosită de noi:
export TF_VAR_LabCCTerraform="Value from environment"
- Rulați din nou comanda
terraform apply
pentru a observa comportamentul.
Fișiere tfvars
- Creați un nou fișier cu numele
terraform.tfvars
si adăugați următoarea linie de cod:LabCCTerraform="Value from tfvars file"
. Acest fișier, deși are extensia diferită față de cele anterioare foloseste exact aceeași sintaxă. - Folosiți din nou comanda
terraform apply
pentru a observa comportamentul.
Injectare variabile din linia de comandă
Un alt mod prin care putem atribui o valoare unei variabile este prin linia de comandă.
Rulați următoarea comandă: terraform apply -var LabCCTerraform=valueFromCommandLine
In urma acestui exercițiu, am aflat ca ordinea de prioritizare a variabilelor este următoarea:
- linie de comandă
- fișier tfvars
- varibila de mediu
- valoarea default
Tipuri de variabile
Un alt tip de variabilă pe care îl putem folosi este lista:
variable "mylist" {
default = ["ana", "are", "mere"]
}
Pentru a accesa un element dintr-o listă avem 2 variante.
- folosind o funcție:
output "getelement" {
value = element(var.mylist,1)
}
- folosind accesare direct cu indexul:
output "useindex" {
value = var.mylist[1]
}
Liste nested:
variable "nestedlist" {
type = list
default = [
["item1", "item2"],
["item3", "item4"]
]
}
Pentru a accesa elementele dintr-o listă nested, folosim sintaxa asemănătoare:
output "nestedlist" {
value = var.nestedlist[1][1]
}
Maps:
variable mymap {
default = {
us = "United States"
eu = "Europe"
apac = "Asia/Pacific"
}
}
output "my_region_map" {
value = var.mymap
}
Pentru a accesa elementele dintr-un map, folosim functia lookup, mai multe detalii gasiți în link-ul: https://developer.hashicorp.com/terraform/language/functions/lookup
output "oneMapElement" {
value = lookup(var.mymap, "us")
}
Organizarea codului Terraform
Având în vedere că deja devine greu de urmărit codul nostru, avem nevoie de o refactorizare.
Best practices Terraform recomandă să avem fișiere separate pentru variabile și outputs. Simplu spus, toate variabilele stau într-un fișier variables.tf
, toate output-urile stau într-un fișier outputs.tf
.