Skip to content

Commit 548d69f

Browse files
parwezarcohenma
authored andcommitted
adding getOKExists Checks for nested resources
1 parent e7127b9 commit 548d69f

27 files changed

+783
-450
lines changed

provider/containerengine_cluster_resource.go

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ package provider
44

55
import (
66
"context"
7+
"fmt"
78

89
"github.com/hashicorp/terraform/helper/schema"
910

10-
"fmt"
1111
"strings"
1212

1313
"time"
@@ -371,7 +371,11 @@ func (s *ClusterResourceCrud) Create() error {
371371

372372
if options, ok := s.D.GetOkExists("options"); ok {
373373
if tmpList := options.([]interface{}); len(tmpList) > 0 {
374-
tmp := mapToClusterCreateOptions(tmpList[0].(map[string]interface{}))
374+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "options", 0)
375+
tmp, err := s.mapToClusterCreateOptions(fieldKeyFormat)
376+
if err != nil {
377+
return err
378+
}
375379
request.Options = &tmp
376380
}
377381
}
@@ -548,20 +552,20 @@ func (s *ClusterResourceCrud) SetData() error {
548552
return nil
549553
}
550554

551-
func mapToAddOnOptions(raw map[string]interface{}) oci_containerengine.AddOnOptions {
555+
func (s *ClusterResourceCrud) mapToAddOnOptions(fieldKeyFormat string) (oci_containerengine.AddOnOptions, error) {
552556
result := oci_containerengine.AddOnOptions{}
553557

554-
if isKubernetesDashboardEnabled, ok := raw["is_kubernetes_dashboard_enabled"]; ok {
558+
if isKubernetesDashboardEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_kubernetes_dashboard_enabled")); ok {
555559
tmp := isKubernetesDashboardEnabled.(bool)
556560
result.IsKubernetesDashboardEnabled = &tmp
557561
}
558562

559-
if isTillerEnabled, ok := raw["is_tiller_enabled"]; ok {
563+
if isTillerEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_tiller_enabled")); ok {
560564
tmp := isTillerEnabled.(bool)
561565
result.IsTillerEnabled = &tmp
562566
}
563567

564-
return result
568+
return result, nil
565569
}
566570

567571
func AddOnOptionsToMap(obj *oci_containerengine.AddOnOptions) map[string]interface{} {
@@ -578,34 +582,41 @@ func AddOnOptionsToMap(obj *oci_containerengine.AddOnOptions) map[string]interfa
578582
return result
579583
}
580584

581-
func mapToClusterCreateOptions(raw map[string]interface{}) oci_containerengine.ClusterCreateOptions {
585+
func (s *ClusterResourceCrud) mapToClusterCreateOptions(fieldKeyFormat string) (oci_containerengine.ClusterCreateOptions, error) {
582586
result := oci_containerengine.ClusterCreateOptions{}
583587

584-
if addOns, ok := raw["add_ons"]; ok {
588+
if addOns, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "add_ons")); ok {
585589
if tmpList := addOns.([]interface{}); len(tmpList) > 0 {
586-
tmp := mapToAddOnOptions(tmpList[0].(map[string]interface{}))
590+
fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "add_ons"), 0)
591+
tmp, err := s.mapToAddOnOptions(fieldKeyFormatNextLevel)
592+
if err != nil {
593+
return result, err
594+
}
587595
result.AddOns = &tmp
588596
}
589597
}
590598

591-
if kubernetesNetworkConfig, ok := raw["kubernetes_network_config"]; ok {
599+
if kubernetesNetworkConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "kubernetes_network_config")); ok {
592600
if tmpList := kubernetesNetworkConfig.([]interface{}); len(tmpList) > 0 {
593-
tmp := mapToKubernetesNetworkConfig(tmpList[0].(map[string]interface{}))
601+
fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "kubernetes_network_config"), 0)
602+
tmp, err := s.mapToKubernetesNetworkConfig(fieldKeyFormatNextLevel)
603+
if err != nil {
604+
return result, err
605+
}
594606
result.KubernetesNetworkConfig = &tmp
595607
}
596608
}
597609

598-
result.ServiceLbSubnetIds = []string{}
599-
if serviceLbSubnetIds, ok := raw["service_lb_subnet_ids"]; ok && serviceLbSubnetIds != "" {
610+
if serviceLbSubnetIds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "service_lb_subnet_ids")); ok {
600611
interfaces := serviceLbSubnetIds.([]interface{})
601612
tmp := make([]string, len(interfaces))
602-
for i, toBeConverted := range interfaces {
603-
tmp[i] = toBeConverted.(string)
613+
for i := range interfaces {
614+
tmp[i] = interfaces[i].(string)
604615
}
605616
result.ServiceLbSubnetIds = tmp
606617
}
607618

608-
return result
619+
return result, nil
609620
}
610621

