diff --git a/docs/resources/virtual_environment_vm.md b/docs/resources/virtual_environment_vm.md index fe97263e..78df8c1e 100755 --- a/docs/resources/virtual_environment_vm.md +++ b/docs/resources/virtual_environment_vm.md @@ -414,7 +414,7 @@ output "ubuntu_vm_public_key" { - `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm. - `machine` - (Optional) The VM machine type (defaults to `pc`). - `pc` - Standard PC (i440FX + PIIX, 1996). - - `q35` - Standard PC (Q35 + ICH9, 2009). + - `q35` - Standard PC (Q35 + ICH9, 2009). Optionally, you can enable VIOMMU by adding `viommu=virtio|intel` to the value, for example `q35,viommu=virtio`. - `memory` - (Optional) The memory configuration. - `dedicated` - (Optional) The dedicated memory in megabytes (defaults to `512`). - `floating` - (Optional) The floating memory in megabytes. The default is `0`, which disables "ballooning device" for the VM. diff --git a/proxmoxtf/resource/vm/validators.go b/proxmoxtf/resource/vm/validators.go index 9df032c5..d610403a 100755 --- a/proxmoxtf/resource/vm/validators.go +++ b/proxmoxtf/resource/vm/validators.go @@ -192,7 +192,7 @@ func KeyboardLayoutValidator() schema.SchemaValidateDiagFunc { // MachineTypeValidator is a schema validation function for machine types. func MachineTypeValidator() schema.SchemaValidateDiagFunc { //nolint:lll - r := regexp.MustCompile(`^$|^(pc|pc(-i440fx)?-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|q35|pc-q35-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|virt(?:-\d+(\.\d+)+)?(\+pve\d+)?)$`) + r := regexp.MustCompile(`^$|^(pc|pc(-i440fx)?-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|q35(,viommu=(intel|virtio))?|pc-q35-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|virt(?:-\d+(\.\d+)+)?(\+pve\d+)?)$`) return validation.ToDiagFunc(validation.StringMatch(r, "must be a valid machine type")) } diff --git a/proxmoxtf/resource/vm/validators_test.go b/proxmoxtf/resource/vm/validators_test.go index 28ea96e4..e971f7f4 100644 --- a/proxmoxtf/resource/vm/validators_test.go +++ b/proxmoxtf/resource/vm/validators_test.go @@ -54,6 +54,8 @@ func TestMachineType(t *testing.T) { {"empty is valid", "", true}, {"invalid", "invalid", false}, {"valid q35", "q35", true}, + {"valid q35 with viommu", "q35,viommu=virtio", true}, + {"invalid q35 with viommu", "q35,viommu=invalid", false}, {"valid pc-q35", "pc-q35-2.3", true}, {"valid i440fx", "pc-i440fx-3.1+pve0", true}, {"valid virt", "virt", true},