mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-04 12:32:59 +00:00
feat(vm): Add scsi_hardware field (#282)
This commit is contained in:
parent
d8c1fb3573
commit
f0f31eee47
@ -107,6 +107,7 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMVGAMemory = 16
|
dvResourceVirtualEnvironmentVMVGAMemory = 16
|
||||||
dvResourceVirtualEnvironmentVMVGAType = "std"
|
dvResourceVirtualEnvironmentVMVGAType = "std"
|
||||||
dvResourceVirtualEnvironmentVMVMID = -1
|
dvResourceVirtualEnvironmentVMVMID = -1
|
||||||
|
dvResourceVirtualEnvironmentVMSCSIHardware = "virtio-scsi-pci"
|
||||||
|
|
||||||
maxResourceVirtualEnvironmentVMAudioDevices = 1
|
maxResourceVirtualEnvironmentVMAudioDevices = 1
|
||||||
maxResourceVirtualEnvironmentVMNetworkDevices = 8
|
maxResourceVirtualEnvironmentVMNetworkDevices = 8
|
||||||
@ -226,6 +227,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMVGAMemory = "memory"
|
mkResourceVirtualEnvironmentVMVGAMemory = "memory"
|
||||||
mkResourceVirtualEnvironmentVMVGAType = "type"
|
mkResourceVirtualEnvironmentVMVGAType = "type"
|
||||||
mkResourceVirtualEnvironmentVMVMID = "vm_id"
|
mkResourceVirtualEnvironmentVMVMID = "vm_id"
|
||||||
|
mkResourceVirtualEnvironmentVMSCSIHardware = "scsi_hardware"
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceVirtualEnvironmentVM() *schema.Resource {
|
func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||||
@ -1194,6 +1196,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
Default: dvResourceVirtualEnvironmentVMVMID,
|
Default: dvResourceVirtualEnvironmentVMVMID,
|
||||||
ValidateDiagFunc: getVMIDValidator(),
|
ValidateDiagFunc: getVMIDValidator(),
|
||||||
},
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMSCSIHardware: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Description: "The SCSI hardware type",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMSCSIHardware,
|
||||||
|
ValidateDiagFunc: getSCSIHardwareValidator(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
CreateContext: resourceVirtualEnvironmentVMCreate,
|
CreateContext: resourceVirtualEnvironmentVMCreate,
|
||||||
ReadContext: resourceVirtualEnvironmentVMRead,
|
ReadContext: resourceVirtualEnvironmentVMRead,
|
||||||
@ -1393,6 +1402,7 @@ func resourceVirtualEnvironmentVMCreateClone(
|
|||||||
|
|
||||||
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||||
|
scsiHardware := d.Get(mkResourceVirtualEnvironmentVMSCSIHardware).(string)
|
||||||
cdrom := d.Get(mkResourceVirtualEnvironmentVMCDROM).([]interface{})
|
cdrom := d.Get(mkResourceVirtualEnvironmentVMCDROM).([]interface{})
|
||||||
cpu := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
|
cpu := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
|
||||||
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
||||||
@ -1444,6 +1454,10 @@ func resourceVirtualEnvironmentVMCreateClone(
|
|||||||
updateBody.BIOS = &bios
|
updateBody.BIOS = &bios
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if scsiHardware != dvResourceVirtualEnvironmentVMSCSIHardware {
|
||||||
|
updateBody.SCSIHardware = &scsiHardware
|
||||||
|
}
|
||||||
|
|
||||||
if len(cdrom) > 0 || len(initialization) > 0 {
|
if len(cdrom) > 0 || len(initialization) > 0 {
|
||||||
ideDevices = proxmox.CustomStorageDevices{
|
ideDevices = proxmox.CustomStorageDevices{
|
||||||
"ide0": proxmox.CustomStorageDevice{
|
"ide0": proxmox.CustomStorageDevice{
|
||||||
@ -1951,7 +1965,7 @@ func resourceVirtualEnvironmentVMCreateCustom(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scsiHardware := "virtio-scsi-pci"
|
scsiHardware := d.Get(mkResourceVirtualEnvironmentVMSCSIHardware).(string)
|
||||||
|
|
||||||
createBody := &proxmox.VirtualEnvironmentVMCreateRequestBody{
|
createBody := &proxmox.VirtualEnvironmentVMCreateRequestBody{
|
||||||
ACPI: &acpi,
|
ACPI: &acpi,
|
||||||
@ -3647,6 +3661,16 @@ func resourceVirtualEnvironmentVMReadCustom(
|
|||||||
diags = append(diags, diag.FromErr(err)...)
|
diags = append(diags, diag.FromErr(err)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compare SCSI hardware type
|
||||||
|
scsiHardware := d.Get(mkResourceVirtualEnvironmentVMSCSIHardware).(string)
|
||||||
|
|
||||||
|
if len(clone) == 0 || scsiHardware != dvResourceVirtualEnvironmentVMSCSIHardware {
|
||||||
|
if vmConfig.SCSIHardware != nil {
|
||||||
|
err := d.Set(mkResourceVirtualEnvironmentVMSCSIHardware, *vmConfig.SCSIHardware)
|
||||||
|
diags = append(diags, diag.FromErr(err)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
diags = append(
|
diags = append(
|
||||||
diags,
|
diags,
|
||||||
resourceVirtualEnvironmentVMReadNetworkValues(ctx, d, m, vmID, vmConfig)...)
|
resourceVirtualEnvironmentVMReadNetworkValues(ctx, d, m, vmID, vmConfig)...)
|
||||||
@ -4334,6 +4358,14 @@ func resourceVirtualEnvironmentVMUpdate(
|
|||||||
rebootRequired = true
|
rebootRequired = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prepare the new SCSI hardware type
|
||||||
|
if d.HasChange(mkResourceVirtualEnvironmentVMSCSIHardware) {
|
||||||
|
scsiHardware := d.Get(mkResourceVirtualEnvironmentVMSCSIHardware).(string)
|
||||||
|
updateBody.SCSIHardware = &scsiHardware
|
||||||
|
|
||||||
|
rebootRequired = true
|
||||||
|
}
|
||||||
|
|
||||||
// Update the configuration now that everything has been prepared.
|
// Update the configuration now that everything has been prepared.
|
||||||
updateBody.Delete = del
|
updateBody.Delete = del
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
mkResourceVirtualEnvironmentVMTabletDevice,
|
mkResourceVirtualEnvironmentVMTabletDevice,
|
||||||
mkResourceVirtualEnvironmentVMTemplate,
|
mkResourceVirtualEnvironmentVMTemplate,
|
||||||
mkResourceVirtualEnvironmentVMVMID,
|
mkResourceVirtualEnvironmentVMVMID,
|
||||||
|
mkResourceVirtualEnvironmentVMSCSIHardware,
|
||||||
})
|
})
|
||||||
|
|
||||||
testComputedAttributes(t, s, []string{
|
testComputedAttributes(t, s, []string{
|
||||||
@ -89,6 +90,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
mkResourceVirtualEnvironmentVMTabletDevice: schema.TypeBool,
|
mkResourceVirtualEnvironmentVMTabletDevice: schema.TypeBool,
|
||||||
mkResourceVirtualEnvironmentVMTemplate: schema.TypeBool,
|
mkResourceVirtualEnvironmentVMTemplate: schema.TypeBool,
|
||||||
mkResourceVirtualEnvironmentVMVMID: schema.TypeInt,
|
mkResourceVirtualEnvironmentVMVMID: schema.TypeInt,
|
||||||
|
mkResourceVirtualEnvironmentVMSCSIHardware: schema.TypeString,
|
||||||
})
|
})
|
||||||
|
|
||||||
agentSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMAgent)
|
agentSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMAgent)
|
||||||
|
@ -338,6 +338,17 @@ func getVGATypeValidator() schema.SchemaValidateDiagFunc {
|
|||||||
}, false))
|
}, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getSCSIHardwareValidator() schema.SchemaValidateDiagFunc {
|
||||||
|
return validation.ToDiagFunc(validation.StringInSlice([]string{
|
||||||
|
"lsi",
|
||||||
|
"lsi53c810",
|
||||||
|
"virtio-scsi-pci",
|
||||||
|
"virtio-scsi-single",
|
||||||
|
"megasas",
|
||||||
|
"pvscsi",
|
||||||
|
}, false))
|
||||||
|
}
|
||||||
|
|
||||||
//nolint:unused
|
//nolint:unused
|
||||||
func getVLANIDsValidator() schema.SchemaValidateDiagFunc {
|
func getVLANIDsValidator() schema.SchemaValidateDiagFunc {
|
||||||
return validation.ToDiagFunc(func(i interface{}, k string) (ws []string, es []error) {
|
return validation.ToDiagFunc(func(i interface{}, k string) (ws []string, es []error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user