This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
automatizace:terraform [2023/06/22 07:17] tomas |
automatizace:terraform [2024/12/17 07:47] (current) tomas |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| - | ===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\\ | ||
| - | ==soubory== | + | ===soubory=== |
| main.tf ... povinny soubor, ktery se odkazuje na dalsi\\ | main.tf ... povinny soubor, ktery se odkazuje na dalsi\\ | ||
| inputs.tf ... nadefinovane vstupni promenne\\ | inputs.tf ... nadefinovane vstupni promenne\\ | ||
| Line 12: | Line 15: | ||
| terraform.tfstate ... status nasazenych zdroju, muze obsahovat citlive udaje\\ | terraform.tfstate ... status nasazenych zdroju, muze obsahovat citlive udaje\\ | ||
| - | ==prikazy== | + | ===systémové proměnné=== |
| + | TF_LOG=TRACE ... úroveň logování, DEBUG, INFO, WARN, ERROR\\ | ||
| + | TF_LOG_CORE, | ||
| + | TF_LOG_PATH=./ | ||
| + | TF_INPUT=0 ... vypne vstup\\ | ||
| + | TF_VAR_promenna=hodnota ... nastavení hodnoty proměnné pro tf soubory\\ | ||
| + | TF_WORKSPACE=prod ... nastavení workspace\\ | ||
| + | TF_DATA_DIR=/ | ||
| + | |||
| + | ===prikazy=== | ||
| cd /adresar .. prejdu do adresare ktery obsahuje main.tf | cd /adresar .. prejdu do adresare ktery obsahuje main.tf | ||
| terraform init ... vytvori si docasne soubory, kde si kompiluje tf soubory\\ | terraform init ... vytvori si docasne soubory, kde si kompiluje tf soubory\\ | ||
| 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=' | ||
| 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\\ | ||
| - | ===tf soubory=== | + | 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==== | ||
| + | |||
| + | |||
| + | ===locals {}=== | ||
| + | seznam_jmen = [for i in var.jmena: " | ||
| + | |||
| + | ===variable " | ||
| + | < | ||
| + | description = " | ||
| + | type = tuple([string, | ||
| + | default | ||
| + | validation { | ||
| + | condition = length(var.name) | ||
| + | error_message = " | ||
| + | } | ||
| + | }</ | ||
| + | ==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 " | ||
| + | |||
| + | ===import{}=== | ||
| + | ===move{}=== | ||
| + | ===remove{}=== | ||
| + | |||
| + | ===provider {}=== | ||
| + | |||
| + | ===check {}=== | ||
| + | data ... ziská data pro test\\ | ||
| + | assert ... condition a error_message\\ | ||
| + | |||
| + | ===provisioner {}=== | ||
| + | local-exec\\ | ||
| + | remote-exec\\ | ||
| + | file\\ | ||
| + | |||
| + | ===resource {}=== | ||
| + | terraform_data ... třeba local\\ | ||
| + | null_resource\\ | ||
| + | |||
| + | |||
| + | for_each = toset(local.seznam_jmen) ... iterace celého resourcu\\ | ||
| + | < | ||
| + | for_each = var.dpc_s3_designer-postfixes | ||
| + | content { | ||
| + | parametr = " | ||
| + | } | ||
| + | }</ | ||
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | 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 | ||
| count=var.istest == true ? 1 : 0 ... podmínka\\ | count=var.istest == true ? 1 : 0 ... podmínka\\ | ||
| + | count=3 ... provede blok 3x\\ | ||
| + | for_each = [for i in local.instances: | ||
| + | |||
| + | === 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(" | ||
| + | base64encode() ... zakóduje řetězed co base64\\ | ||
| + | templatefile(" | ||
| + | file(" | ||
| + | yamldecode(file(" | ||
| + | join(" | ||
| + | concat([" | ||
| + | formatdate(" | ||
| + | endswith(" | ||
| + | can ... true, když uvnitř platí\\ | ||
| + | |||