mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-08-23 03:48:35 +00:00
feat(vm): add support for "args" flag for VM (#205)
* feat: add support for "args" flag for VM * switch from args to kvmarguments, update type * cosmetics: `kvmarguments` -> `kvm_arguments` also update doc to match description from the official PVE documentation. Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
9101977dc8
commit
8bd3fd7b1d
@ -255,6 +255,7 @@ output "ubuntu_vm_public_key" {
|
|||||||
* `sl` - Slovenian.
|
* `sl` - Slovenian.
|
||||||
* `sv` - Swedish.
|
* `sv` - Swedish.
|
||||||
* `tr` - Turkish.
|
* `tr` - Turkish.
|
||||||
|
* `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm.
|
||||||
* `machine` - (Optional) The VM machine type (defaults to `i440fx`).
|
* `machine` - (Optional) The VM machine type (defaults to `i440fx`).
|
||||||
* `i440fx` - Standard PC (i440FX + PIIX, 1996).
|
* `i440fx` - Standard PC (i440FX + PIIX, 1996).
|
||||||
* `q35` - Standard PC (Q35 + ICH9, 2009).
|
* `q35` - Standard PC (Q35 + ICH9, 2009).
|
||||||
|
@ -257,7 +257,7 @@ type VirtualEnvironmentVMCreateRequestBody struct {
|
|||||||
Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"`
|
Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"`
|
||||||
IDEDevices CustomStorageDevices `json:"ide,omitempty" url:",omitempty"`
|
IDEDevices CustomStorageDevices `json:"ide,omitempty" url:",omitempty"`
|
||||||
KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"`
|
KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"`
|
||||||
KVMArguments CustomLineBreakSeparatedList `json:"args,omitempty" url:"args,omitempty,space"`
|
KVMArguments *string `json:"args,omitempty" url:"args,omitempty,space"`
|
||||||
KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"`
|
KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"`
|
||||||
LocalTime *CustomBool `json:"localtime,omitempty" url:"localtime,omitempty,int"`
|
LocalTime *CustomBool `json:"localtime,omitempty" url:"localtime,omitempty,int"`
|
||||||
Lock *string `json:"lock,omitempty" url:"lock,omitempty"`
|
Lock *string `json:"lock,omitempty" url:"lock,omitempty"`
|
||||||
@ -389,7 +389,7 @@ type VirtualEnvironmentVMGetResponseData struct {
|
|||||||
IPConfig6 *CustomCloudInitIPConfig `json:"ipconfig6,omitempty"`
|
IPConfig6 *CustomCloudInitIPConfig `json:"ipconfig6,omitempty"`
|
||||||
IPConfig7 *CustomCloudInitIPConfig `json:"ipconfig7,omitempty"`
|
IPConfig7 *CustomCloudInitIPConfig `json:"ipconfig7,omitempty"`
|
||||||
KeyboardLayout *string `json:"keyboard,omitempty"`
|
KeyboardLayout *string `json:"keyboard,omitempty"`
|
||||||
KVMArguments *CustomLineBreakSeparatedList `json:"args,omitempty"`
|
KVMArguments *string `json:"args,omitempty"`
|
||||||
KVMEnabled *CustomBool `json:"kvm,omitempty"`
|
KVMEnabled *CustomBool `json:"kvm,omitempty"`
|
||||||
LocalTime *CustomBool `json:"localtime,omitempty"`
|
LocalTime *CustomBool `json:"localtime,omitempty"`
|
||||||
Lock *string `json:"lock,omitempty"`
|
Lock *string `json:"lock,omitempty"`
|
||||||
|
@ -79,6 +79,7 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID = ""
|
dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID = ""
|
||||||
dvResourceVirtualEnvironmentVMInitializationType = ""
|
dvResourceVirtualEnvironmentVMInitializationType = ""
|
||||||
dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us"
|
dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us"
|
||||||
|
dvResourceVirtualEnvironmentVMKVMArguments = ""
|
||||||
dvResourceVirtualEnvironmentVMMachineType = ""
|
dvResourceVirtualEnvironmentVMMachineType = ""
|
||||||
dvResourceVirtualEnvironmentVMMemoryDedicated = 512
|
dvResourceVirtualEnvironmentVMMemoryDedicated = 512
|
||||||
dvResourceVirtualEnvironmentVMMemoryFloating = 0
|
dvResourceVirtualEnvironmentVMMemoryFloating = 0
|
||||||
@ -188,6 +189,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses"
|
mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses"
|
||||||
mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses"
|
mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses"
|
||||||
mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout"
|
mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout"
|
||||||
|
mkResourceVirtualEnvironmentVMKVMArguments = "kvm_arguments"
|
||||||
mkResourceVirtualEnvironmentVMMachine = "machine"
|
mkResourceVirtualEnvironmentVMMachine = "machine"
|
||||||
mkResourceVirtualEnvironmentVMMACAddresses = "mac_addresses"
|
mkResourceVirtualEnvironmentVMMACAddresses = "mac_addresses"
|
||||||
mkResourceVirtualEnvironmentVMMemory = "memory"
|
mkResourceVirtualEnvironmentVMMemory = "memory"
|
||||||
@ -295,6 +297,12 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
MaxItems: 1,
|
MaxItems: 1,
|
||||||
MinItems: 0,
|
MinItems: 0,
|
||||||
},
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMKVMArguments: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Description: "The args implementation",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMKVMArguments,
|
||||||
|
},
|
||||||
mkResourceVirtualEnvironmentVMAudioDevice: {
|
mkResourceVirtualEnvironmentVMAudioDevice: {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Description: "The audio devices",
|
Description: "The audio devices",
|
||||||
@ -1362,6 +1370,7 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso
|
|||||||
}
|
}
|
||||||
|
|
||||||
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
|
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(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{})
|
||||||
@ -1403,6 +1412,10 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if kvmArguments != dvResourceVirtualEnvironmentVMKVMArguments {
|
||||||
|
updateBody.KVMArguments = &kvmArguments
|
||||||
|
}
|
||||||
|
|
||||||
if bios != dvResourceVirtualEnvironmentVMBIOS {
|
if bios != dvResourceVirtualEnvironmentVMBIOS {
|
||||||
updateBody.BIOS = &bios
|
updateBody.BIOS = &bios
|
||||||
}
|
}
|
||||||
@ -1742,6 +1755,8 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res
|
|||||||
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
|
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
|
||||||
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
|
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
|
||||||
|
|
||||||
|
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||||
|
|
||||||
audioDevices, err := resourceVirtualEnvironmentVMGetAudioDeviceList(d)
|
audioDevices, err := resourceVirtualEnvironmentVMGetAudioDeviceList(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@ -1924,6 +1939,7 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res
|
|||||||
FloatingMemory: &memoryFloating,
|
FloatingMemory: &memoryFloating,
|
||||||
IDEDevices: ideDevices,
|
IDEDevices: ideDevices,
|
||||||
KeyboardLayout: &keyboardLayout,
|
KeyboardLayout: &keyboardLayout,
|
||||||
|
KVMArguments: &kvmArguments,
|
||||||
NetworkDevices: networkDeviceObjects,
|
NetworkDevices: networkDeviceObjects,
|
||||||
OSType: &operatingSystemType,
|
OSType: &operatingSystemType,
|
||||||
PCIDevices: pciDeviceObjects,
|
PCIDevices: pciDeviceObjects,
|
||||||
@ -3239,6 +3255,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou
|
|||||||
diags = append(diags, diag.FromErr(err)...)
|
diags = append(diags, diag.FromErr(err)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compare the operating system configuration to the one stored in the state.
|
||||||
|
kvmArguments := map[string]interface{}{}
|
||||||
|
|
||||||
|
if vmConfig.KVMArguments != nil {
|
||||||
|
kvmArguments[mkResourceVirtualEnvironmentVMKVMArguments] = *vmConfig.KVMArguments
|
||||||
|
} else {
|
||||||
|
kvmArguments[mkResourceVirtualEnvironmentVMKVMArguments] = ""
|
||||||
|
}
|
||||||
|
|
||||||
// Compare the memory configuration to the one stored in the state.
|
// Compare the memory configuration to the one stored in the state.
|
||||||
memory := map[string]interface{}{}
|
memory := map[string]interface{}{}
|
||||||
|
|
||||||
@ -3568,6 +3593,18 @@ func resourceVirtualEnvironmentVMReadPrimitiveValues(d *schema.ResourceData, vmC
|
|||||||
diags = append(diags, diag.FromErr(err)...)
|
diags = append(diags, diag.FromErr(err)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currentkvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||||
|
|
||||||
|
if len(clone) == 0 || currentkvmArguments != dvResourceVirtualEnvironmentVMKVMArguments {
|
||||||
|
if vmConfig.KVMArguments != nil {
|
||||||
|
err = d.Set(mkResourceVirtualEnvironmentVMKVMArguments, *vmConfig.KVMArguments)
|
||||||
|
} else {
|
||||||
|
// Default value of "args" is "" according to the API documentation.
|
||||||
|
err = d.Set(mkResourceVirtualEnvironmentVMKVMArguments, "")
|
||||||
|
}
|
||||||
|
diags = append(diags, diag.FromErr(err)...)
|
||||||
|
}
|
||||||
|
|
||||||
currentBIOS := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
currentBIOS := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
|
|
||||||
if len(clone) == 0 || currentBIOS != dvResourceVirtualEnvironmentVMBIOS {
|
if len(clone) == 0 || currentBIOS != dvResourceVirtualEnvironmentVMBIOS {
|
||||||
@ -3726,6 +3763,12 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD
|
|||||||
rebootRequired = true
|
rebootRequired = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChange(mkResourceVirtualEnvironmentVMKVMArguments) {
|
||||||
|
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||||
|
updateBody.KVMArguments = &kvmArguments
|
||||||
|
rebootRequired = true
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange(mkResourceVirtualEnvironmentVMBIOS) {
|
if d.HasChange(mkResourceVirtualEnvironmentVMBIOS) {
|
||||||
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||||
updateBody.BIOS = &bios
|
updateBody.BIOS = &bios
|
||||||
|
@ -40,6 +40,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
mkResourceVirtualEnvironmentVMInitialization,
|
mkResourceVirtualEnvironmentVMInitialization,
|
||||||
mkResourceVirtualEnvironmentVMHostPCI,
|
mkResourceVirtualEnvironmentVMHostPCI,
|
||||||
mkResourceVirtualEnvironmentVMKeyboardLayout,
|
mkResourceVirtualEnvironmentVMKeyboardLayout,
|
||||||
|
mkResourceVirtualEnvironmentVMKVMArguments,
|
||||||
mkResourceVirtualEnvironmentVMMachine,
|
mkResourceVirtualEnvironmentVMMachine,
|
||||||
mkResourceVirtualEnvironmentVMMemory,
|
mkResourceVirtualEnvironmentVMMemory,
|
||||||
mkResourceVirtualEnvironmentVMName,
|
mkResourceVirtualEnvironmentVMName,
|
||||||
@ -74,6 +75,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
|||||||
mkResourceVirtualEnvironmentVMIPv4Addresses: schema.TypeList,
|
mkResourceVirtualEnvironmentVMIPv4Addresses: schema.TypeList,
|
||||||
mkResourceVirtualEnvironmentVMIPv6Addresses: schema.TypeList,
|
mkResourceVirtualEnvironmentVMIPv6Addresses: schema.TypeList,
|
||||||
mkResourceVirtualEnvironmentVMKeyboardLayout: schema.TypeString,
|
mkResourceVirtualEnvironmentVMKeyboardLayout: schema.TypeString,
|
||||||
|
mkResourceVirtualEnvironmentVMKVMArguments: schema.TypeString,
|
||||||
mkResourceVirtualEnvironmentVMMachine: schema.TypeString,
|
mkResourceVirtualEnvironmentVMMachine: schema.TypeString,
|
||||||
mkResourceVirtualEnvironmentVMMemory: schema.TypeList,
|
mkResourceVirtualEnvironmentVMMemory: schema.TypeList,
|
||||||
mkResourceVirtualEnvironmentVMName: schema.TypeString,
|
mkResourceVirtualEnvironmentVMName: schema.TypeString,
|
||||||
|
Loading…
Reference in New Issue
Block a user