127 lines
3.7 KiB
HCL

resource "proxmox_vm_qemu" "proxmox_vm_master" {
count = var.num_k3s_masters
name = "k3s-master-${count.index}"
target_node = var.pm_node_name
clone = var.template_vm_name # The name of the template
agent = 1
cores = 2
memory = var.num_k3s_masters_mem
boot = "order=scsi0" # has to be the same as the OS disk of the template
scsihw = "virtio-scsi-single"
vm_state = "running"
automatic_reboot = true
# Cloud-Init configuration
cicustom = "vendor=local:snippets/qemu-guest-agent.yml" # /var/lib/vz/snippets/qemu-guest-agent.yml
ciupgrade = true
nameserver = "1.1.1.1 8.8.8.8"
ipconfig0 = "ip=${var.master_ips[count.index]}/${var.networkrange},gw=${var.gateway}"
skip_ipv6 = true
ciuser = "root"
cipassword = "test_passwd"
sshkeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKXXnm9Hl4fPCt/Xjd/8E5tKY+edtM/BvdMOXpx40oWG iac@proxmox.vadzik-iot.ru"
# Most cloud-init images require a serial device for their display
serial {
id = 0
}
disks {
scsi {
scsi0 {
disk {
storage = "flash-VM"
size = "8G"
}
}
}
ide {
# Some images require a cloud-init disk on the IDE controller, others on the SCSI or SATA controller
ide1 {
cloudinit {
storage = "flash-VM"
}
}
}
}
network {
id = 0
bridge = "vmbr2"
model = "virtio"
}
}
resource "proxmox_vm_qemu" "proxmox_vm_workers" {
count = var.num_k3s_nodes
name = "k3s-worker-${count.index}"
target_node = var.pm_node_name
clone = var.template_vm_name
os_type = "cloud-init"
agent = 1
cores = 4
memory = var.num_k3s_nodes_mem
boot = "order=scsi0" # has to be the same as the OS disk of the template
scsihw = "virtio-scsi-single"
vm_state = "running"
automatic_reboot = true
# Cloud-Init configuration
cicustom = "vendor=local:snippets/qemu-guest-agent.yml" # /var/lib/vz/snippets/qemu-guest-agent.yml
ciupgrade = true
nameserver = "1.1.1.1 8.8.8.8"
ipconfig0 = "ip=${var.worker_ips[count.index]}/${var.networkrange},gw=${var.gateway}"
skip_ipv6 = true
ciuser = "debian"
cipassword = ""
sshkeys = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKXXnm9Hl4fPCt/Xjd/8E5tKY+edtM/BvdMOXpx40oWG iac@proxmox.vadzik-iot.ru"
# Most cloud-init images require a serial device for their display
serial {
id = 0
}
disks {
scsi {
scsi0 {
disk {
storage = "flash-VM"
size = "8G"
}
}
}
ide {
# Some images require a cloud-init disk on the IDE controller, others on the SCSI or SATA controller
ide1 {
cloudinit {
storage = "flash-VM"
}
}
}
}
network {
id = 0
bridge = "vmbr2"
model = "virtio"
}
}
data "template_file" "k8s" {
template = file("./templates/inventory.tpl")
vars = {
k3s_master_ip = "${join("\n", [for instance in proxmox_vm_qemu.proxmox_vm_master : join("", [instance.default_ipv4_address, " ansible_ssh_private_key_file=", var.pvt_key])])}"
k3s_node_ip = "${join("\n", [for instance in proxmox_vm_qemu.proxmox_vm_workers : join("", [instance.default_ipv4_address, " ansible_ssh_private_key_file=", var.pvt_key])])}"
}
}
resource "local_file" "k8s_file" {
content = data.template_file.k8s.rendered
filename = "../ansible/inventory/k3s-cluster/hosts.ini"
}
resource "local_file" "var_file" {
source = "../ansible/inventory/group_vars/all.yml"
filename = "../ansible/inventory/k3s-cluster/group_vars/all.yml"
}