Skip to content
Menu
msandor honlapja
  • Bemutatkozás
msandor honlapja

Terraformáljuk a Proxmoxot

Posted on 2025.08.10.2025.08.11.

Mi az a Terraform?

A Terraform nyílt forráskódú, platformfüggetlen infrastruktúra-automatizálási eszköz. Segítségével egy konfigurációs fájl alapján gyorsan és automatikusan telepíthető lehet egy komplex infrastruktúra minden eleme. forrás

Mire jó ez nekünk?

  • segítségével menedzselhetjük a fizikai/virtuális/felhős szervereinket
  • mindezt néhány fájl segítségével, kódként tudjuk definiálni
  • amit git repóban tárolhatunk, hogy nyomon követhető legyen a változás

Mi a helyzet a Terraform BSL licencével?

Pontosan két éve jelentették be, hogy licencet váltanak, és az új BSL licenc rendelkezik néhány korlátozással, ami miatt bizonyos körülmények esetén már nem használhatod ingyen a terméket. Én nem vagyok licenc szakértő, épp ezért (is) használok nyílt forráskódú szoftvereket.

A közösség felháborodását tettek követték, ezért forkolták a Terraformot, ebből lett az OpenTofu. Ez a szoftver az ígéretek szerint örökké nyílt forráskódú marad! Majdnem tökéletesen megegyezik a két szoftver.

Mire lesz szükségünk a kipróbáláshoz?

  • legalább egy Proxmox szerverre (én a 8.4.x-es verzión fogok demózni, a bemutatott provider még nem ismeri a 9.0-t!)
  • biztonsági okokból egy dedikált felhasználóra a Proxmoxon
  • vagy a terraform vagy az opentofu binárisokra (én az opentofut fogom bemutatni a fentebb említett licence problémák miatt)

Hogy néz ki a labor környezetem?

  • adott a munkaállomásom, ha külön nem jelzem, minden parancsot itt fogok kiadni
  • van egy pveteszt nevű Proxmox szerverem, az IP címe: 192.168.122.122
  • készítek egy Debian12 templétet
  • készítek egy Debian13 templétet
  • létre fogunk hozni egy tf-dci12-vm1 nevű virtuális szervert, 1 VCPU, 1 GB RAM, 4 GB HDD, 1 GB swap, Debian12 alapon, az IP címe: 192.168.122.12
  • létre fogunk hozni egy tf-dci13-vm2 nevű virtuális szervert, 2 VCPU, 1 GB RAM, 5 GB HDD, 1 GB swap, Debian13 alapon, az IP címe: 192.168.122.13

Telepítsük az OpenTofut a munkaállomásunkra

Szokás szerint nálam ez egy Fedora Linux lesz.

$ sudo dnf install opentofu -y

Ha Te más disztrót használsz, nagy eséllyel ugyanezen néven fogod megtalálni, ha mégsem, itt a telepítési leírás.

Hozzunk létre egy dedikált felhasználót a Proxmox szerverünkön

Lépjünk be a webes felületre, és keressük meg a shell menüpontot, vagy lépjünk be ssh-n, a parancsok ugyanúgy fognak működni mindkét módszerrel…

Ha bizonytalan vagy a másolásokkal, ne aggódj, ezeket a parancsokat betettem egy scriptbe (useradd.sh), amit megtalálsz a git repó proxmox mappájában.

root@pveteszt:~# pveum role add TerraformRole -privs "Datastore.AllocateSpace Datastore.Audit Pool.Allocate Sys.Audit Sys.Console Sys.Modify VM.Allocate VM.Audit VM.Clone VM.Config.CDROM VM.Config.Cloudinit VM.Config.CPU VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Migrate VM.Monitor VM.PowerMgmt SDN.Use"

root@pveteszt:~# pveum user add terraform@pve

root@pveteszt:~# pveum aclmod / -user terraform@pve -role TerraformRole

