feat: initial commit
This commit is contained in:
Generated
+25
@@ -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",
|
||||
]
|
||||
}
|
||||
@@ -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`.
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user