Skip to content

Commit 969da96

Browse files
committed
fix region_configs name replacement
1 parent b4db307 commit 969da96

File tree

5 files changed

+29
-24
lines changed

5 files changed

+29
-24
lines changed

internal/convert/const_names.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,5 @@ const (
5454
nDynamic = "dynamic"
5555
nForEach = "for_each"
5656
nContent = "content"
57+
nRegion = "region"
5758
)

internal/convert/convert.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,8 @@ func extractTagsLabelsDynamicBlock(resourceb *hclwrite.Body, name string) (hclwr
264264
if key == nil || value == nil {
265265
return nil, fmt.Errorf("dynamic block %s: %s or %s not found", name, nKey, nValue)
266266
}
267-
keyExpr := replaceDynamicBlockExpr(key, nKey, name, "")
268-
valueExpr := replaceDynamicBlockExpr(value, nValue, name, "")
267+
keyExpr := replaceDynamicBlockExpr(key, name, nKey)
268+
valueExpr := replaceDynamicBlockExpr(value, name, nValue)
269269
collectionExpr := hcl.GetAttrExpr(d.forEach)
270270
forExpr := fmt.Sprintf("for key, value in %s : %s => %s", collectionExpr, keyExpr, valueExpr)
271271
tokens := hcl.TokensObjectFromExpr(forExpr)
@@ -321,16 +321,24 @@ func fillRegionConfigsDynamicBlock(specbSrc *hclwrite.Body, root attrVals) (dyna
321321
return dynamicBlock{}, fmt.Errorf("%s: %s not found", errRepSpecs, nNumShards)
322322
}
323323
zoneName := hcl.GetAttrExpr(specbSrc.GetAttribute(nZoneName))
324-
const nRegion = "region"
325324
configSrc := d.content
326325
configSrcb := configSrc.Body()
326+
var priorityStr string
327327

328-
oldPrefix := fmt.Sprintf("%s.%s", nConfigSrc, nValue)
329328
// Change value references in all attributes, e.g. regions_config.value.electable_nodes to region.electable_nodes
330329
for name, attr := range configSrcb.Attributes() {
331-
expr := replaceDynamicBlockExpr(attr, name, oldPrefix, nRegion)
330+
expr := hcl.GetAttrExpr(attr)
331+
expr = strings.ReplaceAll(expr,
332+
fmt.Sprintf("%s.%s.", nConfigSrc, nValue),
333+
fmt.Sprintf("%s.", nRegion))
334+
if name == nPriority {
335+
priorityStr = expr
336+
}
332337
configSrcb.SetAttributeRaw(name, hcl.TokensFromExpr(expr))
333338
}
339+
if priorityStr == "" {
340+
return dynamicBlock{}, fmt.Errorf("%s: %s not found", errRepSpecs, nPriority)
341+
}
334342
region, err := getRegionConfig(configSrc, root, true)
335343
if err != nil {
336344
return dynamicBlock{}, err
@@ -343,7 +351,7 @@ func fillRegionConfigsDynamicBlock(specbSrc *hclwrite.Body, root attrVals) (dyna
343351
}
344352
config := region.BuildTokens(nil)
345353
config = hcl.EncloseBraces(config, true)
346-
config = append(config, hcl.TokensFromExpr("if region.priority == priority")...)
354+
config = append(config, hcl.TokensFromExpr(fmt.Sprintf("if priority == %s", priorityStr))...)
347355
forRegion := hcl.TokensFromExpr(fmt.Sprintf("for region in %s :", hcl.GetAttrExpr(d.forEach)))
348356
forRegion = append(forRegion, config...)
349357

@@ -546,13 +554,9 @@ func getDynamicBlock(body *hclwrite.Body, name string) (dynamicBlock, error) {
546554
return dynamicBlock{}, nil
547555
}
548556

549-
func replaceDynamicBlockExpr(attr *hclwrite.Attribute, attrName, oldPrefix, newPrefix string) string {
557+
func replaceDynamicBlockExpr(attr *hclwrite.Attribute, blockName, attrName string) string {
550558
expr := hcl.GetAttrExpr(attr)
551-
newStr := attrName
552-
if newPrefix != "" {
553-
newStr = fmt.Sprintf("%s.%s", newPrefix, attrName)
554-
}
555-
return strings.ReplaceAll(expr, fmt.Sprintf("%s.%s", oldPrefix, attrName), newStr)
559+
return strings.ReplaceAll(expr, fmt.Sprintf("%s.%s", blockName, attrName), attrName)
556560
}
557561

558562
func sortConfigsByPriority(configs []*hclwrite.Body) []*hclwrite.Body {

internal/convert/testdata/clu2adv/dynamic_regions_config_auto_scaling.out.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ resource "mongodbatlas_advanced_cluster" "cluster" {
3939
auto_scaling = {
4040
disk_gb_enabled = var.auto_scaling_disk_gb_enabled
4141
}
42-
} if region.priority == priority
42+
} if priority == region.priority
4343
]
4444
])
4545
}

