Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
automatizace:terraform [2023/10/23 13:26]
tomas [tf soubory]
automatizace:terraform [2024/12/17 07:47] (current)
tomas
Line 3: Line 3:
  
 ====Komponenty==== ====Komponenty====
 +tflint ... linter - zkontroluje kód a navrhne změny kvůli čitelnosti a standartizaci kódu\\
 +terraform-doc ... automatické generování dokumentace\\
 Terratest ... testovani Tarraformovych sablon\\ Terratest ... testovani Tarraformovych sablon\\
 +Terragrunt ... umí generovat terraformy podle terragrunt parametrů - terraform soubory jsou šablona s parametrama\\
 Yeoman ... pro praci s modulama\\ Yeoman ... pro praci s modulama\\
  
Line 11: Line 14:
 terraform.tfvars ... pevne definovane vychozi promenne\\ terraform.tfvars ... pevne definovane vychozi promenne\\
 terraform.tfstate ... status nasazenych zdroju, muze obsahovat citlive udaje\\ 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=== ===prikazy===
Line 19: Line 31:
 terraform apply -autoapprove ... aplikuje zmenu, nevyzaduje schvalovani\\ 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 --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 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\\ 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\\ 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 show -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 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 moduly====
 +[[terraform-aws]]\\
  
 ====tf soubory==== ====tf soubory====
 +
 +
 ===locals {}=== ===locals {}===
 +seznam_jmen = [for i in var.jmena: "$i.txt"]\\
 +
 ===variable "region" {}=== ===variable "region" {}===
 +<code>variable "muj_tuple" {
 +  description = "example tuple"
 +  type        = tuple([string, number, bool])
 +  default     = ["jablko", 1, true]
 +  validation {
 +    condition = length(var.name)
 +    error_message = "nespravna delka"
 +  }
 +}</code>
 +==datové struktury==
 +list ... uspořádaný seznam hodnot stejného typu\\
 +tuple ... uspořádaný seznam hodnot růžných typů\\
 +set ... neuspořádaný sezname unikátních hodnot stejného typu\\
 +map ... asociativní pole\\
 +object ... seznam objektů\\
 +toset()
 +
 +
 ===output "timestamp" {}=== ===output "timestamp" {}===
 +
 +===import{}===
 +===move{}===
 +===remove{}===
 +
 ===provider {}=== ===provider {}===
 +
 +===check {}===
 +data ... ziská data pro test\\
 +assert ... condition a error_message\\
 +
 +===provisioner {}===
 +local-exec\\
 +remote-exec\\
 +file\\
 +
 ===resource {}=== ===resource {}===
 +terraform_data ... třeba local\\
 +null_resource\\
 +
 +
 +for_each = toset(local.seznam_jmen) ... iterace celého resourcu\\
 +<code>dynamic "statemen" {
 +  for_each = var.dpc_s3_designer-postfixes
 +  content {
 +    parametr = "${statement.value}"
 +  }
 +}</code> ... iterace bloku v resourcu\\
 +
 +<code>lifecycle{
 + precondition {}
 + postcondition {}
 +}
 +</code>
 +timeout ... timeout pro ukončení aktivity na resourcu, zachrání to tfstate, když to ukončí něco z venku násilně\\
 +provider = aws-we ... použití provideru s daným aliasem\\
  
 === podmínky a iterace === === podmínky a iterace ===
 count=var.istest == true ? 1 : 0 ... podmínka\\ count=var.istest == true ? 1 : 0 ... podmínka\\
 count=3 ... provede blok 3x\\ count=3 ... provede blok 3x\\
 +for_each = [for i in local.instances: "i.name"]\\
 +
 +=== 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"]\\
 +formatdate("YYYYMMDDhhmmss", timestamp()) ... časová známka a formátování data\\
 +endswith("abc.txt", ".txt") ... vrátí true, když 1. řetězec končí 2. řetězcem\\
 +can ... true, když uvnitř platí\\
 +