611622
func ClusterCreateOptionsToMap(obj *oci_containerengine.ClusterCreateOptions) map[string]interface{} {
@@ -676,20 +687,20 @@ func ClusterMetadataToMap(obj *oci_containerengine.ClusterMetadata) map[string]i
676687
return result
677688
}
678689

679-
func mapToKubernetesNetworkConfig(raw map[string]interface{}) oci_containerengine.KubernetesNetworkConfig {
690+
func (s *ClusterResourceCrud) mapToKubernetesNetworkConfig(fieldKeyFormat string) (oci_containerengine.KubernetesNetworkConfig, error) {
680691
result := oci_containerengine.KubernetesNetworkConfig{}
681692

682-
if podsCidr, ok := raw["pods_cidr"]; ok && podsCidr != "" {
693+
if podsCidr, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "pods_cidr")); ok {
683694
tmp := podsCidr.(string)
684695
result.PodsCidr = &tmp
685696
}
686697

687-
if servicesCidr, ok := raw["services_cidr"]; ok && servicesCidr != "" {
698+
if servicesCidr, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "services_cidr")); ok {
688699
tmp := servicesCidr.(string)
689700
result.ServicesCidr = &tmp
690701
}
691702

692-
return result
703+
return result, nil
693704
}
694705

695706
func KubernetesNetworkConfigToMap(obj *oci_containerengine.KubernetesNetworkConfig) map[string]interface{} {

provider/containerengine_node_pool_resource.go

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package provider
44

55
import (
66
"context"
7+
"fmt"
78

89
"github.com/hashicorp/terraform/helper/schema"
910

@@ -238,8 +239,14 @@ func (s *NodePoolResourceCrud) Create() error {
238239
if initialNodeLabels, ok := s.D.GetOkExists("initial_node_labels"); ok {
239240
interfaces := initialNodeLabels.([]interface{})
240241
tmp := make([]oci_containerengine.KeyValue, len(interfaces))
241-
for i, toBeConverted := range interfaces {
242-
tmp[i] = mapToKeyValue(toBeConverted.(map[string]interface{}))
242+
for i := range interfaces {
243+
stateDataIndex := i
244+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "initial_node_labels", stateDataIndex)
245+
converted, err := s.mapToKeyValue(fieldKeyFormat)
246+
if err != nil {
247+
return err
248+
}
249+
tmp[i] = converted
243250
}
244251
request.InitialNodeLabels = tmp
245252
}
@@ -279,8 +286,8 @@ func (s *NodePoolResourceCrud) Create() error {
279286
set := subnetIds.(*schema.Set)
280287
interfaces := set.List()
281288
tmp := make([]string, len(interfaces))
282-
for i, toBeConverted := range interfaces {
283-
tmp[i] = toBeConverted.(string)
289+
for i := range interfaces {
290+
tmp[i] = interfaces[i].(string)
284291
}
285292
request.SubnetIds = tmp
286293
}
@@ -357,8 +364,14 @@ func (s *NodePoolResourceCrud) Update() error {
357364
if initialNodeLabels, ok := s.D.GetOkExists("initial_node_labels"); ok {
358365
interfaces := initialNodeLabels.([]interface{})
359366
tmp := make([]oci_containerengine.KeyValue, len(interfaces))
360-
for i, toBeConverted := range interfaces {
361-
tmp[i] = mapToKeyValue(toBeConverted.(map[string]interface{}))
367+
for i := range interfaces {
368+
stateDataIndex := i
369+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "initial_node_labels", stateDataIndex)
370+
converted, err := s.mapToKeyValue(fieldKeyFormat)
371+
if err != nil {
372+
return err
373+
}
374+
tmp[i] = converted
362375
}
363376
request.InitialNodeLabels = tmp
364377
}
@@ -386,8 +399,8 @@ func (s *NodePoolResourceCrud) Update() error {
386399
set := subnetIds.(*schema.Set)
387400
interfaces := set.List()
388401
tmp := make([]string, len(interfaces))
389-
for i, toBeConverted := range interfaces {
390-
tmp[i] = toBeConverted.(string)
402+
for i := range interfaces {
403+
tmp[i] = interfaces[i].(string)
391404
}
392405
request.SubnetIds = tmp
393406
}
@@ -514,20 +527,20 @@ func ErrorToMap(obj *oci_containerengine.NodeError) map[string]interface{} {
514527
return result
515528
}
516529

517-
func mapToKeyValue(raw map[string]interface{}) oci_containerengine.KeyValue {
530+
func (s *NodePoolResourceCrud) mapToKeyValue(fieldKeyFormat string) (oci_containerengine.KeyValue, error) {
518531
result := oci_containerengine.KeyValue{}
519532

520-
if key, ok := raw["key"]; ok && key != "" {
533+
if key, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "key")); ok {
521534
tmp := key.(string)
522535
result.Key = &tmp
523536
}
524537

525-
if value, ok := raw["value"]; ok && value != "" {
538+
if value, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "value")); ok {
526539
tmp := value.(string)
527540
result.Value = &tmp
528541
}
529542

530-
return result
543+
return result, nil
531544
}
532545

533546
func KeyValueToMap(obj oci_containerengine.KeyValue) map[string]interface{} {

provider/core_boot_volume_resource.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package provider
44

55
import (
66
"context"
7+
"fmt"
78
"log"
89
"strconv"
910
"strings"
@@ -234,7 +235,11 @@ func (s *BootVolumeResourceCrud) Create() error {
234235

235236
if sourceDetails, ok := s.D.GetOkExists("source_details"); ok {
236237
if tmpList := sourceDetails.([]interface{}); len(tmpList) > 0 {
237-
tmp := mapToBootVolumeSourceDetails(tmpList[0].(map[string]interface{}))
238+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "source_details", 0)
239+
tmp, err := s.mapToBootVolumeSourceDetails(fieldKeyFormat)
240+
if err != nil {
241+
return err
242+
}
238243
request.SourceDetails = tmp
239244
}
240245
}
@@ -369,10 +374,10 @@ func (s *BootVolumeResourceCrud) SetData() error {
369374
return nil
370375
}
371376

372-
func mapToBootVolumeSourceDetails(raw map[string]interface{}) oci_core.BootVolumeSourceDetails {
377+
func (s *BootVolumeResourceCrud) mapToBootVolumeSourceDetails(fieldKeyFormat string) (oci_core.BootVolumeSourceDetails, error) {
373378
var baseObject oci_core.BootVolumeSourceDetails
374379
//discriminator
375-
typeRaw, ok := raw["type"]
380+
typeRaw, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "type"))
376381
var type_ string
377382
if ok {
378383
type_ = typeRaw.(string)
@@ -382,22 +387,22 @@ func mapToBootVolumeSourceDetails(raw map[string]interface{}) oci_core.BootVolum
382387
switch strings.ToLower(type_) {
383388
case strings.ToLower("bootVolume"):
384389
details := oci_core.BootVolumeSourceFromBootVolumeDetails{}
385-
if id, ok := raw["id"]; ok {
390+
if id, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "id")); ok {
386391
tmp := id.(string)
387392
details.Id = &tmp
388393
}
389394
baseObject = details
390395
case strings.ToLower("bootVolumeBackup"):
391396
details := oci_core.BootVolumeSourceFromBootVolumeBackupDetails{}
392-
if id, ok := raw["id"]; ok {
397+
if id, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "id")); ok {
393398
tmp := id.(string)
394399
details.Id = &tmp
395400
}
396401
baseObject = details
397402
default:
398-
log.Printf("[WARN] Unknown type '%v' was specified", type_)
403+
return nil, fmt.Errorf("unknown type '%v' was specified", type_)
399404
}
400-
return baseObject
405+
return baseObject, nil
401406
}
402407

403408
func BootVolumeSourceDetailsToMap(obj *oci_core.BootVolumeSourceDetails) map[string]interface{} {

provider/core_dhcp_options_resource.go

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"strings"
99

1010
"github.com/hashicorp/terraform/helper/schema"
11+
1112
"github.com/hashicorp/terraform/helper/validation"
1213

1314
"fmt"
@@ -213,8 +214,10 @@ func (s *DhcpOptionsResourceCrud) Create() error {
213214
if options, ok := s.D.GetOkExists("options"); ok {
214215
interfaces := options.([]interface{})
215216
tmp := make([]oci_core.DhcpOption, len(interfaces))
216-
for i, toBeConverted := range interfaces {
217-
converted, err := mapToDhcpOption(toBeConverted.(map[string]interface{}))
217+
for i := range interfaces {
218+
stateDataIndex := i
219+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "options", stateDataIndex)
220+
converted, err := s.mapToDhcpOption(fieldKeyFormat)
218221
if err != nil {
219222
return err
220223
}
@@ -283,8 +286,10 @@ func (s *DhcpOptionsResourceCrud) Update() error {
283286
if options, ok := s.D.GetOkExists("options"); ok {
284287
interfaces := options.([]interface{})
285288
tmp := make([]oci_core.DhcpOption, len(interfaces))
286-
for i, toBeConverted := range interfaces {
287-
converted, err := mapToDhcpOption(toBeConverted.(map[string]interface{}))
289+
for i := range interfaces {
290+
stateDataIndex := i
291+
fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "options", stateDataIndex)
292+
converted, err := s.mapToDhcpOption(fieldKeyFormat)
288293
if err != nil {
289294
return err
290295
}
@@ -350,10 +355,10 @@ func (s *DhcpOptionsResourceCrud) SetData() error {
350355
return nil
351356
}
352357

353-
func mapToDhcpOption(raw map[string]interface{}) (oci_core.DhcpOption, error) {
358+
func (s *DhcpOptionsResourceCrud) mapToDhcpOption(fieldKeyFormat string) (oci_core.DhcpOption, error) {
354359
var baseObject oci_core.DhcpOption
355360
//discriminator
356-
typeRaw, ok := raw["type"]
361+
typeRaw, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "type"))
357362
var type_ string
358363
if ok {
359364
type_ = typeRaw.(string)
@@ -362,47 +367,47 @@ func mapToDhcpOption(raw map[string]interface{}) (oci_core.DhcpOption, error) {
362367
}
363368
switch strings.ToLower(type_) {
364369
case strings.ToLower("DomainNameServer"):
365-
if searchDomainNames, ok := raw["search_domain_names"]; ok && len(searchDomainNames.([]interface{})) > 0 {
370+
if searchDomainNames, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "search_domain_names")); ok && len(searchDomainNames.([]interface{})) > 0 {
366371
return nil, fmt.Errorf("'search_domain_names' should not be specified for type DomainNameServer")
367372
}
368373
details := oci_core.DhcpDnsOption{}
369374
details.CustomDnsServers = []string{}
370-
if customDnsServers, ok := raw["custom_dns_servers"]; ok {
375+
if customDnsServers, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "custom_dns_servers")); ok {
371376
interfaces := customDnsServers.([]interface{})
372377
tmp := make([]string, len(interfaces))
373-
for i, toBeConverted := range interfaces {
374-
tmp[i] = toBeConverted.(string)
378+
for i := range interfaces {
379+
tmp[i] = interfaces[i].(string)
375380
}
376381
details.CustomDnsServers = tmp
377382
}
378-
if serverType, ok := raw["server_type"]; ok {
383+
if serverType, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "server_type")); ok {
379384
details.ServerType = oci_core.DhcpDnsOptionServerTypeEnum(serverType.(string))
380385
}
381386
baseObject = details
382387
case strings.ToLower("SearchDomain"):
383-
if customDnsServers, ok := raw["custom_dns_servers"]; ok && len(customDnsServers.([]interface{})) > 0 {
388+
if customDnsServers, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "custom_dns_servers")); ok && len(customDnsServers.([]interface{})) > 0 {
384389
return nil, fmt.Errorf("'custom_dns_servers' should not be specified for type SearchDomain")
385390
}
386391

387-
if serverType, ok := raw["server_type"]; ok && len(serverType.(string)) > 0 {
392+
if serverType, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "server_type")); ok && len(serverType.(string)) > 0 {
388393
return nil, fmt.Errorf("'server_type' should not be specified for type SearchDomain")
389394
}
390395

391396
details := oci_core.DhcpSearchDomainOption{}
392397
details.SearchDomainNames = []string{}
393-
if searchDomainNames, ok := raw["search_domain_names"]; ok {
398+
if searchDomainNames, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "search_domain_names")); ok {
394399
interfaces := searchDomainNames.([]interface{})
395400
tmp := make([]string, len(interfaces))
396-
for i, toBeConverted := range interfaces {
397-
tmp[i] = toBeConverted.(string)
401+
for i := range interfaces {
402+
tmp[i] = interfaces[i].(string)
398403
}
399404
details.SearchDomainNames = tmp
400405
}
401406
baseObject = details
402407
default:
403-
log.Printf("[WARN] Unknown type '%v' was specified", type_)
404-
return baseObject, fmt.Errorf("unknown type '%v' was specified", type_)
408+
return nil, fmt.Errorf("unknown type '%v' was specified", type_)
405409
}
410+
406411
return baseObject, nil
407412
}
408413

0 commit comments

Comments
 (0)