0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 18:42:58 +00:00

Add bios argument to VM resource

This commit is contained in:
Dan Petersen 2019-12-31 07:40:18 +01:00
parent 073030965a
commit 347b553202
5 changed files with 49 additions and 5 deletions

View File

@ -3,6 +3,7 @@
ENHANCEMENTS:
* 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 `tablet_device` argument
* resource/virtual_environment_vm: Add `vga` argument

View File

@ -339,6 +339,9 @@ This resource doesn't expose any additional attributes.
* `type` - (Optional) The QEMU agent interface type (defaults to `virtio`)
* `isa` - ISA Serial Port
* `virtio` - VirtIO (paravirtualized)
* `bios` - (Optional) The BIOS implementation (defaults to `seabios`)
* `ovmf` - OVMF (UEFI)
* `seabios` - SeaBIOS
* `cdrom` - (Optional) The CDROM configuration
* `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)

View File

@ -20,6 +20,7 @@ const (
dvResourceVirtualEnvironmentVMAgentEnabled = false
dvResourceVirtualEnvironmentVMAgentTrim = false
dvResourceVirtualEnvironmentVMAgentType = "virtio"
dvResourceVirtualEnvironmentVMBIOS = "seabios"
dvResourceVirtualEnvironmentVMCDROMEnabled = false
dvResourceVirtualEnvironmentVMCDROMFileID = ""
dvResourceVirtualEnvironmentVMCloudInitDNSDomain = ""
@ -65,6 +66,7 @@ const (
mkResourceVirtualEnvironmentVMAgentEnabled = "enabled"
mkResourceVirtualEnvironmentVMAgentTrim = "trim"
mkResourceVirtualEnvironmentVMAgentType = "type"
mkResourceVirtualEnvironmentVMBIOS = "bios"
mkResourceVirtualEnvironmentVMCDROM = "cdrom"
mkResourceVirtualEnvironmentVMCDROMEnabled = "enabled"
mkResourceVirtualEnvironmentVMCDROMFileID = "file_id"
@ -182,6 +184,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
MaxItems: 1,
MinItems: 0,
},
mkResourceVirtualEnvironmentVMBIOS: {
Type: schema.TypeString,
Description: "The BIOS implementation",
Optional: true,
Default: dvResourceVirtualEnvironmentVMBIOS,
ValidateFunc: getBIOSValidator(),
},
mkResourceVirtualEnvironmentVMCDROM: &schema.Schema{
Type: schema.TypeList,
Description: "The CDROM drive",
@ -804,6 +813,8 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
cdromBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMCDROM}, 0, true)
if err != nil {
@ -938,6 +949,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
TrimClonedDisks: &agentTrim,
Type: &agentType,
},
BIOS: &bios,
BootDisk: &bootDisk,
BootOrder: &bootOrder,
CloudInitConfig: cloudInitConfig,
@ -1414,7 +1426,15 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
if vmConfig.ACPI != nil {
d.Set(mkResourceVirtualEnvironmentVMACPI, bool(*vmConfig.ACPI))
} 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 {
@ -1432,7 +1452,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
if vmConfig.TabletDeviceEnabled != nil {
d.Set(mkResourceVirtualEnvironmentVMTabletDevice, bool(*vmConfig.TabletDeviceEnabled))
} 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.
@ -1631,19 +1652,22 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
if vmConfig.CPUCores != nil {
cpu[mkResourceVirtualEnvironmentVMCPUCores] = *vmConfig.CPUCores
} else {
cpu[mkResourceVirtualEnvironmentVMCPUCores] = 0
// Default value of "cores" is "1" according to the API documentation.
cpu[mkResourceVirtualEnvironmentVMCPUCores] = 1
}
if vmConfig.VirtualCPUCount != nil {
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = *vmConfig.VirtualCPUCount
} else {
// Default value of "vcpus" is "1" according to the API documentation.
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = 0
}
if vmConfig.CPUSockets != nil {
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = *vmConfig.CPUSockets
} else {
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = 0
// Default value of "sockets" is "1" according to the API documentation.
cpu[mkResourceVirtualEnvironmentVMCPUSockets] = 1
}
if vmConfig.CPUEmulation != nil {
@ -1668,7 +1692,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
if vmConfig.CPUUnits != nil {
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = *vmConfig.CPUUnits
} else {
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 0
// Default value of "cpuunits" is "1024" according to the API documentation.
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 1024
}
currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
@ -2045,6 +2070,7 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
// Prepare the new primitive configuration values.
acpi := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMACPI).(bool))
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
delete := []string{}
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(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))
body.ACPI = &acpi
body.BIOS = &bios
if description != "" {
body.Description = &description
@ -2068,6 +2095,7 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
body.TabletDeviceEnabled = &tabletDevice
if d.HasChange(mkResourceVirtualEnvironmentVMACPI) ||
d.HasChange(mkResourceVirtualEnvironmentVMBIOS) ||
d.HasChange(mkResourceVirtualEnvironmentVMKeyboardLayout) ||
d.HasChange(mkResourceVirtualEnvironmentVMOSType) ||
d.HasChange(mkResourceVirtualEnvironmentVMTabletDevice) {

View File

@ -29,6 +29,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
testOptionalArguments(t, s, []string{
mkResourceVirtualEnvironmentVMACPI,
mkResourceVirtualEnvironmentVMBIOS,
mkResourceVirtualEnvironmentVMCDROM,
mkResourceVirtualEnvironmentVMCloudInit,
mkResourceVirtualEnvironmentVMCPU,
@ -54,6 +55,8 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
testSchemaValueTypes(t, s, []string{
mkResourceVirtualEnvironmentVMACPI,
mkResourceVirtualEnvironmentVMAgent,
mkResourceVirtualEnvironmentVMBIOS,
mkResourceVirtualEnvironmentVMCDROM,
mkResourceVirtualEnvironmentVMCloudInit,
mkResourceVirtualEnvironmentVMCPU,
@ -75,6 +78,8 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
}, []schema.ValueType{
schema.TypeBool,
schema.TypeList,
schema.TypeString,
schema.TypeList,
schema.TypeList,
schema.TypeList,
schema.TypeString,

View File

@ -13,6 +13,13 @@ import (
"github.com/hashicorp/terraform/helper/validation"
)
func getBIOSValidator() schema.SchemaValidateFunc {
return validation.StringInSlice([]string{
"ovmf",
"seabios",
}, false)
}
func getContentTypeValidator() schema.SchemaValidateFunc {
return validation.StringInSlice([]string{
"backup",