From 144c32726a2981bba228491ee71e25f166622ae2 Mon Sep 17 00:00:00 2001 From: DeveloperDurp Date: Sat, 31 Jan 2026 06:17:02 -0600 Subject: [PATCH] initial commit --- .gitignore | 2 + dev/k3s.tf | 115 ++++++++++++++++++++++++++++++++++++++++++++ dev/main.tf | 48 +++++++++++++++++++ dev/variables.tf | 14 ++++++ dmz/k3s.tf | 115 ++++++++++++++++++++++++++++++++++++++++++++ dmz/main.tf | 58 +++++++++++++++++++++++ dmz/openVPN.tf | 57 ++++++++++++++++++++++ dmz/variables.tf | 14 ++++++ infra/k3s.tf | 116 +++++++++++++++++++++++++++++++++++++++++++++ infra/main.tf | 81 +++++++++++++++++++++++++++++++ infra/pihole.tf | 57 ++++++++++++++++++++++ infra/postgres.tf | 116 +++++++++++++++++++++++++++++++++++++++++++++ infra/variables.tf | 14 ++++++ prd/k3s.tf | 115 ++++++++++++++++++++++++++++++++++++++++++++ prd/main.tf | 48 +++++++++++++++++++ prd/variables.tf | 14 ++++++ 16 files changed, 984 insertions(+) create mode 100644 .gitignore create mode 100644 dev/k3s.tf create mode 100644 dev/main.tf create mode 100644 dev/variables.tf create mode 100644 dmz/k3s.tf create mode 100644 dmz/main.tf create mode 100644 dmz/openVPN.tf create mode 100644 dmz/variables.tf create mode 100644 infra/k3s.tf create mode 100644 infra/main.tf create mode 100644 infra/pihole.tf create mode 100644 infra/postgres.tf create mode 100644 infra/variables.tf create mode 100644 prd/k3s.tf create mode 100644 prd/main.tf create mode 100644 prd/variables.tf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5abc74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*/.terraform +*/.terraform.lock.hcl diff --git a/dev/k3s.tf b/dev/k3s.tf new file mode 100644 index 0000000..4d02a21 --- /dev/null +++ b/dev/k3s.tf @@ -0,0 +1,115 @@ +resource "proxmox_vm_qemu" "k3smaster" { + count = local.k3smaster.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3smaster.ip[count.index]}" + name = local.k3smaster.name[count.index] + target_node = local.k3smaster.node[count.index] + clone = local.template + tags = local.k3smaster.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3smaster.cores + sockets = 1 + cpu_type = "host" + memory = local.k3smaster.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3smaster.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3smaster.drive + format = local.format + storage = local.k3smaster.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} + +resource "proxmox_vm_qemu" "k3sserver" { + count = local.k3sserver.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3sserver.ip[count.index]}" + name = local.k3sserver.name[count.index] + target_node = local.k3sserver.node[count.index] + clone = local.template + tags = local.k3sserver.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3sserver.cores + sockets = 1 + cpu_type = "host" + memory = local.k3sserver.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3sserver.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3sserver.drive + format = local.format + storage = local.k3sserver.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/dev/main.tf b/dev/main.tf new file mode 100644 index 0000000..c75295e --- /dev/null +++ b/dev/main.tf @@ -0,0 +1,48 @@ +terraform { + backend "http" {} + required_providers { + proxmox = { + source = "Telmate/proxmox" + version = "3.0.1-rc9" + } + } +} + +provider "proxmox" { + pm_parallel = 1 + pm_tls_insecure = true + pm_api_url = var.pm_api_url + pm_user = var.pm_user + pm_password = var.pm_password + pm_debug = false +} + +locals { + sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible" + template = "Debian12-Template" + format = "raw" + dnsserver = "192.168.10.1" + vlan = 10 + k3smaster = { + tags = "k3s_dev" + count = 3 + name = ["master01-dev", "master02-dev", "master03-dev"] + cores = 2 + memory = "4096" + drive = 20 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["11", "12", "13"] + } + k3sserver = { + tags = "k3s_dev" + count = 3 + name = ["node01-dev", "node02-dev", "node03-dev"] + cores = 4 + memory = "8192" + drive = 120 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["21", "22", "23"] + } +} diff --git a/dev/variables.tf b/dev/variables.tf new file mode 100644 index 0000000..29a1c9d --- /dev/null +++ b/dev/variables.tf @@ -0,0 +1,14 @@ +variable "pm_api_url" { + description = "API URL to Proxmox provider" + type = string +} + +variable "pm_password" { + description = "Passowrd to Proxmox provider" + type = string +} + +variable "pm_user" { + description = "Username to Proxmox provider" + type = string +} diff --git a/dmz/k3s.tf b/dmz/k3s.tf new file mode 100644 index 0000000..bca2f62 --- /dev/null +++ b/dmz/k3s.tf @@ -0,0 +1,115 @@ +resource "proxmox_vm_qemu" "k3smaster" { + count = local.k3smaster.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3smaster.ip[count.index]}" + name = local.k3smaster.name[count.index] + target_node = local.k3smaster.node[count.index] + clone = local.template + tags = local.k3smaster.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3smaster.cores + sockets = 1 + cpu_type = "host" + memory = local.k3smaster.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3smaster.drive + format = local.format + storage = local.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} + +resource "proxmox_vm_qemu" "k3sserver" { + count = local.k3sserver.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3sserver.ip[count.index]}" + name = local.k3sserver.name[count.index] + target_node = local.k3sserver.node[count.index] + clone = local.template + tags = local.k3sserver.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3sserver.cores + sockets = 1 + cpu_type = "host" + memory = local.k3sserver.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3sserver.drive + format = local.format + storage = local.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/dmz/main.tf b/dmz/main.tf new file mode 100644 index 0000000..4a949bd --- /dev/null +++ b/dmz/main.tf @@ -0,0 +1,58 @@ +terraform { + backend "http" {} + required_providers { + proxmox = { + source = "Telmate/proxmox" + version = "3.0.1-rc9" + } + } +} + +provider "proxmox" { + pm_parallel = 1 + pm_tls_insecure = true + pm_api_url = var.pm_api_url + pm_user = var.pm_user + pm_password = var.pm_password + pm_debug = false +} + +locals { + sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible" + template = "Debian12-Template" + storage = "cache-domains" + emulatessd = true + format = "raw" + dnsserver = "192.168.98.1" + vlan = 98 + k3smaster = { + tags = "k3s_dmz" + count = 3 + name = ["master01-dmz", "master02-dmz", "master03-dmz"] + cores = 2 + memory = "4096" + drive = 20 + node = ["mothership", "overlord", "vanguard"] + ip = ["11", "12", "13"] + } + k3sserver = { + tags = "k3s_dmz" + count = 3 + name = ["node01-dmz", "node02-dmz", "node03-dmz"] + cores = 4 + memory = "8192" + drive = 240 + node = ["mothership", "overlord", "vanguard"] + ip = ["21", "22", "23"] + } + openVPN = { + tags = "openVPN" + count = 1 + name = ["openVPN"] + cores = 2 + memory = "4096" + drive = 20 + node = ["mothership"] + ip = ["20"] + } +} diff --git a/dmz/openVPN.tf b/dmz/openVPN.tf new file mode 100644 index 0000000..ea43924 --- /dev/null +++ b/dmz/openVPN.tf @@ -0,0 +1,57 @@ +resource "proxmox_vm_qemu" "openVPN" { + count = local.openVPN.count + ciuser = "administrator" + vmid = "${local.vlan}${local.openVPN.ip[count.index]}" + name = local.openVPN.name[count.index] + target_node = local.openVPN.node[count.index] + clone = local.template + tags = local.openVPN.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.openVPN.cores + sockets = 1 + cpu_type = "host" + memory = local.openVPN.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.openVPN.drive + format = local.format + storage = local.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.openVPN.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/dmz/variables.tf b/dmz/variables.tf new file mode 100644 index 0000000..31a92e0 --- /dev/null +++ b/dmz/variables.tf @@ -0,0 +1,14 @@ +variable "pm_api_url" { + description = "API URL to Proxmox provider" + type = string +} + +variable "pm_password" { + description = "Passowrd to Proxmox provider" + type = string +} + +variable "pm_user" { + description = "UIsername to Proxmox provider" + type = string +} diff --git a/infra/k3s.tf b/infra/k3s.tf new file mode 100644 index 0000000..24e00e6 --- /dev/null +++ b/infra/k3s.tf @@ -0,0 +1,116 @@ +resource "proxmox_vm_qemu" "k3smaster" { + lifecycle { + prevent_destroy = true + } + count = local.k3smaster.count + ciuser = "administrator" + name = local.k3smaster.name[count.index] + target_node = local.k3smaster.node[count.index] + tags = local.k3smaster.tags + full_clone = false + qemu_os = "l26" + os_type = "cloud-init" + agent = 1 + cores = local.k3smaster.cores + sockets = 1 + cpu_type = "host" + memory = local.k3smaster.memory + scsihw = "virtio-scsi-pci" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3smaster.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3smaster.drive + format = local.format + storage = local.k3smaster.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} + +resource "proxmox_vm_qemu" "k3sserver" { + lifecycle { + prevent_destroy = true + } + count = local.k3sserver.count + ciuser = "administrator" + name = local.k3sserver.name[count.index] + target_node = local.k3sserver.node[count.index] + tags = local.k3sserver.tags + qemu_os = "l26" + full_clone = false + os_type = "cloud-init" + agent = 1 + cores = local.k3sserver.cores + sockets = 1 + cpu_type = "host" + memory = local.k3sserver.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3sserver.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3sserver.drive + format = local.format + storage = local.k3sserver.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/infra/main.tf b/infra/main.tf new file mode 100644 index 0000000..df2d033 --- /dev/null +++ b/infra/main.tf @@ -0,0 +1,81 @@ +terraform { + backend "http" {} + required_providers { + proxmox = { + source = "Telmate/proxmox" + version = "3.0.1-rc9" + } + } +} + +provider "proxmox" { + pm_parallel = 1 + pm_tls_insecure = true + pm_api_url = var.pm_api_url + pm_user = var.pm_user + pm_password = var.pm_password + pm_debug = false +} + +locals { + sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible" + template = "Debian12-Template" + format = "raw" + dnsserver = "192.168.12.1" + vlan = 12 + k3smaster = { + tags = "k3s_infra" + count = 3 + name = ["master01-infra", "master02-infra", "master03-infra"] + cores = 2 + memory = "4096" + drive = 20 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["11", "12", "13"] + } + k3sserver = { + tags = "k3s_infra" + count = 3 + name = ["node01-infra", "node02-infra", "node03-infra"] + cores = 4 + memory = "16384" + drive = 240 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["21", "22", "23"] + } + #haproxy = { + # tags = "haproxy" + # count = 3 + # name = ["haproxy-01", "haproxy-02", "haproxy-03"] + # cores = 2 + # memory = "1024" + # drive = 20 + # storage = "cache-domains" + # node = ["mothership", "overlord", "vanguard"] + # ip = ["31", "32", "33"] + #} + #postgres = { + # tags = "postgres" + # count = 3 + # name = ["postgres-01", "postgres-02", "postgres-03"] + # cores = 4 + # memory = "4096" + # drive = 40 + # storage = "cache-domains" + # node = ["mothership", "overlord", "vanguard"] + # ip = ["34", "35", "36"] + #} + pihole = { + tags = "pihole" + count = 3 + name = ["pihole-01", "pihole-02", "pihole-03"] + cores = 2 + memory = "2048" + drive = 20 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["41", "42", "43"] + } +} diff --git a/infra/pihole.tf b/infra/pihole.tf new file mode 100644 index 0000000..ced2aac --- /dev/null +++ b/infra/pihole.tf @@ -0,0 +1,57 @@ +resource "proxmox_vm_qemu" "pihole" { + count = local.pihole.count + ciuser = "administrator" + vmid = "${local.vlan}${local.pihole.ip[count.index]}" + name = local.pihole.name[count.index] + target_node = local.pihole.node[count.index] + clone = local.template + tags = local.pihole.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.pihole.cores + sockets = 1 + cpu_type = "host" + memory = local.pihole.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.pihole.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.pihole.drive + format = local.format + storage = local.pihole.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.pihole.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/infra/postgres.tf b/infra/postgres.tf new file mode 100644 index 0000000..47b8daa --- /dev/null +++ b/infra/postgres.tf @@ -0,0 +1,116 @@ +#resource "proxmox_vm_qemu" "haproxy" { +# count = local.haproxy.count +# ciuser = "administrator" +# vmid = "${local.vlan}${local.haproxy.ip[count.index]}" +# name = local.haproxy.name[count.index] +# target_node = local.haproxy.node[count.index] +# clone = local.template +# tags = local.haproxy.tags +# qemu_os = "l26" +# full_clone = true +# os_type = "cloud-init" +# agent = 1 +# cores = local.haproxy.cores +# sockets = 1 +# cpu_type = "host" +# memory = local.haproxy.memory +# scsihw = "virtio-scsi-pci" +# #bootdisk = "scsi0" +# boot = "order=virtio0" +# onboot = true +# sshkeys = local.sshkeys +# vga { +# type = "serial0" +# } +# serial { +# id = 0 +# type = "socket" +# } +# disks { +# ide { +# ide2 { +# cloudinit { +# storage = local.haproxy.storage +# } +# } +# } +# virtio { +# virtio0 { +# disk { +# size = local.haproxy.drive +# format = local.format +# storage = local.haproxy.storage +# } +# } +# } +# } +# network { +# id = 0 +# model = "virtio" +# bridge = "vmbr0" +# tag = local.vlan +# } +# #Cloud Init Settings +# ipconfig0 = "ip=192.168.${local.vlan}.${local.haproxy.ip[count.index]}/24,gw=192.168.${local.vlan}.1" +# searchdomain = "durp.loc" +# nameserver = local.dnsserver +#} +# +#resource "proxmox_vm_qemu" "postgres" { +# count = local.postgres.count +# ciuser = "administrator" +# vmid = "${local.vlan}${local.postgres.ip[count.index]}" +# name = local.postgres.name[count.index] +# target_node = local.postgres.node[count.index] +# clone = local.template +# tags = local.postgres.tags +# qemu_os = "l26" +# full_clone = true +# os_type = "cloud-init" +# agent = 1 +# cores = local.postgres.cores +# sockets = 1 +# cpu_type = "host" +# memory = local.postgres.memory +# scsihw = "virtio-scsi-pci" +# #bootdisk = "scsi0" +# boot = "order=virtio0" +# onboot = true +# sshkeys = local.sshkeys +# vga { +# type = "serial0" +# } +# serial { +# id = 0 +# type = "socket" +# } +# disks { +# ide { +# ide2 { +# cloudinit { +# storage = local.postgres.storage +# } +# } +# } +# virtio { +# virtio0 { +# disk { +# size = local.postgres.drive +# format = local.format +# storage = local.postgres.storage +# } +# } +# } +# } +# network { +# id = 0 +# model = "virtio" +# bridge = "vmbr0" +# tag = local.vlan +# } +# #Cloud Init Settings +# ipconfig0 = "ip=192.168.${local.vlan}.${local.postgres.ip[count.index]}/24,gw=192.168.${local.vlan}.1" +# searchdomain = "durp.loc" +# nameserver = local.dnsserver +#} +# \ No newline at end of file diff --git a/infra/variables.tf b/infra/variables.tf new file mode 100644 index 0000000..31a92e0 --- /dev/null +++ b/infra/variables.tf @@ -0,0 +1,14 @@ +variable "pm_api_url" { + description = "API URL to Proxmox provider" + type = string +} + +variable "pm_password" { + description = "Passowrd to Proxmox provider" + type = string +} + +variable "pm_user" { + description = "UIsername to Proxmox provider" + type = string +} diff --git a/prd/k3s.tf b/prd/k3s.tf new file mode 100644 index 0000000..4d02a21 --- /dev/null +++ b/prd/k3s.tf @@ -0,0 +1,115 @@ +resource "proxmox_vm_qemu" "k3smaster" { + count = local.k3smaster.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3smaster.ip[count.index]}" + name = local.k3smaster.name[count.index] + target_node = local.k3smaster.node[count.index] + clone = local.template + tags = local.k3smaster.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3smaster.cores + sockets = 1 + cpu_type = "host" + memory = local.k3smaster.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3smaster.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3smaster.drive + format = local.format + storage = local.k3smaster.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} + +resource "proxmox_vm_qemu" "k3sserver" { + count = local.k3sserver.count + ciuser = "administrator" + vmid = "${local.vlan}${local.k3sserver.ip[count.index]}" + name = local.k3sserver.name[count.index] + target_node = local.k3sserver.node[count.index] + clone = local.template + tags = local.k3sserver.tags + qemu_os = "l26" + full_clone = true + os_type = "cloud-init" + agent = 1 + cores = local.k3sserver.cores + sockets = 1 + cpu_type = "host" + memory = local.k3sserver.memory + scsihw = "virtio-scsi-pci" + #bootdisk = "scsi0" + boot = "order=virtio0" + onboot = true + sshkeys = local.sshkeys + vga { + type = "serial0" + } + serial { + id = 0 + type = "socket" + } + disks { + ide { + ide2 { + cloudinit { + storage = local.k3sserver.storage + } + } + } + virtio { + virtio0 { + disk { + size = local.k3sserver.drive + format = local.format + storage = local.k3sserver.storage + } + } + } + } + network { + id = 0 + model = "virtio" + bridge = "vmbr0" + tag = local.vlan + } + #Cloud Init Settings + ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1" + searchdomain = "durp.loc" + nameserver = local.dnsserver +} diff --git a/prd/main.tf b/prd/main.tf new file mode 100644 index 0000000..6be6739 --- /dev/null +++ b/prd/main.tf @@ -0,0 +1,48 @@ +terraform { + backend "http" {} + required_providers { + proxmox = { + source = "Telmate/proxmox" + version = "3.0.1-rc9" + } + } +} + +provider "proxmox" { + pm_parallel = 1 + pm_tls_insecure = true + pm_api_url = var.pm_api_url + pm_user = var.pm_user + pm_password = var.pm_password + pm_debug = false +} + +locals { + sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible" + template = "Debian12-Template" + format = "raw" + dnsserver = "192.168.11.1" + vlan = 11 + k3smaster = { + tags = "k3s_prd" + count = 3 + name = ["master01-prd", "master02-prd", "master03-prd"] + cores = 2 + memory = "4096" + drive = 20 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["11", "12", "13"] + } + k3sserver = { + tags = "k3s_prd" + count = 3 + name = ["node01-prd", "node02-prd", "node03-prd"] + cores = 4 + memory = "8192" + drive = 120 + storage = "cache-domains" + node = ["mothership", "overlord", "vanguard"] + ip = ["21", "22", "23"] + } +} diff --git a/prd/variables.tf b/prd/variables.tf new file mode 100644 index 0000000..29a1c9d --- /dev/null +++ b/prd/variables.tf @@ -0,0 +1,14 @@ +variable "pm_api_url" { + description = "API URL to Proxmox provider" + type = string +} + +variable "pm_password" { + description = "Passowrd to Proxmox provider" + type = string +} + +variable "pm_user" { + description = "Username to Proxmox provider" + type = string +}