From cc594fd5ef299c8d02d20acdb629f2a25bdd1a8a Mon Sep 17 00:00:00 2001 From: yann degat Date: Wed, 18 Dec 2019 13:31:32 +0000 Subject: [PATCH] helpers/fix: fix nilpointer funcs --- ovh/helpers.go | 56 +++++++++++++++++++ ...ce_ovh_iploadbalancing_http_farm_server.go | 40 ++++++------- ...ource_ovh_iploadbalancing_http_frontend.go | 24 +++----- ...rce_ovh_iploadbalancing_tcp_farm_server.go | 40 ++++++------- ...source_ovh_iploadbalancing_tcp_frontend.go | 24 +++----- ovh/types_dedicated_server.go | 6 +- ovh/types_installation_template.go | 30 +++++----- 7 files changed, 129 insertions(+), 91 deletions(-) diff --git a/ovh/helpers.go b/ovh/helpers.go index 832648a96..a5ff9337a 100644 --- a/ovh/helpers.go +++ b/ovh/helpers.go @@ -150,6 +150,62 @@ func validateFilesystem(value string) error { }) } +func getNilBoolPointerFromData(data interface{}, id string) *bool { + if resourceData, tok := data.(*schema.ResourceData); tok { + if val, ok := resourceData.GetOkExists(id); ok { + return getNilBoolPointer(val) + } + } else if mapData, tok := data.(map[string]interface{}); tok { + if val, ok := mapData[id]; ok { + return getNilBoolPointer(val) + } + } + + return nil +} + +func getNilStringPointerFromData(data interface{}, id string) *string { + if resourceData, tok := data.(*schema.ResourceData); tok { + if val, ok := resourceData.GetOkExists(id); ok { + return getNilStringPointer(val) + } + } else if mapData, tok := data.(map[string]interface{}); tok { + if val, ok := mapData[id]; ok { + return getNilStringPointer(val) + } + } + + return nil +} + +func getNilIntPointerFromData(data interface{}, id string) *int { + if resourceData, tok := data.(*schema.ResourceData); tok { + if val, ok := resourceData.GetOkExists(id); ok { + return getNilIntPointer(val) + } + } else if mapData, tok := data.(map[string]interface{}); tok { + if val, ok := mapData[id]; ok { + return getNilIntPointer(val) + } + } + + return nil +} + +func getNilInt64PointerFromData(data interface{}, id string) *int64 { + if resourceData, tok := data.(*schema.ResourceData); tok { + if val, ok := resourceData.GetOkExists(id); ok { + return getNilInt64Pointer(val) + } + } else if mapData, tok := data.(map[string]interface{}); tok { + if val, ok := mapData[id]; ok { + return getNilInt64Pointer(val) + } + } + + return nil +} + func getNilBoolPointer(val interface{}) *bool { if val == nil { return nil diff --git a/ovh/resource_ovh_iploadbalancing_http_farm_server.go b/ovh/resource_ovh_iploadbalancing_http_farm_server.go index 5e0b241c6..9afede4b5 100644 --- a/ovh/resource_ovh_iploadbalancing_http_farm_server.go +++ b/ovh/resource_ovh_iploadbalancing_http_farm_server.go @@ -121,16 +121,16 @@ func resourceIpLoadbalancingHttpFarmServerCreate(d *schema.ResourceData, meta in config := meta.(*Config) newBackendServer := &IpLoadbalancingHttpFarmServer{ - DisplayName: getNilStringPointer(d.Get("display_name").(string)), - Address: getNilStringPointer(d.Get("address").(string)), - Port: getNilIntPointer(d.Get("port").(int)), - ProxyProtocolVersion: getNilStringPointer(d.Get("proxy_protocol_version").(string)), - Chain: getNilStringPointer(d.Get("chain").(string)), - Weight: getNilIntPointer(d.Get("weight").(int)), - Probe: getNilBoolPointer(d.Get("probe").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), - Backup: getNilBoolPointer(d.Get("backup").(bool)), - Status: getNilStringPointer(d.Get("status").(string)), + DisplayName: getNilStringPointerFromData(d, "display_name"), + Address: getNilStringPointerFromData(d, "address"), + Port: getNilIntPointerFromData(d, "port"), + ProxyProtocolVersion: getNilStringPointerFromData(d, "proxy_protocol_version"), + Chain: getNilStringPointerFromData(d, "chain"), + Weight: getNilIntPointerFromData(d, "weight"), + Probe: getNilBoolPointerFromData(d, "probe"), + Ssl: getNilBoolPointerFromData(d, "ssl"), + Backup: getNilBoolPointerFromData(d, "backup"), + Status: getNilStringPointerFromData(d, "status"), } service := d.Get("service_name").(string) @@ -191,16 +191,16 @@ func resourceIpLoadbalancingHttpFarmServerUpdate(d *schema.ResourceData, meta in config := meta.(*Config) update := &IpLoadbalancingHttpFarmServer{ - DisplayName: getNilStringPointer(d.Get("display_name").(string)), - Address: getNilStringPointer(d.Get("address").(string)), - Port: getNilIntPointer(d.Get("port").(int)), - ProxyProtocolVersion: getNilStringPointer(d.Get("proxy_protocol_version").(string)), - Chain: getNilStringPointer(d.Get("chain").(string)), - Weight: getNilIntPointer(d.Get("weight").(int)), - Probe: getNilBoolPointer(d.Get("probe").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), - Backup: getNilBoolPointer(d.Get("backup").(bool)), - Status: getNilStringPointer(d.Get("status").(string)), + DisplayName: getNilStringPointerFromData(d, "display_name"), + Address: getNilStringPointerFromData(d, "address"), + Port: getNilIntPointerFromData(d, "port"), + ProxyProtocolVersion: getNilStringPointerFromData(d, "proxy_protocol_version"), + Chain: getNilStringPointerFromData(d, "chain"), + Weight: getNilIntPointerFromData(d, "weight"), + Probe: getNilBoolPointerFromData(d, "probe"), + Ssl: getNilBoolPointerFromData(d, "ssl"), + Backup: getNilBoolPointerFromData(d, "backup"), + Status: getNilStringPointerFromData(d, "status"), } service := d.Get("service_name").(string) diff --git a/ovh/resource_ovh_iploadbalancing_http_frontend.go b/ovh/resource_ovh_iploadbalancing_http_frontend.go index b30d9cc28..603196b35 100644 --- a/ovh/resource_ovh_iploadbalancing_http_frontend.go +++ b/ovh/resource_ovh_iploadbalancing_http_frontend.go @@ -112,17 +112,13 @@ func resourceIpLoadbalancingHttpFrontendCreate(d *schema.ResourceData, meta inte Zone: d.Get("zone").(string), AllowedSource: allowedSources, DedicatedIpFo: dedicatedIpFo, - Disabled: getNilBoolPointer(d.Get("disabled").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), + Disabled: getNilBoolPointerFromData(d, "disabled"), + Ssl: getNilBoolPointerFromData(d, "ssl"), DisplayName: d.Get("display_name").(string), } - if farmId, ok := d.GetOk("default_farm_id"); ok { - frontend.DefaultFarmId = getNilIntPointer(farmId.(int)) - } - if sslId, ok := d.GetOk("default_ssl_id"); ok { - frontend.DefaultSslId = getNilIntPointer(sslId.(int)) - } + frontend.DefaultFarmId = getNilIntPointerFromData(d, "default_farm_id") + frontend.DefaultSslId = getNilIntPointerFromData(d, "default_ssl_id") service := d.Get("service_name").(string) resp := &IpLoadbalancingHttpFrontend{} @@ -174,17 +170,13 @@ func resourceIpLoadbalancingHttpFrontendUpdate(d *schema.ResourceData, meta inte Zone: d.Get("zone").(string), AllowedSource: allowedSources, DedicatedIpFo: dedicatedIpFo, - Disabled: getNilBoolPointer(d.Get("disabled").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), + Disabled: getNilBoolPointerFromData(d, "disabled"), + Ssl: getNilBoolPointerFromData(d, "ssl"), DisplayName: d.Get("display_name").(string), } - if farmId, ok := d.GetOk("default_farm_id"); ok { - frontend.DefaultFarmId = getNilIntPointer(farmId.(int)) - } - if sslId, ok := d.GetOk("default_ssl_id"); ok { - frontend.DefaultSslId = getNilIntPointer(sslId.(int)) - } + frontend.DefaultFarmId = getNilIntPointerFromData(d, "default_farm_id") + frontend.DefaultSslId = getNilIntPointerFromData(d, "default_ssl_id") err := config.OVHClient.Put(endpoint, frontend, nil) if err != nil { diff --git a/ovh/resource_ovh_iploadbalancing_tcp_farm_server.go b/ovh/resource_ovh_iploadbalancing_tcp_farm_server.go index b2ce5d012..78492e673 100644 --- a/ovh/resource_ovh_iploadbalancing_tcp_farm_server.go +++ b/ovh/resource_ovh_iploadbalancing_tcp_farm_server.go @@ -121,16 +121,16 @@ func resourceIpLoadbalancingTcpFarmServerCreate(d *schema.ResourceData, meta int config := meta.(*Config) newBackendServer := &IpLoadbalancingTcpFarmServer{ - DisplayName: getNilStringPointer(d.Get("display_name").(string)), - Address: getNilStringPointer(d.Get("address").(string)), - Port: getNilIntPointer(d.Get("port").(int)), - ProxyProtocolVersion: getNilStringPointer(d.Get("proxy_protocol_version").(string)), - Chain: getNilStringPointer(d.Get("chain").(string)), - Weight: getNilIntPointer(d.Get("weight").(int)), - Probe: getNilBoolPointer(d.Get("probe").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), - Backup: getNilBoolPointer(d.Get("backup").(bool)), - Status: getNilStringPointer(d.Get("status").(string)), + DisplayName: getNilStringPointerFromData(d, "display_name"), + Address: getNilStringPointerFromData(d, "address"), + Port: getNilIntPointerFromData(d, "port"), + ProxyProtocolVersion: getNilStringPointerFromData(d, "proxy_protocol_version"), + Chain: getNilStringPointerFromData(d, "chain"), + Weight: getNilIntPointerFromData(d, "weight"), + Probe: getNilBoolPointerFromData(d, "probe"), + Ssl: getNilBoolPointerFromData(d, "ssl"), + Backup: getNilBoolPointerFromData(d, "backup"), + Status: getNilStringPointerFromData(d, "status"), } service := d.Get("service_name").(string) @@ -191,16 +191,16 @@ func resourceIpLoadbalancingTcpFarmServerUpdate(d *schema.ResourceData, meta int config := meta.(*Config) update := &IpLoadbalancingTcpFarmServer{ - DisplayName: getNilStringPointer(d.Get("display_name").(string)), - Address: getNilStringPointer(d.Get("address").(string)), - Port: getNilIntPointer(d.Get("port").(int)), - ProxyProtocolVersion: getNilStringPointer(d.Get("proxy_protocol_version").(string)), - Chain: getNilStringPointer(d.Get("chain").(string)), - Weight: getNilIntPointer(d.Get("weight").(int)), - Probe: getNilBoolPointer(d.Get("probe").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), - Backup: getNilBoolPointer(d.Get("backup").(bool)), - Status: getNilStringPointer(d.Get("status").(string)), + DisplayName: getNilStringPointerFromData(d, "display_name"), + Address: getNilStringPointerFromData(d, "address"), + Port: getNilIntPointerFromData(d, "port"), + ProxyProtocolVersion: getNilStringPointerFromData(d, "proxy_protocol_version"), + Chain: getNilStringPointerFromData(d, "chain"), + Weight: getNilIntPointerFromData(d, "weight"), + Probe: getNilBoolPointerFromData(d, "probe"), + Ssl: getNilBoolPointerFromData(d, "ssl"), + Backup: getNilBoolPointerFromData(d, "backup"), + Status: getNilStringPointerFromData(d, "status"), } service := d.Get("service_name").(string) diff --git a/ovh/resource_ovh_iploadbalancing_tcp_frontend.go b/ovh/resource_ovh_iploadbalancing_tcp_frontend.go index 5b55f47ab..30c3d6831 100644 --- a/ovh/resource_ovh_iploadbalancing_tcp_frontend.go +++ b/ovh/resource_ovh_iploadbalancing_tcp_frontend.go @@ -112,17 +112,13 @@ func resourceIpLoadbalancingTcpFrontendCreate(d *schema.ResourceData, meta inter Zone: d.Get("zone").(string), AllowedSource: allowedSources, DedicatedIpFo: dedicatedIpFo, - Disabled: getNilBoolPointer(d.Get("disabled").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), + Disabled: getNilBoolPointerFromData(d, "disabled"), + Ssl: getNilBoolPointerFromData(d, "ssl"), DisplayName: d.Get("display_name").(string), } - if farmId, ok := d.GetOk("default_farm_id"); ok { - frontend.DefaultFarmId = getNilIntPointer(farmId.(int)) - } - if sslId, ok := d.GetOk("default_ssl_id"); ok { - frontend.DefaultSslId = getNilIntPointer(sslId.(int)) - } + frontend.DefaultFarmId = getNilIntPointerFromData(d, "default_farm_id") + frontend.DefaultSslId = getNilIntPointerFromData(d, "default_ssl_id") service := d.Get("service_name").(string) resp := &IpLoadbalancingTcpFrontend{} @@ -174,17 +170,13 @@ func resourceIpLoadbalancingTcpFrontendUpdate(d *schema.ResourceData, meta inter Zone: d.Get("zone").(string), AllowedSource: allowedSources, DedicatedIpFo: dedicatedIpFo, - Disabled: getNilBoolPointer(d.Get("disabled").(bool)), - Ssl: getNilBoolPointer(d.Get("ssl").(bool)), + Disabled: getNilBoolPointerFromData(d, "disabled"), + Ssl: getNilBoolPointerFromData(d, "ssl"), DisplayName: d.Get("display_name").(string), } - if farmId, ok := d.GetOk("default_farm_id"); ok { - frontend.DefaultFarmId = getNilIntPointer(farmId.(int)) - } - if sslId, ok := d.GetOk("default_ssl_id"); ok { - frontend.DefaultSslId = getNilIntPointer(sslId.(int)) - } + frontend.DefaultFarmId = getNilIntPointerFromData(d, "default_farm_id") + frontend.DefaultSslId = getNilIntPointerFromData(d, "default_ssl_id") err := config.OVHClient.Put(endpoint, frontend, nil) if err != nil { diff --git a/ovh/types_dedicated_server.go b/ovh/types_dedicated_server.go index a6bc6c4b5..0dddb0413 100644 --- a/ovh/types_dedicated_server.go +++ b/ovh/types_dedicated_server.go @@ -43,9 +43,9 @@ type DedicatedServerUpdateOpts struct { } func (opts *DedicatedServerUpdateOpts) FromResource(d *schema.ResourceData) *DedicatedServerUpdateOpts { - opts.BootId = getNilInt64Pointer(d.Get("boot_id")) - opts.Monitoring = getNilBoolPointer(d.Get("monitoring")) - opts.State = getNilStringPointer(d.Get("state")) + opts.BootId = getNilInt64PointerFromData(d, "boot_id") + opts.Monitoring = getNilBoolPointerFromData(d, "monitoring") + opts.State = getNilStringPointerFromData(d, "state") return opts } diff --git a/ovh/types_installation_template.go b/ovh/types_installation_template.go index c53794efa..c959b6af6 100644 --- a/ovh/types_installation_template.go +++ b/ovh/types_installation_template.go @@ -18,7 +18,7 @@ type InstallationTemplate struct { Description string `json:"description"` Distribution string `json:"distribution"` Family string `json:"family"` - Filesystems []string `json:filesystems` + Filesystems []string `json:"filesystems"` HardRaidConfiguration *bool `json:"hardRaidConfigurtion,omitempty"` LastModification *string `json:"last_modification"` LvmReady *bool `json:"lvmReady,omitempty"` @@ -120,9 +120,7 @@ func (opts *InstallationTemplateUpdateOpts) FromResource(d *schema.ResourceData) customizations := d.Get("customization").([]interface{}) if customizations != nil && len(customizations) == 1 { - opts.Customization = (&InstallationTemplateCustomization{}).FromMap( - customizations[0].(map[string]interface{}), - ) + opts.Customization = (&InstallationTemplateCustomization{}).FromResource(d, "customization.0") } return opts @@ -185,14 +183,14 @@ func (v InstallationTemplateCustomization) ToMap() map[string]interface{} { return nil } -func (opts *InstallationTemplateCustomization) FromMap(data map[string]interface{}) *InstallationTemplateCustomization { - opts.ChangeLog = getNilStringPointer(data["change_log"]) - opts.CustomHostname = getNilStringPointer(data["custom_hostname"]) - opts.PostInstallationScriptLink = getNilStringPointer(data["post_installation_script_link"]) - opts.PostInstallationScriptReturn = getNilStringPointer(data["post_installation_script_return"]) - opts.Rating = getNilIntPointer(data["rating"]) - opts.SshKeyName = getNilStringPointer(data["ssh_key_name"]) - opts.UseDistributionKernel = getNilBoolPointer(data["use_distribution_kernel"]) +func (opts *InstallationTemplateCustomization) FromResource(d *schema.ResourceData, parent string) *InstallationTemplateCustomization { + opts.ChangeLog = getNilStringPointerFromData(d, fmt.Sprintf("%s.change_log", parent)) + opts.CustomHostname = getNilStringPointerFromData(d, fmt.Sprintf("%s.custom_hostname", parent)) + opts.PostInstallationScriptLink = getNilStringPointerFromData(d, fmt.Sprintf("%s.post_installation_script_link", parent)) + opts.PostInstallationScriptReturn = getNilStringPointerFromData(d, fmt.Sprintf("%s.post_installation_script_return", parent)) + opts.Rating = getNilIntPointerFromData(d, fmt.Sprintf("%s.rating", parent)) + opts.SshKeyName = getNilStringPointerFromData(d, fmt.Sprintf("%s.ssh_key_name", parent)) + opts.UseDistributionKernel = getNilBoolPointerFromData(d, fmt.Sprintf("%s.use_distribution_kernel", parent)) return opts } @@ -243,14 +241,14 @@ func (opts *PartitionCreateOpts) FromResource(d *schema.ResourceData) *Partition opts.Mountpoint = d.Get("mountpoint").(string) opts.Step = d.Get("order").(int) - if raid := getNilStringPointer(d.Get("raid")); raid != nil { + if raid := getNilStringPointerFromData(d, "raid"); raid != nil { raidValue := strings.ReplaceAll(*raid, "raid", "") opts.Raid = &raidValue } opts.Size = d.Get("size").(int) opts.Type = d.Get("type").(string) - opts.VolumeName = getNilStringPointer(d.Get("volume_name")) + opts.VolumeName = getNilStringPointerFromData(d, "volume_name") return opts } @@ -263,7 +261,7 @@ func (opts *PartitionUpdateOpts) FromResource(d *schema.ResourceData) *Partition opts.Mountpoint = d.Get("mountpoint").(string) opts.Order = d.Get("order").(int) - if raid := getNilStringPointer(d.Get("raid")); raid != nil { + if raid := getNilStringPointerFromData(d, "raid"); raid != nil { raidValue := strings.ReplaceAll(*raid, "raid", "") opts.Raid = &raidValue } @@ -274,7 +272,7 @@ func (opts *PartitionUpdateOpts) FromResource(d *schema.ResourceData) *Partition } opts.Type = d.Get("type").(string) - opts.VolumeName = getNilStringPointer(d.Get("volume_name")) + opts.VolumeName = getNilStringPointerFromData(d, "volume_name") return opts }