feat: initial commit

This commit is contained in:
nikola
2026-05-19 14:53:37 +02:00
commit f8eba4f09a
21 changed files with 1061 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
# This file is maintained automatically by "terraform init".
# Manual edits may be lost in future updates.
provider "registry.terraform.io/bpg/proxmox" {
version = "0.68.0"
constraints = "0.68.0"
hashes = [
"h1:4Q+bUZoRz7o2ij/oPS3SsAy1D2CDdIMasegk+ll7oho=",
"zh:012f3fce033a7921335576edba0f2d2dad7dcaec2e5ed3b68ced692845131656",
"zh:1853ddbaef049b14e738bf8531a2c8e45d9ac409676a7f7f997d40ae794db783",
"zh:2a284f49f95bfe022f8b5bfed6ae56df5577f590ff26ae12322767f23e3b6c50",
"zh:491a7d5a3cf47fc3016213ca047fcf20288200901f5c0195314c32925fcd36c0",
"zh:4a198ab0b40b02a35955156d9a195c76a22f92d4078195ce94316b793d0d58d4",
"zh:63f0e62c5805b48893f9a106ed11e628f1a3bc3d34360a2bb31a88cfcc2051dd",
"zh:64cdc6a3bdd56e2285a2d65a17d87ee284fcdbbe69246baed4aeaf465a955007",
"zh:6721eaaa4998795c0caed3225aa2bc8ff796a6de86114431194b9770f98e2600",
"zh:79ef8a813d1b3d5ef69f2a00a3160fde9ca65c541db42c998c69db6dea66558f",
"zh:96aa2d4a6cdac17dcccbb76a1ef0afc15052c3f13fa3bb0f3f44b385272405d4",
"zh:9e1e18b04f228d671e1653294828021e672dab6635a309e72b2da4ba3b9f07e9",
"zh:a91b69c6df914f8f0504d0f0d25af6a870b79befe6ae11d39a1bd8b879871084",
"zh:bc618ee4f85b8c5db0e1494d207d2a6170ca08dad5ce9844866550a94dd56bea",
"zh:ea85f7e5dbbe768e2e15e0cafacee1c94e319d04c1835db1984a6ce79674c8e4",
"zh:f26e0763dbe6a6b2195c94b44696f2110f7f55433dc142839be16b9697fa5597",
]
}
+33
View File
@@ -0,0 +1,33 @@
# Multi VM Terraform setup
## Priprema okruženja
- `cd ~/multi-vm-iac`
- `rm -rf .terraform terraform.tfstate*` # osveži backend da ne deli state sa starim projektom
- `terraform init -reconfigure`
## Konfiguracija IP adresa
- `cat <<'EOF' > terraform.tfvars`
```
vm_addresses = {
alpha = "10.1.50.XXX/24"
bravo = "10.1.50.YYY/24"
charlie = "10.1.50.ZZZ/24"
delta = "10.1.50.WWW/24"
}
```
`EOF`
- Izmeni XXX/YYY/ZZZ/WWW u slobodne adrese pre `apply`.
## Startovanje pojedinačnih VM-ova
- `terraform plan -target=proxmox_virtual_environment_vm.vm_alpha`
- `terraform apply -target=proxmox_virtual_environment_vm.vm_alpha`
- Ponovi za `vm_bravo`, `vm_charlie`, `vm_delta` po potrebi.
## Provera i gašenje
- `terraform state list` # pregled aktivnih resursa u ovom projektu
- `terraform destroy -target=proxmox_virtual_environment_vm.vm_alpha` # gasi samo jednu mašinu
- `terraform destroy` # gasi sve instance iz ovog foldera kada završiš
## Dodatno
- Ako budeš delio state, pređi na remote backend (S3 + DynamoDB lock, Terraform Cloud…) pre proizvodnog korišćenja.
- Za promenu gateway-a koristi varijablu `vm_gateway` u `terraform.tfvars`.
+218
View File
@@ -0,0 +1,218 @@
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.68.0"
}
}
}
provider "proxmox" {
endpoint = "https://10.0.50.110:8006/"
insecure = true
api_token = trimspace(file("${path.module}/.secrets/api_token"))
}
variable "vm_gateway" {
type = string
description = "Default gateway for all virtual machines."
default = "10.1.50.1"
}
variable "vm_addresses" {
type = object({
alpha = string
bravo = string
charlie = string
delta = string
})
description = "CIDR formatted IPv4 addresses for each virtual machine (e.g. 10.1.50.130/24)."
}
resource "proxmox_virtual_environment_vm" "vm_alpha" {
name = "terraform-multi-vm-alpha"
node_name = "rbmk2"
clone {
vm_id = 169
full = true
datastore_id = "local-lvm"
}
cpu {
sockets = 1
cores = 2
}
memory {
dedicated = 4096
}
network_device {
model = "virtio"
bridge = "vmbr0"
}
initialization {
datastore_id = "local-lvm"
user_account {
username = "devops"
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFyVe1ZhUCVs9imt0UmcCIXRAHpoSKFQ7IH/ekEXohZG dzoni-wolkabout"
]
}
ip_config {
ipv4 {
address = var.vm_addresses.alpha
gateway = var.vm_gateway
}
}
}
agent {
enabled = true
}
}
resource "proxmox_virtual_environment_vm" "vm_bravo" {
name = "terraform-multi-vm-bravo"
node_name = "rbmk2"
clone {
vm_id = 169
full = true
datastore_id = "local-lvm"
}
cpu {
sockets = 1
cores = 2
}
memory {
dedicated = 4096
}
network_device {
model = "virtio"
bridge = "vmbr0"
}
initialization {
datastore_id = "local-lvm"
user_account {
username = "devops"
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFyVe1ZhUCVs9imt0UmcCIXRAHpoSKFQ7IH/ekEXohZG dzoni-wolkabout"
]
}
ip_config {
ipv4 {
address = var.vm_addresses.bravo
gateway = var.vm_gateway
}
}
}
agent {
enabled = true
}
}
resource "proxmox_virtual_environment_vm" "vm_charlie" {
name = "terraform-multi-vm-charlie"
node_name = "rbmk2"
clone {
vm_id = 169
full = true
datastore_id = "local-lvm"
}
cpu {
sockets = 1
cores = 2
}
memory {
dedicated = 4096
}
network_device {
model = "virtio"
bridge = "vmbr0"
}
initialization {
datastore_id = "local-lvm"
user_account {
username = "devops"
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFyVe1ZhUCVs9imt0UmcCIXRAHpoSKFQ7IH/ekEXohZG dzoni-wolkabout"
]
}
ip_config {
ipv4 {
address = var.vm_addresses.charlie
gateway = var.vm_gateway
}
}
}
agent {
enabled = true
}
}
resource "proxmox_virtual_environment_vm" "vm_delta" {
name = "terraform-multi-vm-delta"
node_name = "rbmk2"
clone {
vm_id = 169
full = true
datastore_id = "local-lvm"
}
cpu {
sockets = 1
cores = 2
}
memory {
dedicated = 4096
}
network_device {
model = "virtio"
bridge = "vmbr0"
}
initialization {
datastore_id = "local-lvm"
user_account {
username = "devops"
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFyVe1ZhUCVs9imt0UmcCIXRAHpoSKFQ7IH/ekEXohZG dzoni-wolkabout"
]
}
ip_config {
ipv4 {
address = var.vm_addresses.delta
gateway = var.vm_gateway
}
}
}
agent {
enabled = true
}
}