root@pveteszt:~# pveum user token add terraform@pve tf --privsep 0
┌──────────────┬──────────────────────────────────────┐
│ key          │ value                                │
╞══════════════╪══════════════════════════════════════╡
│ full-tokenid │ terraform@pve!tf                     │
├──────────────┼──────────────────────────────────────┤
│ info         │ {"privsep":"0"}                      │
├──────────────┼──────────────────────────────────────┤
│ value        │ ae4bf754-670d-48e0-b799-420fe79c0d77 │
└──────────────┴──────────────────────────────────────┘

A value értékét tedd félre, később szükség lesz rá! Az általam bemutatott nálad nem fog működni :-), csak azért mutattam meg, hogy tudd, mit kell később bemásolni.

Egyéb előkészület a Proxmox szerveren

A webes felületen keressük meg a Datacenter/Storage menüpontot, szerkesszük a local storage-ot, kattintsuk be a Disk image és Snippets lehetőségeket.

Az OpenTofu használat közben

Hogy ne kelljen minden fájlt másolgatnod, mindent felraktam a git szerveremre, amit így tudsz letölteni parancssorból:

$ git clone https://git.msandor.hu/demo/terraform.git

Lépj be a letöltött mappába:

$ cd terraform

Ezeket a fájlokat/mappákat fogod benne találni:

.
├── LICENSE
├── main.tf
├── proxmox
│   ├── cloud12.sh
│   ├── cloud13.sh
│   ├── setup-vm.yml
│   └── useradd.sh
├── README.md
├── terraform.tfvars
├── variables.tf
├── vm1.tf
└── vm2.tf

Mik ezek a fájlok?

A proxmox mappában 4 fájl van, ezeket másoljuk át a proxmox szerverre:

$ scp proxmox/cloud1*.sh proxmox/useradd.sh root@192.168.122.122:
$ scp proxmox/setup-vm.yml root@192.168.122.122:/var/lib/vz/snippets/

Lépjünk be a proxmox szerverünkre webshellel, vagy ssh-n, és adjuk ki ezeket a parancsokat:

root@pveteszt:~# ./cloud12.sh; ./cloud13.sh

Mit csinálnak ezek a scriptek?

  • letöltik a debian12(13) cloud-init fájlokat
  • létrehoznak 1-1 virtuális szervert
  • beállítják templét típusúnak

Végeztünk is a proxmox szerverrel, nincs más teendőnk, térjünk vissza a munkaállomásunk konzoljára.

Láthatjátok, hogy a két templét azonosítója (ID) 912, és 913, nagy eséllyel nincs ilyen azonosítójú vm/lxc a szervereden, ha mégis, módosítsd a cloud12(13).sh tartalmát egy biztosan használaton kívüli számra!

A többi fájlt az OpenTofu fogja használni. Ez akár egyetlen fájl is lehetne, de szebb így, hogy logikailag különválasztottam őket.

Rövid bemutató:

  • main.tf: ez a fő fájlunk, ebben definiáltam a providert
  • README.md: rövid leírás a git repó tartalmáról
  • terraform.tfvars: normál esetben csak ezt kell módosítanod!
  • variables.tf: ez hozza létre az előző fájl változóit
  • vm1.tf: az 1. virtuális szerverünk definíciója
  • vm2.tf: a 2. virtuális szerverünk definíciója

Az OpenTofuval 3+1 parancsot fogunk kiadni (többet is tud 🙂 , de ezzel lefedjünk az igényeinket):

Első alkalommal:

$ tofu init

Ha idővel frissül a provider, akkor a verzió szám módosítása után adjuk ki az alábbi parancsot:

$ tofu init -upgrade

