Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,17 @@ resource "terraform_data" "ova_vm_{{ vm_tf_name }}" {
provisioner "local-exec" {
command = <<-EOT
${local.ssh_cmd} ${var.proxmox_ssh_user}@{{ ssh_target }} "
set -e
cd /tmp/ova-${self.triggers_replace.name}
DISK_INDEX=0
for VMDK in \$(ls -1 *.vmdk 2>/dev/null | sort); do
qm disk import ${self.triggers_replace.vmid} \$VMDK {{ vm.config.disk_storage | default('local-lvm') }} --format qcow2
DISK_PATH=\$(qm config ${self.triggers_replace.vmid} | grep \"^unused0:\" | sed 's/^unused[0-9]*: //')
IMPORT_OUT=\$(qm disk import ${self.triggers_replace.vmid} \$VMDK {{ vm.config.disk_storage | default('local-lvm') }} --format qcow2 2>&1)
echo \"\$IMPORT_OUT\"
DISK_PATH=\$(echo \"\$IMPORT_OUT\" | grep 'successfully imported' | sed \"s/.*'\\(.*\\)'.*/\\1/\")
if [ -z \"\$DISK_PATH\" ]; then
echo \"ERROR: Failed to import disk \$VMDK\" >&2
exit 1
fi
qm set ${self.triggers_replace.vmid} --${self.triggers_replace.disk_bus}\$${DISK_INDEX} \$DISK_PATH
DISK_INDEX=\$((DISK_INDEX + 1))
done
Expand Down
18 changes: 9 additions & 9 deletions tests/unit/providers/proxmox/test_ova_vms.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,19 +101,19 @@ def test_disk_bus_in_attach_command(self, provider):
content = _render_ova_vms(provider, vms)
assert "${self.triggers_replace.disk_bus}" in content

def test_unused_disk_always_greps_index_zero(self, provider):
"""Grep for unused disk should always use unused0, not an incrementing index.
def test_disk_path_parsed_from_import_output(self, provider):
"""Disk path should be parsed from qm disk import output, not qm config.

Proxmox renumbers unused disks when one is attached (unused1 becomes
unused0, etc.), so the grep must always look for unused0.
Parsing 'successfully imported' from stdout is reliable for multi-disk
imports, unlike grepping unused0 from qm config which breaks when
multiple disks are imported in sequence.
"""
vms = [_make_ova_vm()]
content = _render_ova_vms(provider, vms)
assert 'grep \\"^unused0:\\"' in content
# Ensure no incrementing unused index pattern exists
assert "unused${DISK_INDEX}" not in content
assert "unused\\${DISK_INDEX}" not in content
assert "unused\\$${DISK_INDEX}" not in content
assert "successfully imported" in content
assert "IMPORT_OUT" in content
# Ensure the old fragile unused0 pattern is not used
assert "unused0" not in content


class TestOVADiskStorage:
Expand Down
Loading