Skip to content

feat: support multiple disk per vm #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions modules/vm/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -54,22 +54,25 @@ resource "proxmox_virtual_environment_vm" "vm" {
scsi_hardware = "virtio-scsi-single"

# data disk
disk {
size = var.disk.size
datastore_id = var.disk.storage
dynamic "disk" {
for_each = var.disks
content {
size = disk.value["size_gb"]
datastore_id = disk.value["storage"]

file_format = "raw"
file_format = "raw"

interface = "scsi0"
interface = "scsi0"

iothread = true
ssd = true
discard = "on"
iothread = true
ssd = true
discard = "on"
}
}

# efi disk
efi_disk {
datastore_id = var.disk.storage
datastore_id = var.disks[0].storage
type = "4m"
}

Expand All @@ -88,16 +91,16 @@ resource "proxmox_virtual_environment_vm" "vm" {
dynamic "clone" {
for_each = var.clone != null ? [var.clone] : []
content {
datastore_id = var.disk.storage
datastore_id = var.disks[0].storage
vm_id = clone.value
}
}

initialization {
datastore_id = var.disk.storage
datastore_id = var.disks[0].storage

# this is necessary when using machine type q35 or ovmf bios
interface = "scsi1"
interface = "scsi23"

user_account {
password = random_password.default_root_password.result
Expand Down
18 changes: 13 additions & 5 deletions modules/vm/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,16 @@ variable "memory" {
description = "how much memory should be available to the VM"
}

variable "disk" {
type = object({
size = string
variable "disks" {
type = list(object({
size_gb = number
storage = string
})
description = "the disk size and storage"
}))
description = "sizes and storage for all disks"
validation {
condition = length(var.disks) != 0
error_message = "should have at least one disk configured"
}
}

variable "network" {
Expand Down Expand Up @@ -78,6 +82,10 @@ variable "admins" {
username = string
ssh_key = string
}))
validation {
condition = length(var.admins) != 0
error_message = "should have at least one admin configured"
}
}

variable "template" {
Expand Down
11 changes: 6 additions & 5 deletions proxmox/100-home-assistant.tf
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ module "home_assistant_vm" {
cores = 4
memory = 8192

disk = {
// gigabytes
size = 64
storage = var.storage.disk
}
disks = [
{
size_gb = 64
storage = var.storage.disk
}
]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/101-docker.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "docker_vm" {
cores = 4
memory = 8192

disk = {
// gigabytes
size = 64
disks = [{
size_gb = 64
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/102-netboot.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "netboot_vm" {
cores = 1
memory = 2048

disk = {
// gigabytes
size = 48
disks = [{
size_gb = 48
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/103-kristall-miai-vm.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "kristall-miai_vm" {
cores = 6
memory = 36864

disk = {
// gigabytes
size = 15
disks = [{
size_gb = 15
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/104-cbtelbot.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "cbtelbot_vm" {
cores = 1
memory = 1024

disk = {
// gigabytes
size = 48
disks = [{
size_gb = 48
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/105-mecci.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "mecci_vm" {
cores = 4
memory = 8192

disk = {
// gigabytes
size = 64
disks = [{
size_gb = 64
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/106-streaming.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "streaming_vm" {
cores = 2
memory = 4096

disk = {
// gigabytes
size = 32
disks = [{
size_gb = 32
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/107-ci-runners.tf
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ module "ci_runners_vm" {
memory = 4096
weight = 128

disk = {
// gigabytes
size = 32
disks = [{
size_gb = 32
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
7 changes: 3 additions & 4 deletions proxmox/108-cwace.tf
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ module "cwace" {

clone = data.proxmox_virtual_environment_vm.debian_cloud_vm_template.vm_id

disk = {
// gigabytes
size = 32
disks = [{
size_gb = 32
storage = var.storage.disk
}
}]

network = {
bridge = var.network.bridge
Expand Down
Loading