0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-05 05:24:01 +00:00

fix(lxc,vm): fix panics when a resource block is empty (#1345)

* fix(lxc,vm): fix panics when a resource block is empty

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2024-06-02 20:41:50 -04:00 committed by GitHub
parent eaeff08571
commit 9bbbf8db39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 27 deletions

View File

@ -950,7 +950,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
initialization := d.Get(mkInitialization).([]interface{}) initialization := d.Get(mkInitialization).([]interface{})
initializationHostname := "" initializationHostname := ""
if len(initialization) > 0 { if len(initialization) > 0 && initialization[0] != nil {
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationHostname = initializationBlock[mkInitializationHostname].(string) initializationHostname = initializationBlock[mkInitializationHostname].(string)
} }
@ -1024,7 +1024,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
console := d.Get(mkConsole).([]interface{}) console := d.Get(mkConsole).([]interface{})
if len(console) > 0 { if len(console) > 0 && console[0] != nil {
consoleBlock := console[0].(map[string]interface{}) consoleBlock := console[0].(map[string]interface{})
consoleEnabled := types.CustomBool( consoleEnabled := types.CustomBool(
@ -1040,7 +1040,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
cpu := d.Get(mkCPU).([]interface{}) cpu := d.Get(mkCPU).([]interface{})
if len(cpu) > 0 { if len(cpu) > 0 && cpu[0] != nil {
cpuBlock := cpu[0].(map[string]interface{}) cpuBlock := cpu[0].(map[string]interface{})
cpuArchitecture := cpuBlock[mkCPUArchitecture].(string) cpuArchitecture := cpuBlock[mkCPUArchitecture].(string)
@ -1066,11 +1066,11 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
var initializationIPConfigIPv6Gateway []string var initializationIPConfigIPv6Gateway []string
if len(initialization) > 0 { if len(initialization) > 0 && initialization[0] != nil {
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationDNS := initializationBlock[mkInitializationDNS].([]interface{}) initializationDNS := initializationBlock[mkInitializationDNS].([]interface{})
if len(initializationDNS) > 0 { if len(initializationDNS) > 0 && initializationDNS[0] != nil {
initializationDNSBlock := initializationDNS[0].(map[string]interface{}) initializationDNSBlock := initializationDNS[0].(map[string]interface{})
initializationDNSDomain := initializationDNSBlock[mkInitializationDNSDomain].(string) initializationDNSDomain := initializationDNSBlock[mkInitializationDNSDomain].(string)
updateBody.DNSDomain = &initializationDNSDomain updateBody.DNSDomain = &initializationDNSDomain
@ -1099,7 +1099,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
configBlock := c.(map[string]interface{}) configBlock := c.(map[string]interface{})
ipv4 := configBlock[mkInitializationIPConfigIPv4].([]interface{}) ipv4 := configBlock[mkInitializationIPConfigIPv4].([]interface{})
if len(ipv4) > 0 { if len(ipv4) > 0 && ipv4[0] != nil {
ipv4Block := ipv4[0].(map[string]interface{}) ipv4Block := ipv4[0].(map[string]interface{})
initializationIPConfigIPv4Address = append( initializationIPConfigIPv4Address = append(
@ -1118,7 +1118,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
ipv6 := configBlock[mkInitializationIPConfigIPv6].([]interface{}) ipv6 := configBlock[mkInitializationIPConfigIPv6].([]interface{})
if len(ipv6) > 0 { if len(ipv6) > 0 && ipv6[0] != nil {
ipv6Block := ipv6[0].(map[string]interface{}) ipv6Block := ipv6[0].(map[string]interface{})
initializationIPConfigIPv6Address = append( initializationIPConfigIPv6Address = append(
@ -1138,7 +1138,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
initializationUserAccount := initializationBlock[mkInitializationUserAccount].([]interface{}) initializationUserAccount := initializationBlock[mkInitializationUserAccount].([]interface{})
if len(initializationUserAccount) > 0 { if len(initializationUserAccount) > 0 && initializationUserAccount[0] != nil {
initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{}) initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{})
keys := initializationUserAccountBlock[mkInitializationUserAccountKeys].([]interface{}) keys := initializationUserAccountBlock[mkInitializationUserAccountKeys].([]interface{})
@ -1169,7 +1169,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
memory := d.Get(mkMemory).([]interface{}) memory := d.Get(mkMemory).([]interface{})
if len(memory) > 0 { if len(memory) > 0 && memory[0] != nil {
memoryBlock := memory[0].(map[string]interface{}) memoryBlock := memory[0].(map[string]interface{})
memoryDedicated := memoryBlock[mkMemoryDedicated].(int) memoryDedicated := memoryBlock[mkMemoryDedicated].(int)
@ -1268,7 +1268,7 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
operatingSystem := d.Get(mkOperatingSystem).([]interface{}) operatingSystem := d.Get(mkOperatingSystem).([]interface{})
if len(operatingSystem) > 0 { if len(operatingSystem) > 0 && operatingSystem[0] != nil {
operatingSystemBlock := operatingSystem[0].(map[string]interface{}) operatingSystemBlock := operatingSystem[0].(map[string]interface{})
operatingSystemTemplateFileID := operatingSystemBlock[mkOperatingSystemTemplateFileID].(string) operatingSystemTemplateFileID := operatingSystemBlock[mkOperatingSystemTemplateFileID].(string)
@ -1401,11 +1401,11 @@ func containerCreateCustom(ctx context.Context, d *schema.ResourceData, m interf
initializationUserAccountKeys := containers.CustomSSHKeys{} initializationUserAccountKeys := containers.CustomSSHKeys{}
initializationUserAccountPassword := dvInitializationUserAccountPassword initializationUserAccountPassword := dvInitializationUserAccountPassword
if len(initialization) > 0 { if len(initialization) > 0 && initialization[0] != nil {
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationDNS := initializationBlock[mkInitializationDNS].([]interface{}) initializationDNS := initializationBlock[mkInitializationDNS].([]interface{})
if len(initializationDNS) > 0 { if len(initializationDNS) > 0 && initializationDNS[0] != nil {
initializationDNSBlock := initializationDNS[0].(map[string]interface{}) initializationDNSBlock := initializationDNS[0].(map[string]interface{})
initializationDNSDomain = initializationDNSBlock[mkInitializationDNSDomain].(string) initializationDNSDomain = initializationDNSBlock[mkInitializationDNSDomain].(string)
@ -1471,7 +1471,7 @@ func containerCreateCustom(ctx context.Context, d *schema.ResourceData, m interf
initializationUserAccount := initializationBlock[mkInitializationUserAccount].([]interface{}) initializationUserAccount := initializationBlock[mkInitializationUserAccount].([]interface{})
if len(initializationUserAccount) > 0 { if len(initializationUserAccount) > 0 && initializationUserAccount[0] != nil {
initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{}) initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{})
keys := initializationUserAccountBlock[mkInitializationUserAccountKeys].([]interface{}) keys := initializationUserAccountBlock[mkInitializationUserAccountKeys].([]interface{})
@ -1643,7 +1643,7 @@ func containerCreateCustom(ctx context.Context, d *schema.ResourceData, m interf
operatingSystem := d.Get(mkOperatingSystem).([]interface{}) operatingSystem := d.Get(mkOperatingSystem).([]interface{})
if len(operatingSystem) == 0 { if len(operatingSystem) == 0 || operatingSystem[0] == nil {
return diag.Errorf( return diag.Errorf(
"\"%s\": required field is not set", "\"%s\": required field is not set",
mkOperatingSystem, mkOperatingSystem,
@ -1876,7 +1876,7 @@ func containerGetTagsString(d *schema.ResourceData) string {
func containerGetStartupBehavior(d *schema.ResourceData) *containers.CustomStartupBehavior { func containerGetStartupBehavior(d *schema.ResourceData) *containers.CustomStartupBehavior {
startup := d.Get(mkStartup).([]interface{}) startup := d.Get(mkStartup).([]interface{})
if len(startup) > 0 { if len(startup) > 0 && startup[0] != nil {
startupBlock := startup[0].(map[string]interface{}) startupBlock := startup[0].(map[string]interface{})
startupOrder := startupBlock[mkStartupOrder].(int) startupOrder := startupBlock[mkStartupOrder].(int)
startupUpDelay := startupBlock[mkStartupUpDelay].(int) startupUpDelay := startupBlock[mkStartupUpDelay].(int)
@ -2088,7 +2088,7 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
currentDisk := d.Get(mkDisk).([]interface{}) currentDisk := d.Get(mkDisk).([]interface{})
if len(clone) > 0 { if len(clone) > 0 {
if len(currentDisk) > 0 { if len(currentDisk) > 0 && currentDisk[0] != nil {
// do not override the rootfs size if it was not changed during the clone operation // do not override the rootfs size if it was not changed during the clone operation
if currentDisk[0].(map[string]interface{})[mkDiskSize] == dvDiskSize { if currentDisk[0].(map[string]interface{})[mkDiskSize] == dvDiskSize {
disk[mkDiskSize] = dvDiskSize disk[mkDiskSize] = dvDiskSize
@ -2149,11 +2149,11 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
currentInitializationDNSBlock := map[string]interface{}{} currentInitializationDNSBlock := map[string]interface{}{}
currentInitialization := d.Get(mkInitialization).([]interface{}) currentInitialization := d.Get(mkInitialization).([]interface{})
if len(currentInitialization) > 0 { if len(currentInitialization) > 0 && currentInitialization[0] != nil {
currentInitializationBlock := currentInitialization[0].(map[string]interface{}) currentInitializationBlock := currentInitialization[0].(map[string]interface{})
currentInitializationDNS := currentInitializationBlock[mkInitializationDNS].([]interface{}) currentInitializationDNS := currentInitializationBlock[mkInitializationDNS].([]interface{})
if len(currentInitializationDNS) > 0 { if len(currentInitializationDNS) > 0 && currentInitializationDNS[0] != nil {
currentInitializationDNSBlock = currentInitializationDNS[0].(map[string]interface{}) currentInitializationDNSBlock = currentInitializationDNS[0].(map[string]interface{})
} }
} }
@ -2389,14 +2389,14 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
currentInitialization := d.Get(mkInitialization).([]interface{}) currentInitialization := d.Get(mkInitialization).([]interface{})
if len(currentInitialization) > 0 { if len(currentInitialization) > 0 && currentInitialization[0] != nil {
currentInitializationMap := currentInitialization[0].(map[string]interface{}) currentInitializationMap := currentInitialization[0].(map[string]interface{})
initialization[mkInitializationUserAccount] = currentInitializationMap[mkInitializationUserAccount].([]interface{}) initialization[mkInitializationUserAccount] = currentInitializationMap[mkInitializationUserAccount].([]interface{})
} }
if len(clone) > 0 { if len(clone) > 0 {
if len(currentInitialization) > 0 { if len(currentInitialization) > 0 && currentInitialization[0] != nil {
currentInitializationBlock := currentInitialization[0].(map[string]interface{}) currentInitializationBlock := currentInitialization[0].(map[string]interface{})
currentInitializationDNS := currentInitializationBlock[mkInitializationDNS].([]interface{}) currentInitializationDNS := currentInitializationBlock[mkInitializationDNS].([]interface{})
@ -2504,7 +2504,7 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
currentOperatingSystem := d.Get(mkOperatingSystem).([]interface{}) currentOperatingSystem := d.Get(mkOperatingSystem).([]interface{})
if len(currentOperatingSystem) > 0 { if len(currentOperatingSystem) > 0 && currentOperatingSystem[0] != nil {
currentOperatingSystemMap := currentOperatingSystem[0].(map[string]interface{}) currentOperatingSystemMap := currentOperatingSystem[0].(map[string]interface{})
operatingSystem[mkOperatingSystemTemplateFileID] = currentOperatingSystemMap[mkOperatingSystemTemplateFileID] operatingSystem[mkOperatingSystemTemplateFileID] = currentOperatingSystemMap[mkOperatingSystemTemplateFileID]
@ -2697,7 +2697,7 @@ func containerUpdate(ctx context.Context, d *schema.ResourceData, m interface{})
var initializationIPConfigIPv6Gateway []string var initializationIPConfigIPv6Gateway []string
if len(initialization) > 0 { if len(initialization) > 0 && initialization[0] != nil {
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationDNS := initializationBlock[mkInitializationDNS].([]interface{}) initializationDNS := initializationBlock[mkInitializationDNS].([]interface{})

View File

@ -2468,9 +2468,11 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
} }
initializationConfig := vmGetCloudInitConfig(d) initializationConfig := vmGetCloudInitConfig(d)
initializationAttr := d.Get(mkInitialization)
if initializationConfig != nil && initializationAttr != nil {
initialization := initializationAttr.([]interface{})
if initializationConfig != nil {
initialization := d.Get(mkInitialization).([]interface{})
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationDatastoreID := initializationBlock[mkInitializationDatastoreID].(string) initializationDatastoreID := initializationBlock[mkInitializationDatastoreID].(string)
@ -4944,7 +4946,7 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
old, _ := d.GetChange(mkCDROM) old, _ := d.GetChange(mkCDROM)
if len(old.([]interface{})) > 0 { if len(old.([]interface{})) > 0 && old.([]interface{})[0] != nil {
oldList := old.([]interface{})[0] oldList := old.([]interface{})[0]
oldBlock := oldList.(map[string]interface{}) oldBlock := oldList.(map[string]interface{})
@ -5090,10 +5092,11 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
updateBody.CloudInitConfig = initializationConfig updateBody.CloudInitConfig = initializationConfig
if updateBody.CloudInitConfig != nil { initialization := d.Get(mkInitialization).([]interface{})
if updateBody.CloudInitConfig != nil && len(initialization) > 0 && initialization[0] != nil {
var fileVolume string var fileVolume string
initialization := d.Get(mkInitialization).([]interface{})
initializationBlock := initialization[0].(map[string]interface{}) initializationBlock := initialization[0].(map[string]interface{})
initializationDatastoreID := initializationBlock[mkInitializationDatastoreID].(string) initializationDatastoreID := initializationBlock[mkInitializationDatastoreID].(string)
initializationInterface := initializationBlock[mkInitializationInterface].(string) initializationInterface := initializationBlock[mkInitializationInterface].(string)