Skip to content

Commit ddc9e12

Browse files
Exempted - Bug Fix for Resource Discovery Duplicate Resource Name
1 parent bc9fc72 commit ddc9e12

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

internal/commonexport/commonexport_functions.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,8 @@ func FindResourcesGeneric(ctx *ResourceDiscoveryContext, tfMeta *TerraformResour
587587
}
588588

589589
if resource.TerraformName, err = GenerateTerraformNameFromResource(resource.SourceAttributes, elemResource.Schema); err != nil {
590-
resource.TerraformName = fmt.Sprintf("%s_%s_%d", parent.TerraformName, tfMeta.ResourceAbbreviation, idx+1)
590+
resource.TerraformName = fmt.Sprintf("%s_%s", parent.TerraformName, tfMeta.ResourceAbbreviation)
591+
resource.TerraformName = CheckDuplicateResourceName(resource.TerraformName)
591592
}
592593

593594
results = append(results, resource)
@@ -601,6 +602,7 @@ func FindResourcesGeneric(ctx *ResourceDiscoveryContext, tfMeta *TerraformResour
601602

602603
if resource.TerraformName, err = GenerateTerraformNameFromResource(resource.SourceAttributes, datasource.Schema); err != nil {
603604
resource.TerraformName = fmt.Sprintf("%s_%s", parent.TerraformName, tfMeta.ResourceAbbreviation)
605+
resource.TerraformName = CheckDuplicateResourceName(resource.TerraformName)
604606
}
605607

606608
discoverable := true
@@ -826,15 +828,7 @@ var GenerateTerraformNameFromResource = func(resourceAttributes map[string]inter
826828
if nameSchema, hasNameAttr := resourceSchema[nameAttribute]; hasNameAttr && nameSchema.Type == schema.TypeString {
827829
if value, exists := resourceAttributes[nameAttribute]; exists {
828830
terraformName := getNormalizedTerraformName(value.(string))
829-
resourceNameCountLock.Lock()
830-
if count, resourceNameExists := ResourceNameCount[terraformName]; resourceNameExists {
831-
// Update count for existing name
832-
ResourceNameCount[terraformName] = count + 1
833-
terraformName = fmt.Sprintf("%s_%d", terraformName, count)
834-
}
835-
// add the newly generated name to map
836-
ResourceNameCount[terraformName] = 1
837-
resourceNameCountLock.Unlock()
831+
terraformName = CheckDuplicateResourceName(terraformName)
838832
return terraformName, nil
839833
}
840834
}
@@ -843,6 +837,18 @@ var GenerateTerraformNameFromResource = func(resourceAttributes map[string]inter
843837
return "", fmt.Errorf("unable to find a suitable name from the resource attributes")
844838
}
845839

840+
var CheckDuplicateResourceName = func(terraformName string) string {
841+
ResourceNameCountLock.Lock()
842+
if count, resourceNameExists := ResourceNameCount[terraformName]; resourceNameExists {
843+
ResourceNameCount[terraformName] = count + 1
844+
terraformName = fmt.Sprintf("%s_%d", terraformName, count)
845+
846+
}
847+
ResourceNameCount[terraformName] = 1
848+
ResourceNameCountLock.Unlock()
849+
return terraformName
850+
}
851+
846852
func getNormalizedTerraformName(source string) string {
847853
// Only alphanumeric, underscore, and hyphens are allowed. Strip out anything else.
848854
reg, err := regexp.Compile(`[^a-zA-Z0-9\-\_]+`)

internal/commonexport/commonexport_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ var FailedResourceReferenceSet map[string]bool // stores the terraform reference
230230
var CompartmentResourceGraphs = make(map[string]TerraformResourceGraph)
231231
var TenancyResourceGraphs = map[string]TerraformResourceGraph{}
232232
var RefMapLock sync.Mutex
233-
var resourceNameCountLock sync.Mutex
233+
var ResourceNameCountLock sync.Mutex
234234
var ReferenceMap map[string]string // stores references to replace the ocids in config
235235
var LoadBalancerCertificateNameMap map[string]map[string]string // helper map to generate references for certificate names, stores certificate name to certificate name interpolation
236236
var ResourceNameCount map[string]int

internal/resourcediscovery/export_compartment_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1560,7 +1560,7 @@ func TestUnitGetHCLString_basic(t *testing.T) {
15601560
}
15611561
resultHcl := testStringBuilder.String()
15621562

1563-
expectedHclResult := `resource oci_test_child export_string3_child_2 {
1563+
expectedHclResult := `resource oci_test_child export_string3_child_1 {
15641564
a_bool = "true"
15651565
a_float = "3.3"
15661566
a_int = "3"

internal/resourcediscovery/export_resource_helpers.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -519,14 +519,8 @@ func (r *resourceDiscoveryWithTargetIds) discover() error {
519519
}
520520

521521
if ociResource.TerraformName, err = tf_export.GenerateTerraformNameFromResource(ociResource.SourceAttributes, resourceSchema.Schema); err != nil {
522-
terraformName := fmt.Sprintf("export_%s", resourceHint.ResourceAbbreviation)
523-
if count, resourceNameExists := tf_export.ResourceNameCount[terraformName]; resourceNameExists {
524-
tf_export.ResourceNameCount[terraformName] = count + 1
525-
terraformName = fmt.Sprintf("%s_%d", terraformName, count)
526-
} else {
527-
tf_export.ResourceNameCount[terraformName] = 1
528-
}
529-
ociResource.TerraformName = terraformName
522+
ociResource.TerraformName = fmt.Sprintf("export_%s", resourceHint.ResourceAbbreviation)
523+
ociResource.TerraformName = tf_export.CheckDuplicateResourceName(ociResource.TerraformName)
530524
}
531525

532526
r.discoveredResources = append(r.discoveredResources, ociResource)

internal/service/identity/identity_export.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ func findIdentityTags(ctx *tf_export.ResourceDiscoveryContext, tfMeta *tf_export
113113

114114
if resource.TerraformName, err = tf_export.GenerateTerraformNameFromResource(resource.SourceAttributes, tagResource.Schema); err != nil {
115115
resource.TerraformName = fmt.Sprintf("%s_%s", parent.Parent.TerraformName, *tag.Name)
116+
resource.TerraformName = tf_export.CheckDuplicateResourceName(resource.TerraformName)
116117
}
117118

118119
results = append(results, resource)

internal/service/log_analytics/log_analytics_export.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func findLogAnalyticsObjectCollectionRules(ctx *tf_export.ResourceDiscoveryConte
9494

9595
if resource.TerraformName, err = tf_export.GenerateTerraformNameFromResource(resource.SourceAttributes, logAnalyticsObjectCollectionRuleResource.Schema); err != nil {
9696
resource.TerraformName = fmt.Sprintf("%s_%s", parent.Parent.TerraformName, *logAnalyticsObjectCollectionRule.Name)
97+
resource.TerraformName = tf_export.CheckDuplicateResourceName(resource.TerraformName)
9798
}
9899

99100
results = append(results, resource)

0 commit comments

Comments
 (0)