internal/convert/testdata/clu2adv/dynamic_regions_config.in.tf renamed to internal/convert/testdata/clu2adv/dynamic_regions_config_basic.in.tf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ resource "mongodbatlas_cluster" "dynamic_regions_config" {
66
provider_instance_size_name = "M10"
77
replication_specs {
88
num_shards = var.replication_specs.num_shards
9-
zone_name = "Zone 1"
9+
zone_name = var.zone_name
1010
dynamic "regions_config" {
1111
for_each = var.replication_specs.regions_config
1212
content {
1313
region_name = regions_config.value.region_name
1414
electable_nodes = regions_config.value.electable_nodes
15-
priority = regions_config.value.priority
15+
priority = regions_config.value.prio
1616
read_only_nodes = regions_config.value.read_only_nodes
1717
}
1818
}
@@ -26,7 +26,7 @@ variable "replication_specs" {
2626
regions_config = set(object({
2727
region_name = string
2828
electable_nodes = number
29-
priority = number
29+
prio = number
3030
read_only_nodes = number
3131
}))
3232
})
@@ -36,13 +36,13 @@ variable "replication_specs" {
3636
{
3737
region_name = "US_EAST_1"
3838
electable_nodes = 3
39-
priority = 7
39+
prio = 7
4040
read_only_nodes = 0
4141
},
4242
{
4343
region_name = "US_WEST_2"
4444
electable_nodes = 2
45-
priority = 6
45+
prio = 6
4646
read_only_nodes = 1
4747
}
4848
]

internal/convert/testdata/clu2adv/dynamic_regions_config.out.tf renamed to internal/convert/testdata/clu2adv/dynamic_regions_config_basic.out.tf

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ resource "mongodbatlas_advanced_cluster" "dynamic_regions_config" {
44
cluster_type = "SHARDED"
55
replication_specs = [
66
for i in range(var.replication_specs.num_shards) : {
7-
zone_name = "Zone 1"
7+
zone_name = var.zone_name
88
region_configs = flatten([
99
for priority in range(7, 0, -1) : [
1010
for region in var.replication_specs.regions_config : {
1111
provider_name = "AWS"
1212
region_name = region.region_name
13-
priority = region.priority
13+
priority = region.prio
1414
electable_specs = region.electable_nodes > 0 ? {
1515
node_count = region.electable_nodes
1616
instance_size = "M10"
@@ -19,7 +19,7 @@ resource "mongodbatlas_advanced_cluster" "dynamic_regions_config" {
1919
node_count = region.read_only_nodes
2020
instance_size = "M10"
2121
} : null
22-
} if region.priority == priority
22+
} if priority == region.prio
2323
]
2424
])
2525
}
@@ -36,7 +36,7 @@ variable "replication_specs" {
3636
regions_config = set(object({
3737
region_name = string
3838
electable_nodes = number
39-
priority = number
39+
prio = number
4040
read_only_nodes = number
4141
}))
4242
})
@@ -46,13 +46,13 @@ variable "replication_specs" {
4646
{
4747
region_name = "US_EAST_1"
4848
electable_nodes = 3
49-
priority = 7
49+
prio = 7
5050
read_only_nodes = 0
5151
},
5252
{
5353
region_name = "US_WEST_2"
5454
electable_nodes = 2
55-
priority = 6
55+
prio = 6
5656
read_only_nodes = 1
5757
}
5858
]

0 commit comments

Comments
 (0)