mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 19:12:59 +00:00
fix(vm): add interface
argument to cdrom
block (#429)
* fix(vm): add `interface` argument to `cdrom` block * doc formatting
This commit is contained in:
parent
e59b06e519
commit
b86fa239dd
@ -127,6 +127,9 @@ output "ubuntu_vm_public_key" {
|
||||
to `false`).
|
||||
- `file_id` - (Optional) A file ID for an ISO file (defaults to `cdrom` as
|
||||
in the physical drive).
|
||||
- `interface` - (Optional) A hardware interface to connect CDROM drive to,
|
||||
must be `ideN` (defaults to `ide3`). Note that `q35` machine type only
|
||||
supports `ide0` and `ide2`.
|
||||
- `clone` - (Optional) The cloning configuration.
|
||||
- `datastore_id` - (Optional) The identifier for the target datastore.
|
||||
- `node_name` - (Optional) The name of the source node (leave blank, if
|
||||
@ -167,16 +170,17 @@ output "ubuntu_vm_public_key" {
|
||||
to `0`).
|
||||
- `numa` - (Boolean) Enable/disable NUMA. (default to `false`)
|
||||
- `sockets` - (Optional) The number of CPU sockets (defaults to `1`).
|
||||
- `type` - (Optional) The emulated CPU type, it's recommended to use `x86-64-v2-AES` (defaults to `qemu64`).
|
||||
- `type` - (Optional) The emulated CPU type, it's recommended to
|
||||
use `x86-64-v2-AES` (defaults to `qemu64`).
|
||||
- `486` - Intel 486.
|
||||
- `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` - Intel Core Processor (Broadwell,
|
||||
2014).
|
||||
- `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` -
|
||||
Intel Core Processor (Broadwell, 2014).
|
||||
- `Cascadelake-Server`/`Cascadelake-Server-noTSX`/`Cascadelake-Server-v2`/`Cascadelake-Server-v4`/`Cascadelake-Server-v5` -
|
||||
Intel Xeon 32xx/42xx/52xx/62xx/82xx/92xx (
|
||||
2019).
|
||||
Intel Xeon 32xx/42xx/52xx/62xx/82xx/92xx (2019).
|
||||
- `Conroe` - Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006).
|
||||
- `Cooperlake`/`Cooperlake-v2`
|
||||
- `EPYC`/`EPYC-IBPB`/`EPYC-Milan`/`EPYC-Rome`/`EPYC-Rome-v2`/`EPYC-v3` - AMD EPYC Processor (2017).
|
||||
- `EPYC`/`EPYC-IBPB`/`EPYC-Milan`/`EPYC-Rome`/`EPYC-Rome-v2`/`EPYC-v3` -
|
||||
AMD EPYC Processor (2017).
|
||||
- `Haswell`/`Haswell-IBRS`/`Haswell-noTSX`/`Haswell-noTSX-IBRS` - Intel
|
||||
Core Processor (Haswell, 2013).
|
||||
- `Icelake-Client`/`Icelake-Client-noTSX`
|
||||
@ -195,12 +199,10 @@ output "ubuntu_vm_public_key" {
|
||||
- `SandyBridge`/`SandyBridge-IBRS` - Intel Xeon E312xx (Sandy Bridge,
|
||||
2011).
|
||||
- `SapphireRapids`
|
||||
- `Skylake-Client`/`Skylake-Client-IBRS`/`Skylake-Client-noTSX-IBRS`/`Skylake-Client-v4` - Intel Core
|
||||
Processor (
|
||||
Skylake, 2015).
|
||||
- `Skylake-Client`/`Skylake-Client-IBRS`/`Skylake-Client-noTSX-IBRS`/`Skylake-Client-v4` -
|
||||
Intel Core Processor (Skylake, 2015).
|
||||
- `Skylake-Server`/`Skylake-Server-IBRS`/`Skylake-Server-noTSX-IBRS`/`Skylake-Server-v4`/`Skylake-Server-v5` -
|
||||
Intel Xeon Processor (
|
||||
Skylake, 2016).
|
||||
Intel Xeon Processor (Skylake, 2016).
|
||||
- `Westmere`/`Westmere-IBRS` - Intel Westmere E56xx/L56xx/X56xx (
|
||||
Nehalem-C, 2010).
|
||||
- `athlon` - AMD Athlon.
|
||||
@ -215,7 +217,8 @@ output "ubuntu_vm_public_key" {
|
||||
- `phenom` - AMD Phenom (2010).
|
||||
- `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit
|
||||
variants).
|
||||
- `x86-64-v2`/`x86-64-v2-AES`/`x86-64-v3`/`x86-64-v4` See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
|
||||
- `x86-64-v2`/`x86-64-v2-AES`/`x86-64-v3`/`x86-64-v4`
|
||||
See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
|
||||
- `custom-<model>` - Custom CPU model. All `custom-<model>` values
|
||||
should be defined in `/etc/pve/virtual-guest/cpu-models.conf` file.
|
||||
- `units` - (Optional) The CPU units (defaults to `1024`).
|
||||
|
@ -1,6 +1,6 @@
|
||||
resource "proxmox_virtual_environment_network_linux_vlan" "vlan99" {
|
||||
node_name = "pve"
|
||||
name = "ens18.99"
|
||||
name = "eno0.99"
|
||||
|
||||
comment = "VLAN 99"
|
||||
}
|
||||
|
@ -400,6 +400,15 @@ func getSCSIHardwareValidator() schema.SchemaValidateDiagFunc {
|
||||
}, false))
|
||||
}
|
||||
|
||||
func getIDEInterfaceValidator() schema.SchemaValidateDiagFunc {
|
||||
return validation.ToDiagFunc(validation.StringInSlice([]string{
|
||||
"ide0",
|
||||
"ide1",
|
||||
"ide2",
|
||||
"ide3",
|
||||
}, false))
|
||||
}
|
||||
|
||||
// suppressIfListsAreEqualIgnoringOrder is a customdiff.SuppressionFunc that suppresses
|
||||
// changes to a list if the old and new lists are equal, ignoring the order of the
|
||||
// elements.
|
||||
@ -460,6 +469,7 @@ func getDiskInfo(resp *vms.GetResponseData, d *schema.ResourceData) map[string]*
|
||||
storageDevices["ide0"] = resp.IDEDevice0
|
||||
storageDevices["ide1"] = resp.IDEDevice1
|
||||
storageDevices["ide2"] = resp.IDEDevice2
|
||||
storageDevices["ide3"] = resp.IDEDevice3
|
||||
|
||||
storageDevices["sata0"] = resp.SATADevice0
|
||||
storageDevices["sata1"] = resp.SATADevice1
|
||||
|
@ -41,6 +41,7 @@ const (
|
||||
dvResourceVirtualEnvironmentVMBIOS = "seabios"
|
||||
dvResourceVirtualEnvironmentVMCDROMEnabled = false
|
||||
dvResourceVirtualEnvironmentVMCDROMFileID = ""
|
||||
dvResourceVirtualEnvironmentVMCDROMInterface = "ide3"
|
||||
dvResourceVirtualEnvironmentVMCloneDatastoreID = ""
|
||||
dvResourceVirtualEnvironmentVMCloneNodeName = ""
|
||||
dvResourceVirtualEnvironmentVMCloneFull = true
|
||||
@ -134,6 +135,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMCDROM = "cdrom"
|
||||
mkResourceVirtualEnvironmentVMCDROMEnabled = "enabled"
|
||||
mkResourceVirtualEnvironmentVMCDROMFileID = "file_id"
|
||||
mkResourceVirtualEnvironmentVMCDROMInterface = "interface"
|
||||
mkResourceVirtualEnvironmentVMClone = "clone"
|
||||
mkResourceVirtualEnvironmentVMCloneRetries = "retries"
|
||||
mkResourceVirtualEnvironmentVMCloneDatastoreID = "datastore_id"
|
||||
@ -377,8 +379,9 @@ func VM() *schema.Resource {
|
||||
DefaultFunc: func() (interface{}, error) {
|
||||
return []interface{}{
|
||||
map[string]interface{}{
|
||||
mkResourceVirtualEnvironmentVMCDROMEnabled: dvResourceVirtualEnvironmentVMCDROMEnabled,
|
||||
mkResourceVirtualEnvironmentVMCDROMFileID: dvResourceVirtualEnvironmentVMCDROMFileID,
|
||||
mkResourceVirtualEnvironmentVMCDROMEnabled: dvResourceVirtualEnvironmentVMCDROMEnabled,
|
||||
mkResourceVirtualEnvironmentVMCDROMFileID: dvResourceVirtualEnvironmentVMCDROMFileID,
|
||||
mkResourceVirtualEnvironmentVMCDROMInterface: dvResourceVirtualEnvironmentVMCDROMInterface,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
@ -397,6 +400,13 @@ func VM() *schema.Resource {
|
||||
Default: dvResourceVirtualEnvironmentVMCDROMFileID,
|
||||
ValidateDiagFunc: getFileIDValidator(),
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMCDROMInterface: {
|
||||
Type: schema.TypeString,
|
||||
Description: "The CDROM interface",
|
||||
Optional: true,
|
||||
Default: dvResourceVirtualEnvironmentVMCDROMInterface,
|
||||
ValidateDiagFunc: getIDEInterfaceValidator(),
|
||||
},
|
||||
},
|
||||
},
|
||||
MaxItems: 1,
|
||||
@ -1611,6 +1621,7 @@ func vmCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
||||
|
||||
cdromEnabled := cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled].(bool)
|
||||
cdromFileID := cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID].(string)
|
||||
cdromInterface := cdromBlock[mkResourceVirtualEnvironmentVMCDROMInterface].(string)
|
||||
|
||||
if cdromFileID == "" {
|
||||
cdromFileID = "cdrom"
|
||||
@ -1619,7 +1630,7 @@ func vmCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
||||
cdromMedia := "cdrom"
|
||||
|
||||
ideDevices = vms.CustomStorageDevices{
|
||||
"ide3": vms.CustomStorageDevice{
|
||||
cdromInterface: vms.CustomStorageDevice{
|
||||
Enabled: cdromEnabled,
|
||||
FileVolume: cdromFileID,
|
||||
Media: &cdromMedia,
|
||||
@ -2007,6 +2018,7 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
|
||||
cdromEnabled := cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled].(bool)
|
||||
cdromFileID := cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID].(string)
|
||||
cdromInterface := cdromBlock[mkResourceVirtualEnvironmentVMCDROMInterface].(string)
|
||||
|
||||
cdromCloudInitEnabled := false
|
||||
cdromCloudInitFileID := ""
|
||||
@ -2153,7 +2165,7 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
|
||||
var bootOrderConverted []string
|
||||
if cdromEnabled {
|
||||
bootOrderConverted = []string{"ide3"}
|
||||
bootOrderConverted = []string{cdromInterface}
|
||||
}
|
||||
|
||||
bootOrder := d.Get(mkResourceVirtualEnvironmentVMBootOrder).([]interface{})
|
||||
@ -2193,7 +2205,7 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
FileVolume: cdromCloudInitFileID,
|
||||
Media: &ideDevice2Media,
|
||||
},
|
||||
"ide3": vms.CustomStorageDevice{
|
||||
cdromInterface: vms.CustomStorageDevice{
|
||||
Enabled: cdromEnabled,
|
||||
FileVolume: cdromFileID,
|
||||
Media: &ideDevice2Media,
|
||||
@ -3236,24 +3248,43 @@ func vmReadCustom(
|
||||
diags = append(diags, diag.FromErr(err)...)
|
||||
}
|
||||
|
||||
// Compare the IDE devices to the CD-ROM and cloud-init configurations stored in the state.
|
||||
if vmConfig.IDEDevice3 != nil {
|
||||
// Compare the IDE devices to the CDROM configurations stored in the state.
|
||||
currentInterface := dvResourceVirtualEnvironmentVMCDROMInterface
|
||||
cdromIDEDevice := vmConfig.IDEDevice3
|
||||
|
||||
currentCDROM := d.Get(mkResourceVirtualEnvironmentVMCDROM).([]interface{})
|
||||
if len(currentCDROM) > 0 {
|
||||
currentBlock := currentCDROM[0].(map[string]interface{})
|
||||
currentInterface = currentBlock[mkResourceVirtualEnvironmentVMCDROMInterface].(string)
|
||||
}
|
||||
|
||||
switch currentInterface {
|
||||
case "ide0":
|
||||
cdromIDEDevice = vmConfig.IDEDevice0
|
||||
case "ide1":
|
||||
cdromIDEDevice = vmConfig.IDEDevice1
|
||||
case "ide2":
|
||||
cdromIDEDevice = vmConfig.IDEDevice2
|
||||
}
|
||||
|
||||
//nolint:nestif
|
||||
if cdromIDEDevice != nil {
|
||||
cdrom := make([]interface{}, 1)
|
||||
cdromBlock := map[string]interface{}{}
|
||||
currentCDROM := d.Get(mkResourceVirtualEnvironmentVMCDROM).([]interface{})
|
||||
|
||||
if len(clone) == 0 || len(currentCDROM) > 0 {
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled] = vmConfig.IDEDevice3.Enabled
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID] = vmConfig.IDEDevice3.FileVolume
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled] = cdromIDEDevice.Enabled
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID] = cdromIDEDevice.FileVolume
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMInterface] = currentInterface
|
||||
|
||||
if len(currentCDROM) > 0 {
|
||||
isCurrentCDROMFileId := currentCDROM[0].(map[string]interface{})
|
||||
currentBlock := currentCDROM[0].(map[string]interface{})
|
||||
|
||||
if isCurrentCDROMFileId[mkResourceVirtualEnvironmentVMCDROMFileID] == "" {
|
||||
if currentBlock[mkResourceVirtualEnvironmentVMCDROMFileID] == "" {
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID] = ""
|
||||
}
|
||||
|
||||
if isCurrentCDROMFileId[mkResourceVirtualEnvironmentVMCDROMEnabled] == false {
|
||||
if currentBlock[mkResourceVirtualEnvironmentVMCDROMEnabled] == false {
|
||||
cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled] = false
|
||||
}
|
||||
}
|
||||
@ -4502,9 +4533,27 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
|
||||
|
||||
cdromEnabled := cdromBlock[mkResourceVirtualEnvironmentVMCDROMEnabled].(bool)
|
||||
cdromFileID := cdromBlock[mkResourceVirtualEnvironmentVMCDROMFileID].(string)
|
||||
cdromInterface := cdromBlock[mkResourceVirtualEnvironmentVMCDROMInterface].(string)
|
||||
|
||||
old, _ := d.GetChange(mkResourceVirtualEnvironmentVMCDROM)
|
||||
|
||||
if len(old.([]interface{})) > 0 {
|
||||
oldList := old.([]interface{})[0]
|
||||
oldBlock := oldList.(map[string]interface{})
|
||||
|
||||
// If the interface is not set, use the default, for backward compatibility.
|
||||
oldInterface, ok := oldBlock[mkResourceVirtualEnvironmentVMCDROMInterface].(string)
|
||||
if !ok || oldInterface == "" {
|
||||
oldInterface = dvResourceVirtualEnvironmentVMCDROMInterface
|
||||
}
|
||||
|
||||
if oldInterface != cdromInterface {
|
||||
del = append(del, oldInterface)
|
||||
}
|
||||
}
|
||||
|
||||
if !cdromEnabled && cdromFileID == "" {
|
||||
del = append(del, "ide3")
|
||||
del = append(del, cdromInterface)
|
||||
}
|
||||
|
||||
if cdromFileID == "" {
|
||||
@ -4513,7 +4562,7 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
|
||||
|
||||
cdromMedia := "cdrom"
|
||||
|
||||
updateBody.IDEDevices["ide3"] = vms.CustomStorageDevice{
|
||||
updateBody.IDEDevices[cdromInterface] = vms.CustomStorageDevice{
|
||||
Enabled: cdromEnabled,
|
||||
FileVolume: cdromFileID,
|
||||
Media: &cdromMedia,
|
||||
|
Loading…
Reference in New Issue
Block a user