Most nyisd meg szerkesztésre a terraform.tfvars fájlt, és a saját környezetednek megfelelően módosítsd a tartalmát. Ha mindent úgy csináltál, ahogy írtam, akkor az első sikeres telepítéshez ezeket a változókat kell módosítanod:

  • pm_api_url: az proxmoxod IP címe
  • pm_api_token_secret: az a bizonyos value érték amit felírtál (ugye?)
  • pm_target_node: a proxmox szervered neve
  • nameserver: a hálózatod DNS szervere (ha több is van, szóközzel válaszd el őket)
  • searchdomain: ha rövid névre keresel, ezt a domain nevet teszi mögé
  • netmask: ha esetleg nem /24 nálad
  • gateway: a hálózatod átjárója
  • ciuser: ezzel fogsz tudni belépni a szerverekre, neki lesz sudo joga is
  • ssh_keys: a munkaállomásod publikus kulcsa
  • vm1_state|vm2_state: started vagy running vagy stopped. A runnig/stopped egyértelmű, minden futtatáskor erre állítja be a VM-ek állapotát. A started esetén nem változtat rajta!
  • a többi már gép specifikus, pl: vm1_ip-t állítsd be kedvedre

Ha jól dolgoztál, akkor kérjük le a „tervet”:

$ tofu plan

Szerencsés esetben nem kapsz hibaüzenetet, hanem egy ehhez hasonló kimenetet:

OpenTofu used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
  + create

