mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-03 03:52:58 +00:00
Add bios argument to VM resource
This commit is contained in:
parent
073030965a
commit
347b553202
@ -3,6 +3,7 @@
|
|||||||
ENHANCEMENTS:
|
ENHANCEMENTS:
|
||||||
|
|
||||||
* resource/virtual_environment_vm: Add `acpi` argument
|
* resource/virtual_environment_vm: Add `acpi` argument
|
||||||
|
* resource/virtual_environment_vm: Add `bios` argument
|
||||||
* resource/virtual_environment_vm: Add `cpu.flags`, `cpu.type` and `cpu.units` arguments
|
* resource/virtual_environment_vm: Add `cpu.flags`, `cpu.type` and `cpu.units` arguments
|
||||||
* resource/virtual_environment_vm: Add `tablet_device` argument
|
* resource/virtual_environment_vm: Add `tablet_device` argument
|
||||||
* resource/virtual_environment_vm: Add `vga` argument
|
* resource/virtual_environment_vm: Add `vga` argument
|
||||||
|
@ -339,6 +339,9 @@ This resource doesn't expose any additional attributes.
|
|||||||
* `type` - (Optional) The QEMU agent interface type (defaults to `virtio`)
|
* `type` - (Optional) The QEMU agent interface type (defaults to `virtio`)
|
||||||
* `isa` - ISA Serial Port
|
* `isa` - ISA Serial Port
|
||||||
* `virtio` - VirtIO (paravirtualized)
|
* `virtio` - VirtIO (paravirtualized)
|
||||||
|
* `bios` - (Optional) The BIOS implementation (defaults to `seabios`)
|
||||||
|
* `ovmf` - OVMF (UEFI)
|
||||||
|
* `seabios` - SeaBIOS
|
||||||
* `cdrom` - (Optional) The CDROM configuration
|
* `cdrom` - (Optional) The CDROM configuration
|
||||||
* `enabled` - (Optional) Whether to enable the CDROM drive (defaults to `false`)
|
* `enabled` - (Optional) Whether to enable the CDROM drive (defaults to `false`)
|
||||||
* `file_id` - (Optional) A file ID for an ISO file (defaults to `cdrom` as in the physical drive)
|
* `file_id` - (Optional) A file ID for an ISO file (defaults to `cdrom` as in the physical drive)
|
||||||
|
@ -20,6 +20,7 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMAgentEnabled = false
|
dvResourceVirtualEnvironmentVMAgentEnabled = false
|
||||||
dvResourceVirtualEnvironmentVMAgentTrim = false
|
dvResourceVirtualEnvironmentVMAgentTrim = false
|
||||||
dvResourceVirtualEnvironmentVMAgentType = "virtio"
|
dvResourceVirtualEnvironmentVMAgentType = "virtio"
|
||||||
|
dvResourceVirtualEnvironmentVMBIOS = "seabios"
|
||||||
dvResourceVirtualEnvironmentVMCDROMEnabled = false
|
dvResourceVirtualEnvironmentVMCDROMEnabled = false
|
||||||
dvResourceVirtualEnvironmentVMCDROMFileID = ""
|
dvResourceVirtualEnvironmentVMCDROMFileID = ""
|
||||||
dvResourceVirtualEnvironmentVMCloudInitDNSDomain = ""
|
dvResourceVirtualEnvironmentVMCloudInitDNSDomain = ""
|
||||||
@ -65,6 +66,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMAgentEnabled = "enabled"
|
mkResourceVirtualEnvironmentVMAgentEnabled = "enabled"
|
||||||
mkResourceVirtualEnvironmentVMAgentTrim = "trim"
|
mkResourceVirtualEnvironmentVMAgentTrim = "trim"
|
||||||
mkResourceVirtualEnvironmentVMAgentType = "type"
|
mkResourceVirtualEnvironmentVMAgentType = "type"
|
||||||
|
mkResourceVirtualEnvironmentVMBIOS = "bios"
|
||||||
mkResourceVirtualEnvironmentVMCDROM = "cdrom"
|
mkResourceVirtualEnvironmentVMCDROM = "cdrom"
|
||||||
mkResourceVirtualEnvironmentVMCDROMEnabled = "enabled"
|
mkResourceVirtualEnvironmentVMCDROMEnabled = "enabled"
|
||||||
mkResourceVirtualEnvironmentVMCDROMFileID = "file_id"
|
mkResourceVirtualEnvironmentVMCDROMFileID = "file_id"
|
||||||
@ -182,6 +184,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
MaxItems: 1,
|
MaxItems: 1,
|
||||||
MinItems: 0,
|
MinItems: 0,
|
||||||
},
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMBIOS: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Description: "The BIOS implementation",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMBIOS,
|
||||||
|
ValidateFunc: getBIOSValidator(),
|
||||||
|
},
|
||||||
mkResourceVirtualEnvironmentVMCDROM: &schema.Schema{
|
mkResourceVirtualEnvironmentVMCDROM: &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Description: "The CDROM drive",
|
Description: "The CDROM drive",
|
||||||
@ -804,6 +813,8 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
|
|||||||
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
|
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
|
||||||
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
|
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
|
||||||
|
|
||||||
|
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
|
|
||||||
cdromBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMCDROM}, 0, true)
|
cdromBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMCDROM}, 0, true)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -938,6 +949,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
|
|||||||
TrimClonedDisks: &agentTrim,
|
TrimClonedDisks: &agentTrim,
|
||||||
Type: &agentType,
|
Type: &agentType,
|
||||||
},
|
},
|
||||||
|
BIOS: &bios,
|
||||||
BootDisk: &bootDisk,
|
BootDisk: &bootDisk,
|
||||||
BootOrder: &bootOrder,
|
BootOrder: &bootOrder,
|
||||||
CloudInitConfig: cloudInitConfig,
|
CloudInitConfig: cloudInitConfig,
|
||||||
@ -1414,7 +1426,15 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
|
|||||||
if vmConfig.ACPI != nil {
|
if vmConfig.ACPI != nil {
|
||||||
d.Set(mkResourceVirtualEnvironmentVMACPI, bool(*vmConfig.ACPI))
|
d.Set(mkResourceVirtualEnvironmentVMACPI, bool(*vmConfig.ACPI))
|
||||||
} else {
|
} else {
|
||||||
d.Set(mkResourceVirtualEnvironmentVMACPI, false)
|
// Default value of "acpi" is "1" according to the API documentation.
|
||||||
|
d.Set(mkResourceVirtualEnvironmentVMACPI, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if vmConfig.BIOS != nil {
|
||||||
|
d.Set(mkResourceVirtualEnvironmentVMBIOS, *vmConfig.BIOS)
|
||||||
|
} else {
|
||||||
|
// Default value of "bios" is "seabios" according to the API documentation.
|
||||||
|
d.Set(mkResourceVirtualEnvironmentVMBIOS, "seabios")
|
||||||
}
|
}
|
||||||
|
|
||||||
if vmConfig.Description != nil {
|
if vmConfig.Description != nil {
|
||||||
@ -1432,7 +1452,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
|
|||||||
if vmConfig.TabletDeviceEnabled != nil {
|
if vmConfig.TabletDeviceEnabled != nil {
|
||||||
d.Set(mkResourceVirtualEnvironmentVMTabletDevice, bool(*vmConfig.TabletDeviceEnabled))
|
d.Set(mkResourceVirtualEnvironmentVMTabletDevice, bool(*vmConfig.TabletDeviceEnabled))
|
||||||
} else {
|
} else {
|
||||||
d.Set(mkResourceVirtualEnvironmentVMTabletDevice, false)
|
// Default value of "tablet" is "1" according to the API documentation.
|
||||||
|
d.Set(mkResourceVirtualEnvironmentVMTabletDevice, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare the agent configuration to the one stored in the state.
|
// Compare the agent configuration to the one stored in the state.
|
||||||
@ -1631,19 +1652,22 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
|
|||||||
if vmConfig.CPUCores != nil {
|
if vmConfig.CPUCores != nil {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUCores] = *vmConfig.CPUCores
|
cpu[mkResourceVirtualEnvironmentVMCPUCores] = *vmConfig.CPUCores
|
||||||
} else {
|
} else {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUCores] = 0
|
// Default value of "cores" is "1" according to the API documentation.
|
||||||
|
cpu[mkResourceVirtualEnvironmentVMCPUCores] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if vmConfig.VirtualCPUCount != nil {
|
if vmConfig.VirtualCPUCount != nil {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = *vmConfig.VirtualCPUCount
|
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = *vmConfig.VirtualCPUCount
|
||||||
} else {
|
} else {
|
||||||
|
// Default value of "vcpus" is "1" according to the API documentation.
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = 0
|
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if vmConfig.CPUSockets != nil {
|
if vmConfig.CPUSockets != nil {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = *vmConfig.CPUSockets
|
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = *vmConfig.CPUSockets
|
||||||
} else {
|
} else {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = 0
|
// Default value of "sockets" is "1" according to the API documentation.
|
||||||
|
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if vmConfig.CPUEmulation != nil {
|
if vmConfig.CPUEmulation != nil {
|
||||||
@ -1668,7 +1692,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
|
|||||||
if vmConfig.CPUUnits != nil {
|
if vmConfig.CPUUnits != nil {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = *vmConfig.CPUUnits
|
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = *vmConfig.CPUUnits
|
||||||
} else {
|
} else {
|
||||||
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 0
|
// Default value of "cpuunits" is "1024" according to the API documentation.
|
||||||
|
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 1024
|
||||||
}
|
}
|
||||||
|
|
||||||
currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
|
currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
|
||||||
@ -2045,6 +2070,7 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
|||||||
|
|
||||||
// Prepare the new primitive configuration values.
|
// Prepare the new primitive configuration values.
|
||||||
acpi := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMACPI).(bool))
|
acpi := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMACPI).(bool))
|
||||||
|
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
delete := []string{}
|
delete := []string{}
|
||||||
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string)
|
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string)
|
||||||
keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string)
|
keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string)
|
||||||
@ -2053,6 +2079,7 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
|||||||
tabletDevice := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMTabletDevice).(bool))
|
tabletDevice := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMTabletDevice).(bool))
|
||||||
|
|
||||||
body.ACPI = &acpi
|
body.ACPI = &acpi
|
||||||
|
body.BIOS = &bios
|
||||||
|
|
||||||
if description != "" {
|
if description != "" {
|
||||||
body.Description = &description
|
body.Description = &description
|
||||||
@ -2068,6 +2095,7 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
|||||||
body.TabletDeviceEnabled = &tabletDevice
|
body.TabletDeviceEnabled = &tabletDevice
|
||||||
|
|
||||||
if d.HasChange(mkResourceVirtualEnvironmentVMACPI) ||
|
if d.HasChange(mkResourceVirtualEnvironmentVMACPI) ||
|
||||||
|
d.HasChange(mkResourceVirtualEnvironmentVMBIOS) ||
|
||||||
d.HasChange(mkResourceVirtualEnvironmentVMKeyboardLayout) ||
|
d.HasChange(mkResourceVirtualEnvironmentVMKeyboardLayout) ||
|
||||||
d.HasChange(mkResourceVirtualEnvironmentVMOSType) ||
|
d.HasChange(mkResourceVirtualEnvironmentVMOSType) ||
|
||||||
d.HasChange(mkResourceVirtualEnvironmentVMTabletDevice) {
|
d.HasChange(mkResourceVirtualEnvironmentVMTabletDevice) {
|
||||||
|
@ -29,6 +29,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
|
|
||||||
testOptionalArguments(t, s, []string{
|
testOptionalArguments(t, s, []string{
|
||||||
mkResourceVirtualEnvironmentVMACPI,
|
mkResourceVirtualEnvironmentVMACPI,
|
||||||
|
mkResourceVirtualEnvironmentVMBIOS,
|
||||||
mkResourceVirtualEnvironmentVMCDROM,
|
mkResourceVirtualEnvironmentVMCDROM,
|
||||||
mkResourceVirtualEnvironmentVMCloudInit,
|
mkResourceVirtualEnvironmentVMCloudInit,
|
||||||
mkResourceVirtualEnvironmentVMCPU,
|
mkResourceVirtualEnvironmentVMCPU,
|
||||||
@ -54,6 +55,8 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
|
|
||||||
testSchemaValueTypes(t, s, []string{
|
testSchemaValueTypes(t, s, []string{
|
||||||
mkResourceVirtualEnvironmentVMACPI,
|
mkResourceVirtualEnvironmentVMACPI,
|
||||||
|
mkResourceVirtualEnvironmentVMAgent,
|
||||||
|
mkResourceVirtualEnvironmentVMBIOS,
|
||||||
mkResourceVirtualEnvironmentVMCDROM,
|
mkResourceVirtualEnvironmentVMCDROM,
|
||||||
mkResourceVirtualEnvironmentVMCloudInit,
|
mkResourceVirtualEnvironmentVMCloudInit,
|
||||||
mkResourceVirtualEnvironmentVMCPU,
|
mkResourceVirtualEnvironmentVMCPU,
|
||||||
@ -75,6 +78,8 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
}, []schema.ValueType{
|
}, []schema.ValueType{
|
||||||
schema.TypeBool,
|
schema.TypeBool,
|
||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeList,
|
||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
schema.TypeString,
|
schema.TypeString,
|
||||||
|
@ -13,6 +13,13 @@ import (
|
|||||||
"github.com/hashicorp/terraform/helper/validation"
|
"github.com/hashicorp/terraform/helper/validation"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func getBIOSValidator() schema.SchemaValidateFunc {
|
||||||
|
return validation.StringInSlice([]string{
|
||||||
|
"ovmf",
|
||||||
|
"seabios",
|
||||||
|
}, false)
|
||||||
|
}
|
||||||
|
|
||||||
func getContentTypeValidator() schema.SchemaValidateFunc {
|
func getContentTypeValidator() schema.SchemaValidateFunc {
|
||||||
return validation.StringInSlice([]string{
|
return validation.StringInSlice([]string{
|
||||||
"backup",
|
"backup",
|
||||||
|
Loading…
Reference in New Issue
Block a user