mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-08-22 19:38: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.
|
||||
* `sv` - Swedish.
|
||||
* `tr` - Turkish.
|
||||
* `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm.
|
||||
* `machine` - (Optional) The VM machine type (defaults to `i440fx`).
|
||||
* `i440fx` - Standard PC (i440FX + PIIX, 1996).
|
||||
* `q35` - Standard PC (Q35 + ICH9, 2009).
|
||||
|
@ -257,7 +257,7 @@ type VirtualEnvironmentVMCreateRequestBody struct {
|
||||
Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"`
|
||||
IDEDevices CustomStorageDevices `json:"ide,omitempty" url:",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"`
|
||||
LocalTime *CustomBool `json:"localtime,omitempty" url:"localtime,omitempty,int"`
|
||||
Lock *string `json:"lock,omitempty" url:"lock,omitempty"`
|
||||
@ -389,7 +389,7 @@ type VirtualEnvironmentVMGetResponseData struct {
|
||||
IPConfig6 *CustomCloudInitIPConfig `json:"ipconfig6,omitempty"`
|
||||
IPConfig7 *CustomCloudInitIPConfig `json:"ipconfig7,omitempty"`
|
||||
KeyboardLayout *string `json:"keyboard,omitempty"`
|
||||
KVMArguments *CustomLineBreakSeparatedList `json:"args,omitempty"`
|
||||
KVMArguments *string `json:"args,omitempty"`
|
||||
KVMEnabled *CustomBool `json:"kvm,omitempty"`
|
||||
LocalTime *CustomBool `json:"localtime,omitempty"`
|
||||
Lock *string `json:"lock,omitempty"`
|
||||
|
@ -79,6 +79,7 @@ const (
|
||||
dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID = ""
|
||||
dvResourceVirtualEnvironmentVMInitializationType = ""
|
||||
dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us"
|
||||
dvResourceVirtualEnvironmentVMKVMArguments = ""
|
||||
dvResourceVirtualEnvironmentVMMachineType = ""
|
||||
dvResourceVirtualEnvironmentVMMemoryDedicated = 512
|
||||
dvResourceVirtualEnvironmentVMMemoryFloating = 0
|
||||
@ -188,6 +189,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses"
|
||||
mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses"
|
||||
mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout"
|
||||
mkResourceVirtualEnvironmentVMKVMArguments = "kvm_arguments"
|
||||
mkResourceVirtualEnvironmentVMMachine = "machine"
|
||||
mkResourceVirtualEnvironmentVMMACAddresses = "mac_addresses"
|
||||
mkResourceVirtualEnvironmentVMMemory = "memory"
|
||||
@ -295,6 +297,12 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||
MaxItems: 1,
|
||||
MinItems: 0,
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMKVMArguments: {
|
||||
Type: schema.TypeString,
|
||||
Description: "The args implementation",
|
||||
Optional: true,
|
||||
Default: dvResourceVirtualEnvironmentVMKVMArguments,
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMAudioDevice: {
|
||||
Type: schema.TypeList,
|
||||
Description: "The audio devices",
|
||||
@ -1362,6 +1370,7 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso
|
||||
}
|
||||
|
||||
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||
cdrom := d.Get(mkResourceVirtualEnvironmentVMCDROM).([]interface{})
|
||||
cpu := d.Get(mkResourceVirtualEnvironmentVMCPU).([]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 {
|
||||
updateBody.BIOS = &bios
|
||||
}
|
||||
@ -1742,6 +1755,8 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res
|
||||
agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool))
|
||||
agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string)
|
||||
|
||||
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||
|
||||
audioDevices, err := resourceVirtualEnvironmentVMGetAudioDeviceList(d)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
@ -1924,6 +1939,7 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res
|
||||
FloatingMemory: &memoryFloating,
|
||||
IDEDevices: ideDevices,
|
||||
KeyboardLayout: &keyboardLayout,
|
||||
KVMArguments: &kvmArguments,
|
||||
NetworkDevices: networkDeviceObjects,
|
||||
OSType: &operatingSystemType,
|
||||
PCIDevices: pciDeviceObjects,
|
||||
@ -3239,6 +3255,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou
|
||||
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.
|
||||
memory := map[string]interface{}{}
|
||||
|
||||
@ -3568,6 +3593,18 @@ func resourceVirtualEnvironmentVMReadPrimitiveValues(d *schema.ResourceData, vmC
|
||||
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)
|
||||
|
||||
if len(clone) == 0 || currentBIOS != dvResourceVirtualEnvironmentVMBIOS {
|
||||
@ -3726,6 +3763,12 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD
|
||||
rebootRequired = true
|
||||
}
|
||||
|
||||
if d.HasChange(mkResourceVirtualEnvironmentVMKVMArguments) {
|
||||
kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string)
|
||||
updateBody.KVMArguments = &kvmArguments
|
||||
rebootRequired = true
|
||||
}
|
||||
|
||||
if d.HasChange(mkResourceVirtualEnvironmentVMBIOS) {
|
||||
bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string)
|
||||
updateBody.BIOS = &bios
|
||||
|
@ -40,6 +40,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
||||
mkResourceVirtualEnvironmentVMInitialization,
|
||||
mkResourceVirtualEnvironmentVMHostPCI,
|
||||
mkResourceVirtualEnvironmentVMKeyboardLayout,
|
||||
mkResourceVirtualEnvironmentVMKVMArguments,
|
||||
mkResourceVirtualEnvironmentVMMachine,
|
||||
mkResourceVirtualEnvironmentVMMemory,
|
||||
mkResourceVirtualEnvironmentVMName,
|
||||
@ -74,6 +75,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
||||
mkResourceVirtualEnvironmentVMIPv4Addresses: schema.TypeList,
|
||||
mkResourceVirtualEnvironmentVMIPv6Addresses: schema.TypeList,
|
||||
mkResourceVirtualEnvironmentVMKeyboardLayout: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMKVMArguments: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMMachine: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMMemory: schema.TypeList,
|
||||
mkResourceVirtualEnvironmentVMName: schema.TypeString,
|
||||
|
Loading…
Reference in New Issue
Block a user