OpenTofu will perform the following actions:

  # proxmox_vm_qemu.vm1 will be created
  + resource "proxmox_vm_qemu" "vm1" {
      + additional_wait        = 5
      + agent                  = 1
      + agent_timeout          = 90
      + automatic_reboot       = true
      + balloon                = 0
      + bios                   = "seabios"
      + boot                   = "order=scsi0"
      + bootdisk               = "scsi0"
      + cicustom               = "vendor=local:snippets/setup-vm.yml"
      + ciupgrade              = true
      + ciuser                 = "msandor"
      + clone                  = "debian12-cloudinit"
      + clone_wait             = 10
      + current_node           = (known after apply)
      + default_ipv4_address   = (known after apply)
      + default_ipv6_address   = (known after apply)
      + define_connection_info = true
      + description            = (known after apply)
      + force_create           = false
      + full_clone             = true
      + hotplug                = "network,disk,usb"
      + id                     = (known after apply)
      + ipconfig0              = "ip=192.168.122.12/24,gw=192.168.122.1"
      + kvm                    = true
      + linked_vmid            = (known after apply)
      + memory                 = 1024
      + name                   = "tf-dci12-vm1"
      + nameserver             = "192.168.122.1"
      + onboot                 = false
      + os_type                = "cloud-init"
      + protection             = false
      + reboot_required        = (known after apply)
      + scsihw                 = "virtio-scsi-single"
      + searchdomain           = "msandor.hu"
      + skip_ipv4              = false
      + skip_ipv6              = true
      + ssh_host               = (known after apply)
      + ssh_port               = (known after apply)
      + sshkeys                = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBVFPVAc9OUBdfvCFsXt8SRZ9eJ890fbCzjjckR1mvvn+ddOdvL8jRtaX1zgO1aVplJahMhVl2bY7u4Moa5hPybZiufDV+3nPLo8I4cY8MA09ztzA4ScBzD4sNZqhf6g/hjmvUkONfHCMwNQTgXUlJeIZ02NTpi1wL+m3ndWmwWL3Cx3ISuMa72l251CThUVyErU8rhBxWD7FIOm4P1IgRXgoLOf/NiL2lW9PLUEX7nHzMaakOL8bx1vAuCd2OR9KFH4dXuGk70D/GxbeklhVtV9NgrPRkJhPew3aEt0Qlq51SKYA9Vx/1RPc3E3gPR6smVB7FE4dochZCweK+U3QH msandor"
      + tablet                 = true
      + tags                   = "terraform"
      + target_node            = "pveteszt"
      + unused_disk            = (known after apply)
      + vmid                   = (known after apply)

      + cpu {
          + cores   = 1
          + limit   = 0
          + numa    = false
          + sockets = 1
          + type    = "host"
          + units   = 0
          + vcores  = 0
        }

      + disks {
          + ide {
              + ide0 {
                  + cloudinit {
                      + storage = "local"
                    }
                }
            }
          + scsi {
              + scsi0 {
                  + disk {
                      + backup               = true
                      + cache                = "none"
                      + discard              = false
                      + format               = "raw"
                      + id                   = (known after apply)
                      + iops_r_burst         = 0
                      + iops_r_burst_length  = 0
                      + iops_r_concurrent    = 0
                      + iops_wr_burst        = 0
                      + iops_wr_burst_length = 0
                      + iops_wr_concurrent   = 0
                      + iothread             = true
                      + linked_disk_id       = (known after apply)
                      + mbps_r_burst         = 0
                      + mbps_r_concurrent    = 0
                      + mbps_wr_burst        = 0
                      + mbps_wr_concurrent   = 0
                      + size                 = "4"
                      + storage              = "local"
                    }
                }
              + scsi1 {
                  + disk {
                      + backup               = true
                      + cache                = "none"
                      + discard              = false
                      + format               = "raw"
                      + id                   = (known after apply)
                      + iops_r_burst         = 0
                      + iops_r_burst_length  = 0
                      + iops_r_concurrent    = 0
                      + iops_wr_burst        = 0
                      + iops_wr_burst_length = 0
                      + iops_wr_concurrent   = 0
                      + iothread             = true
                      + linked_disk_id       = (known after apply)
                      + mbps_r_burst         = 0
                      + mbps_r_concurrent    = 0
                      + mbps_wr_burst        = 0
                      + mbps_wr_concurrent   = 0
                      + size                 = "1"
                      + storage              = "local"
                    }
                }
            }
        }

      + network {
          + bridge    = "vmbr0"
          + firewall  = false
          + id        = 0
          + link_down = false
          + macaddr   = (known after apply)
          + model     = "Virtio"
        }

      + serial {
          + id   = 0
          + type = "socket"
        }

      + smbios (known after apply)
    }

  # proxmox_vm_qemu.vm2 will be created
  + resource "proxmox_vm_qemu" "vm2" {
      + additional_wait        = 5
      + agent                  = 1
      + agent_timeout          = 90
      + automatic_reboot       = true
      + balloon                = 0
      + bios                   = "seabios"
      + boot                   = "order=scsi0"
      + bootdisk               = "scsi0"
      + cicustom               = "vendor=local:snippets/qemu-guest-agent.yml,vendor=local:snippets/setup-swap.yml"
      + ciupgrade              = true
      + ciuser                 = "msandor"
      + clone                  = "debian13-cloudinit"
      + clone_wait             = 10
      + current_node           = (known after apply)
      + default_ipv4_address   = (known after apply)
      + default_ipv6_address   = (known after apply)
      + define_connection_info = true
      + description            = (known after apply)
      + force_create           = false
      + full_clone             = true
      + hotplug                = "network,disk,usb"
      + id                     = (known after apply)
      + ipconfig0              = "ip=192.168.122.13/24,gw=192.168.122.1"
      + kvm                    = true
      + linked_vmid            = (known after apply)
      + memory                 = 1024
      + name                   = "tf-dci13-vm2"
      + nameserver             = "192.168.122.1"
      + onboot                 = false
      + os_type                = "cloud-init"
      + protection             = false
      + reboot_required        = (known after apply)
      + scsihw                 = "virtio-scsi-single"
      + searchdomain           = "msandor.hu"
      + skip_ipv4              = false
      + skip_ipv6              = true
      + ssh_host               = (known after apply)
      + ssh_port               = (known after apply)
      + sshkeys                = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBVFPVAc9OUBdfvCFsXt8SRZ9eJ890fbCzjjckR1mvvn+ddOdvL8jRtaX1zgO1aVplJahMhVl2bY7u4Moa5hPybZiufDV+3nPLo8I4cY8MA09ztzA4ScBzD4sNZqhf6g/hjmvUkONfHCMwNQTgXUlJeIZ02NTpi1wL+m3ndWmwWL3Cx3ISuMa72l251CThUVyErU8rhBxWD7FIOm4P1IgRXgoLOf/NiL2lW9PLUEX7nHzMaakOL8bx1vAuCd2OR9KFH4dXuGk70D/GxbeklhVtV9NgrPRkJhPew3aEt0Qlq51SKYA9Vx/1RPc3E3gPR6smVB7FE4dochZCweK+U3QH msandor"
      + tablet                 = true
      + tags                   = "terraform"
      + target_node            = "pveteszt"
      + unused_disk            = (known after apply)
      + vmid                   = (known after apply)

      + cpu {
          + cores   = 2
          + limit   = 0
          + numa    = false
          + sockets = 1
          + type    = "host"
          + units   = 0
          + vcores  = 0
        }

      + disks {
          + ide {
              + ide0 {
                  + cloudinit {
                      + storage = "local"
                    }
                }
            }
          + scsi {
              + scsi0 {
                  + disk {
                      + backup               = true
                      + cache                = "none"
                      + discard              = false
                      + format               = "raw"
                      + id                   = (known after apply)
                      + iops_r_burst         = 0
                      + iops_r_burst_length  = 0
                      + iops_r_concurrent    = 0
                      + iops_wr_burst        = 0
                      + iops_wr_burst_length = 0
                      + iops_wr_concurrent   = 0
                      + iothread             = true
                      + linked_disk_id       = (known after apply)
                      + mbps_r_burst         = 0
                      + mbps_r_concurrent    = 0
                      + mbps_wr_burst        = 0
                      + mbps_wr_concurrent   = 0
                      + size                 = "5"
                      + storage              = "local"
                    }
                }
              + scsi1 {
                  + disk {
                      + backup               = true
                      + cache                = "none"
                      + discard              = false
                      + format               = "raw"
                      + id                   = (known after apply)
                      + iops_r_burst         = 0
                      + iops_r_burst_length  = 0
                      + iops_r_concurrent    = 0
                      + iops_wr_burst        = 0
                      + iops_wr_burst_length = 0
                      + iops_wr_concurrent   = 0
                      + iothread             = true
                      + linked_disk_id       = (known after apply)
                      + mbps_r_burst         = 0
                      + mbps_r_concurrent    = 0
                      + mbps_wr_burst        = 0
                      + mbps_wr_concurrent   = 0
                      + size                 = "1"
                      + storage              = "local"
                    }
                }
            }
        }

      + network {
          + bridge    = "vmbr0"
          + firewall  = false
          + id        = 0
          + link_down = false
          + macaddr   = (known after apply)
          + model     = "Virtio"
        }

      + serial {
          + id   = 0
          + type = "socket"
        }

      + smbios (known after apply)
    }
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so OpenTofu can't guarantee to take exactly these actions if you run "tofu
apply" now.

