Browse Docs

IaC

In this section

  • Terraform

    Validate Terraform code

    1dirs -c
    2for DIR in $(find ./examples -type d); do
    3   pushd $DIR
    4   terraform init -backend=false
    5   terraform fmt -check
    6   terraform validate
    7   popd
    8 done
    

    Execute Terraform

     1export DO_PAT="dop_v1_xxxxxxxxxxxxxxxx"
     2doctl auth init --context rkub
     3
     4# inside a dir with a tf file 
     5terraform init
     6terraform validate
     7terraform plan -var "do_token=${DO_PAT}"
     8terraform apply -var "do_token=${DO_PAT}" -auto-approve
     9
    10# clean apply
    11terraform plan -out=infra.tfplan -var "do_token=${DO_PAT}"
    12terraform apply infra.tfplan
    13
    14# Control
    15terraform show terraform.tfstate
    16
    17# Destroy
    18terraform plan -destroy -out=terraform.tfplan -var "do_token=${DO_PAT}"
    19terraform apply terraform.tfplan
    
    • Connect to server getting the ip with terraform command:
    1ssh root@$(terraform output -json ip_address_workers | jq -r '.[0]') -i .key
    

    Troubleshoot some terraform

    • Check the schema of a Resource (for example libvirt_domain from provider multani/libvirt )
     1terraform providers schema -json| jq '.provider_schemas["registry.terraform.io/multani/libvirt"].resource_schemas["libvirt_domain"].block.attributes | keys'
     2[
     3  "arch",
     4  "autostart",
     5  "cloudinit",
     6  "cmdline",
     7  "coreos_ignition",
     8  "cpu",
     9  "description",
    10  "disk",
    11  "id",
    12...
    13]
    
    • Then check what is expected:
    1terraform providers schema -json| jq '.provider_schemas["registry.terraform.io/multani/libvirt"].resource_schemas["libvirt_domain"].block.attributes.cpu'
    2["libvirt_domain"].block.attributes.cpu'
    3{
    4  "type": [
    5    "map",
    6    "string"
    7  ],
    8  "description_kind": "plain",
    

    Work with yaml in terraform

    Two possibilities:

Friday, March 13, 2026 Monday, January 1, 1