mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-03 12:02:57 +00:00
fix(vm): panic on empty initialization.dns
block (#928)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
f20b4d1f39
commit
e5bccbc53d
@ -3092,150 +3092,153 @@ func vmGetAudioDriverValidator() schema.SchemaValidateDiagFunc {
|
|||||||
}, false))
|
}, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//nolint:lll
|
||||||
func vmGetCloudInitConfig(d *schema.ResourceData) *vms.CustomCloudInitConfig {
|
func vmGetCloudInitConfig(d *schema.ResourceData) *vms.CustomCloudInitConfig {
|
||||||
var initializationConfig *vms.CustomCloudInitConfig
|
|
||||||
|
|
||||||
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
||||||
|
|
||||||
if len(initialization) > 0 {
|
if len(initialization) == 0 || initialization[0] == nil {
|
||||||
initializationBlock := initialization[0].(map[string]interface{})
|
return nil
|
||||||
initializationConfig = &vms.CustomCloudInitConfig{}
|
}
|
||||||
initializationDNS := initializationBlock[mkResourceVirtualEnvironmentVMInitializationDNS].([]interface{})
|
|
||||||
|
|
||||||
if len(initializationDNS) > 0 {
|
var initializationConfig *vms.CustomCloudInitConfig
|
||||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
|
||||||
domain := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSDomain].(string)
|
|
||||||
|
|
||||||
if domain != "" {
|
initializationBlock := initialization[0].(map[string]interface{})
|
||||||
initializationConfig.SearchDomain = &domain
|
initializationConfig = &vms.CustomCloudInitConfig{}
|
||||||
|
initializationDNS := initializationBlock[mkResourceVirtualEnvironmentVMInitializationDNS].([]interface{})
|
||||||
|
|
||||||
|
if len(initializationDNS) > 0 && initializationDNS[0] != nil {
|
||||||
|
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||||
|
domain := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSDomain].(string)
|
||||||
|
|
||||||
|
if domain != "" {
|
||||||
|
initializationConfig.SearchDomain = &domain
|
||||||
|
}
|
||||||
|
|
||||||
|
servers := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServers].([]interface{})
|
||||||
|
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
||||||
|
|
||||||
|
if len(servers) > 0 {
|
||||||
|
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
||||||
|
|
||||||
|
initializationConfig.Nameserver = &nameserver
|
||||||
|
} else if deprecatedServer != "" {
|
||||||
|
initializationConfig.Nameserver = &deprecatedServer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initializationIPConfig := initializationBlock[mkResourceVirtualEnvironmentVMInitializationIPConfig].([]interface{})
|
||||||
|
initializationConfig.IPConfig = make(
|
||||||
|
[]vms.CustomCloudInitIPConfig,
|
||||||
|
len(initializationIPConfig),
|
||||||
|
)
|
||||||
|
|
||||||
|
for i, c := range initializationIPConfig {
|
||||||
|
configBlock := c.(map[string]interface{})
|
||||||
|
ipv4 := configBlock[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4].([]interface{})
|
||||||
|
|
||||||
|
if len(ipv4) > 0 {
|
||||||
|
ipv4Block := ipv4[0].(map[string]interface{})
|
||||||
|
ipv4Address := ipv4Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address].(string)
|
||||||
|
|
||||||
|
if ipv4Address != "" {
|
||||||
|
initializationConfig.IPConfig[i].IPv4 = &ipv4Address
|
||||||
}
|
}
|
||||||
|
|
||||||
servers := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServers].([]interface{})
|
ipv4Gateway := ipv4Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Gateway].(string)
|
||||||
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
|
||||||
|
|
||||||
if len(servers) > 0 {
|
if ipv4Gateway != "" {
|
||||||
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
initializationConfig.IPConfig[i].GatewayIPv4 = &ipv4Gateway
|
||||||
|
|
||||||
initializationConfig.Nameserver = &nameserver
|
|
||||||
} else if deprecatedServer != "" {
|
|
||||||
initializationConfig.Nameserver = &deprecatedServer
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationIPConfig := initializationBlock[mkResourceVirtualEnvironmentVMInitializationIPConfig].([]interface{})
|
ipv6 := configBlock[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6].([]interface{})
|
||||||
initializationConfig.IPConfig = make(
|
|
||||||
[]vms.CustomCloudInitIPConfig,
|
|
||||||
len(initializationIPConfig),
|
|
||||||
)
|
|
||||||
|
|
||||||
for i, c := range initializationIPConfig {
|
if len(ipv6) > 0 {
|
||||||
configBlock := c.(map[string]interface{})
|
ipv6Block := ipv6[0].(map[string]interface{})
|
||||||
ipv4 := configBlock[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4].([]interface{})
|
ipv6Address := ipv6Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Address].(string)
|
||||||
|
|
||||||
if len(ipv4) > 0 {
|
if ipv6Address != "" {
|
||||||
ipv4Block := ipv4[0].(map[string]interface{})
|
initializationConfig.IPConfig[i].IPv6 = &ipv6Address
|
||||||
ipv4Address := ipv4Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address].(string)
|
|
||||||
|
|
||||||
if ipv4Address != "" {
|
|
||||||
initializationConfig.IPConfig[i].IPv4 = &ipv4Address
|
|
||||||
}
|
|
||||||
|
|
||||||
ipv4Gateway := ipv4Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Gateway].(string)
|
|
||||||
|
|
||||||
if ipv4Gateway != "" {
|
|
||||||
initializationConfig.IPConfig[i].GatewayIPv4 = &ipv4Gateway
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ipv6 := configBlock[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6].([]interface{})
|
ipv6Gateway := ipv6Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Gateway].(string)
|
||||||
|
|
||||||
if len(ipv6) > 0 {
|
if ipv6Gateway != "" {
|
||||||
ipv6Block := ipv6[0].(map[string]interface{})
|
initializationConfig.IPConfig[i].GatewayIPv6 = &ipv6Gateway
|
||||||
ipv6Address := ipv6Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Address].(string)
|
|
||||||
|
|
||||||
if ipv6Address != "" {
|
|
||||||
initializationConfig.IPConfig[i].IPv6 = &ipv6Address
|
|
||||||
}
|
|
||||||
|
|
||||||
ipv6Gateway := ipv6Block[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Gateway].(string)
|
|
||||||
|
|
||||||
if ipv6Gateway != "" {
|
|
||||||
initializationConfig.IPConfig[i].GatewayIPv6 = &ipv6Gateway
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
initializationUserAccount := initializationBlock[mkResourceVirtualEnvironmentVMInitializationUserAccount].([]interface{})
|
initializationUserAccount := initializationBlock[mkResourceVirtualEnvironmentVMInitializationUserAccount].([]interface{})
|
||||||
|
|
||||||
if len(initializationUserAccount) > 0 {
|
if len(initializationUserAccount) > 0 {
|
||||||
initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{})
|
initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{})
|
||||||
keys := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountKeys].([]interface{})
|
keys := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountKeys].([]interface{})
|
||||||
|
|
||||||
if len(keys) > 0 {
|
if len(keys) > 0 {
|
||||||
sshKeys := make(vms.CustomCloudInitSSHKeys, len(keys))
|
sshKeys := make(vms.CustomCloudInitSSHKeys, len(keys))
|
||||||
|
|
||||||
for i, k := range keys {
|
for i, k := range keys {
|
||||||
sshKeys[i] = k.(string)
|
sshKeys[i] = k.(string)
|
||||||
}
|
|
||||||
|
|
||||||
initializationConfig.SSHKeys = &sshKeys
|
|
||||||
}
|
}
|
||||||
|
|
||||||
password := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountPassword].(string)
|
initializationConfig.SSHKeys = &sshKeys
|
||||||
|
|
||||||
if password != "" {
|
|
||||||
initializationConfig.Password = &password
|
|
||||||
}
|
|
||||||
|
|
||||||
username := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountUsername].(string)
|
|
||||||
|
|
||||||
initializationConfig.Username = &username
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationUserDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationUserDataFileID].(string)
|
password := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountPassword].(string)
|
||||||
|
|
||||||
if initializationUserDataFileID != "" {
|
if password != "" {
|
||||||
initializationConfig.Files = &vms.CustomCloudInitFiles{
|
initializationConfig.Password = &password
|
||||||
UserVolume: &initializationUserDataFileID,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationVendorDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID].(string)
|
username := initializationUserAccountBlock[mkResourceVirtualEnvironmentVMInitializationUserAccountUsername].(string)
|
||||||
|
|
||||||
if initializationVendorDataFileID != "" {
|
initializationConfig.Username = &username
|
||||||
if initializationConfig.Files == nil {
|
}
|
||||||
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
|
||||||
}
|
|
||||||
|
|
||||||
initializationConfig.Files.VendorVolume = &initializationVendorDataFileID
|
initializationUserDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationUserDataFileID].(string)
|
||||||
|
|
||||||
|
if initializationUserDataFileID != "" {
|
||||||
|
initializationConfig.Files = &vms.CustomCloudInitFiles{
|
||||||
|
UserVolume: &initializationUserDataFileID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initializationVendorDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID].(string)
|
||||||
|
|
||||||
|
if initializationVendorDataFileID != "" {
|
||||||
|
if initializationConfig.Files == nil {
|
||||||
|
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationNetworkDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID].(string)
|
initializationConfig.Files.VendorVolume = &initializationVendorDataFileID
|
||||||
|
}
|
||||||
|
|
||||||
if initializationNetworkDataFileID != "" {
|
initializationNetworkDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID].(string)
|
||||||
if initializationConfig.Files == nil {
|
|
||||||
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
|
||||||
}
|
|
||||||
|
|
||||||
initializationConfig.Files.NetworkVolume = &initializationNetworkDataFileID
|
if initializationNetworkDataFileID != "" {
|
||||||
|
if initializationConfig.Files == nil {
|
||||||
|
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:lll
|
initializationConfig.Files.NetworkVolume = &initializationNetworkDataFileID
|
||||||
initializationMetaDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationMetaDataFileID].(string)
|
}
|
||||||
|
|
||||||
if initializationMetaDataFileID != "" {
|
//nolint:lll
|
||||||
if initializationConfig.Files == nil {
|
initializationMetaDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationMetaDataFileID].(string)
|
||||||
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
|
||||||
}
|
|
||||||
|
|
||||||
initializationConfig.Files.MetaVolume = &initializationMetaDataFileID
|
if initializationMetaDataFileID != "" {
|
||||||
|
if initializationConfig.Files == nil {
|
||||||
|
initializationConfig.Files = &vms.CustomCloudInitFiles{}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationType := initializationBlock[mkResourceVirtualEnvironmentVMInitializationType].(string)
|
initializationConfig.Files.MetaVolume = &initializationMetaDataFileID
|
||||||
|
}
|
||||||
|
|
||||||
if initializationType != "" {
|
initializationType := initializationBlock[mkResourceVirtualEnvironmentVMInitializationType].(string)
|
||||||
initializationConfig.Type = &initializationType
|
|
||||||
}
|
if initializationType != "" {
|
||||||
|
initializationConfig.Type = &initializationType
|
||||||
}
|
}
|
||||||
|
|
||||||
return initializationConfig
|
return initializationConfig
|
||||||
|
Loading…
Reference in New Issue
Block a user