Végül jöhet az utolsó, és egyben legfontosabb parancs:

$ tofu apply

Nem másolom ide a kimenetét, mert 99%-ban a „tofu apply” kimenetét fogod látni. Ez a 4 sor az új információ a legalján:

Do you want to perform these actions?
 OpenTofu will perform the actions described above.
 Only 'yes' will be accepted to approve.

 Enter a value: yes

Csak a yes beírásával tudod elindítani, és természetesen az ENTER lenyomásával 😉

Mit fogsz látni a konzolon?

proxmox_vm_qemu.vm1: Creating...
proxmox_vm_qemu.vm2: Creating...
proxmox_vm_qemu.vm1: Still creating... [10s elapsed]
proxmox_vm_qemu.vm2: Still creating... [10s elapsed]
proxmox_vm_qemu.vm1: Still creating... [20s elapsed]
proxmox_vm_qemu.vm2: Still creating... [20s elapsed]
proxmox_vm_qemu.vm1: Creation complete after 29s [id=pveteszt/qemu/100]
proxmox_vm_qemu.vm2: Still creating... [30s elapsed]
proxmox_vm_qemu.vm2: Still creating... [40s elapsed]
proxmox_vm_qemu.vm2: Still creating... [50s elapsed]
proxmox_vm_qemu.vm2: Creation complete after 55s [id=pveteszt/qemu/101]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Létrehozott (hozzáadott) két virtuális szervert a proxmoxteszt szerveren, 0 változott, 0 semmisült meg. Ez tök jó, ezt szerettük volna! Az egész 55 másodpercig tartott egy 6 éves laptopon.

