mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-05 13:33:58 +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:
parent
eaeff08571
commit
9bbbf8db39
@ -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{})
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user