És mit fogsz látni a Proxmox szervereden?

Mi történik, ha ismét kiadom a ‘tofu apply’ parancsot?

Ha nem változtattál se a fájlokon, se a virtuális szerver beállításain, akkor semmi. Az OpenTofu minden egyes tofu plan vagy tofu apply parancs kiadásakor összehasonlítja a fájlokat a valósággal, és ha eltérést tapasztal, akkor el fogja végezni a változtatásokat! Mondok erre néhány példát:

  • ha törlöd a vm2.tf fájlt, meg fogja semmisíteni a tf-dci13-vm2 nevű virtuális szervered!
  • ha törlöd a tf-dci13-vm2 nevű virtuális szervered, akkor újra létre fogja hozni
  • ha több memóriát, cput, diszket adsz a tf-dci13-vm2 nevű virtuális szerverednek, következő futtatáskor vissza fogja állítani az eredeti állapotot

Íme egy példa, módosítom a tf-dci13-vm2 nevű virtuális szerver memória és cpu beállításait, valamint több apróságot is. Az újra kiadott tofu apply parancs kimenete most így fog kinézni:

proxmox_vm_qemu.vm2: Refreshing state... [id=pveteszt/qemu/101]
proxmox_vm_qemu.vm1: Refreshing state... [id=pveteszt/qemu/100]

OpenTofu used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
 ~ update in-place

OpenTofu will perform the following actions:

 # proxmox_vm_qemu.vm1 will be updated in-place
 ~ resource "proxmox_vm_qemu" "vm1" {
     + default_ipv4_address   = (known after apply)
       id                     = "pveteszt/qemu/100"
       name                   = "tf-dci12-vm1"
     + ssh_host               = (known after apply)
     + ssh_port               = (known after apply)
       tags                   = "terraform"
       # (42 unchanged attributes hidden)

       # (5 unchanged blocks hidden)
   }

 # proxmox_vm_qemu.vm2 will be updated in-place
 ~ resource "proxmox_vm_qemu" "vm2" {
     ~ agent                  = 0 -> 1
     ~ boot                   = "order=net0" -> "order=scsi0"
     + default_ipv4_address   = (known after apply)
       id                     = "pveteszt/qemu/101"
     ~ memory                 = 2048 -> 1024
       name                   = "tf-dci13-vm2"
     ~ scsihw                 = "lsi" -> "virtio-scsi-single"
     + ssh_host               = (known after apply)
     + ssh_port               = (known after apply)
       tags                   = "terraform"
       # (39 unchanged attributes hidden)

     ~ cpu {
         ~ cores   = 1 -> 2
           # (6 unchanged attributes hidden)
       }

     ~ disks {
         + ide {
             + ide0 {
                 + cloudinit {
                     + storage = "local"
                   }
               }
           }

           # (1 unchanged block hidden)
       }

       # (3 unchanged blocks hidden)
   }

Plan: 0 to add, 2 to change, 0 to destroy.

Do you want to perform these actions?
 OpenTofu will perform the actions described above.
 Only 'yes' will be accepted to approve.

 Enter a value: yes

proxmox_vm_qemu.vm1: Modifying... [id=pveteszt/qemu/100]
proxmox_vm_qemu.vm2: Modifying... [id=pveteszt/qemu/101]
proxmox_vm_qemu.vm2: Modifications complete after 1s [id=pveteszt/qemu/101]
proxmox_vm_qemu.vm1: Modifications complete after 1s [id=pveteszt/qemu/100]

Apply complete! Resources: 0 added, 2 changed, 0 destroyed.

Ahogy várható volt, mindent visszaállított a vm2.tf fájlban definiált értékek szerint.

Néhány érdekesség a végére

Van egy spéci blokk a vm1|2.tf fájlok végén:

lifecycle {
   ignore_changes = [network,description,bootdisk]
 }

Ezt arra használja az OpenTofu, hogy az 1. futtatást kivéve milyen beállításokat hagyjon ki. Ebben az esetben nem változtatja meg a hálózatot, a boot diszket, illetve a vm notes-ben szereplő információkat, mivel az benne lévő időbélyeg értelemszerűen állandóan változik. Ez a lista szabadon változtatható, nyugodtan próbálgasd.

Mi van akkor, ha mégis Terraformot szeretnék használni?

Tökéletesen fog működni a git repóban található terraform definíció. Csak telepítsd a terraformot, ami nálam: $ sudo dnf install terraform -y

A fenti 3 parancs itt így fog kinézni:

  • terraform init
  • terraform plan
  • terraform apply

Ha már inicializáltad az OpenTofut, akkor ide is kell az upgrade kapcsoló:

  • terraform init -upgrade

Ha tofu-ról terraformra váltasz, vagy vissza, törlődni fognak a terraform.tfstate fájlok, azaz a plan/apply újra lefuttat mindent, mintha első alkalommal használtad volna.

Mit kell csinálnom, ha több vagy kevesebb vm-et szeretnék menedzselni?

Ha csak 1 vm-et szeretnél, nevezd át a vm2.tf fájlt mondjuk vm2.tf.bak-ra, vagy töröld le.

Ha többet szeretnél, akkor másold le pl a vm1.tf fájlt annyi példányban, ahány vm-et szeretnél létrehozni. A fájlok tetszőleges nevűek lehetnek, de a kiterjesztése .tf legyen! Majd nyisd meg szerkesztésre az új fájlokat, és a kedvenc szövegszerkesztőddel cseréld le a vm1 szavakat az általad kitaláltra. Mentsd el az összes új fájlt. Nyisd meg szerkesztésre a variables.tf fájlt, és csinálj az összes vm1-hez kapcsolódó változóról annyi másolatot, ahány új géped lesz. Ne felejtsd el a másolatokat átnevezni. Végül nyisd meg szerkesztésre a terraform.tfvars fájlt is, és ugyanúgy másold le a vm1 géphez tartozó sorokat a szükséges mennyiségben, itt se felejtsd el módosítani a másolatok neveit. Ez bonyolultnak hangzik, de nem az 🙂

Direkt ezért terveztem 2 vm-el, hogy lássátok a fájlok logikáját.

1 thought on “Terraformáljuk a Proxmoxot”

  1. Vales szerint:
    2025.08.11. 16:08

    Sanyikám!
    A cikked, mint mindig most is alapos és hasznos, érdekes, ráadásul nekem is kell IaC-t, konkrétan Terraformot is tanulnom, mivel a megcélzott álláslehetőségek között is előny, illetve eladható a munkaerőpiacon, szóval aktuális is. 😉
    Ahogy ki tudtam próbálni a gyakorlatban, arról is referálok.

    Válasz

Vélemény, hozzászólás? Válasz megszakítása

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Kategóriák

  • ansible
  • docker
  • e-mail
  • git
  • hardware
  • hibakeresés
  • kubernetes
  • ldap
  • Linux
  • MariaDB
  • OpenWrt
  • Proxmox
  • security
  • SNMP
  • Synology
  • Terraform/OpenTofu
  • teszt
  • Unifi
  • UPS
  • vagrant
  • Virtualbox
  • zabbix
©2025 msandor honlapja | WordPress Theme by Superb WordPress Themes

Adatkezelési tájékoztató || Hibát talált az oldalon? Írja meg nekem. || Impresszum || Powered by WordPress

Oldalunk cookie-kat ("sütiket") használ. Ezen fájlok információkat szolgáltatnak számunkra a felhasználó oldallátogatási szokásairól a legjobb felhasználói élmény nyújtása érdekében, de nem tárolnak személyes információkat, adatokat. Szolgáltatásaink igénybe vételével Ön beleegyezik a cookie-k használatába. Kérjük, hogy kattintson az Elfogadom gombra, amennyiben böngészni szeretné weboldalunkat.ElfogadomAdatvédelmi irányelvek