Skip to content

Commit 2c3cb7d

Browse files
committed
datasources
1 parent 25a2d7b commit 2c3cb7d

File tree

5 files changed

+97
-43
lines changed

5 files changed

+97
-43
lines changed

internal/convert/convert.go

Lines changed: 66 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,20 @@ import (
1414
)
1515

1616
const (
17-
resourceType = "resource"
18-
cluster = "mongodbatlas_cluster"
19-
advCluster = "mongodbatlas_advanced_cluster"
20-
valClusterType = "REPLICASET"
21-
valMaxPriority = 7
22-
valMinPriority = 1
23-
errFreeCluster = "free cluster (because no " + nRepSpecs + ")"
24-
errRepSpecs = "setting " + nRepSpecs
25-
errConfigs = "setting " + nConfig
26-
errPriority = "setting " + nPriority
27-
errNumShards = "setting " + nNumShards
17+
resourceType = "resource"
18+
dataSourceType = "data"
19+
cluster = "mongodbatlas_cluster"
20+
advCluster = "mongodbatlas_advanced_cluster"
21+
clusterPlural = "mongodbatlas_clusters"
22+
advClusterPlural = "mongodbatlas_advanced_clusters"
23+
valClusterType = "REPLICASET"
24+
valMaxPriority = 7
25+
valMinPriority = 1
26+
errFreeCluster = "free cluster (because no " + nRepSpecs + ")"
27+
errRepSpecs = "setting " + nRepSpecs
28+
errConfigs = "setting " + nConfig
29+
errPriority = "setting " + nPriority
30+
errNumShards = "setting " + nNumShards
2831
)
2932

3033
type attrVals struct {
@@ -43,34 +46,65 @@ func ClusterToAdvancedCluster(config []byte) ([]byte, error) {
4346
return nil, err
4447
}
4548
for _, resource := range parser.Body().Blocks() {
46-
labels := resource.Labels()
47-
resourceName := labels[0]
48-
if resource.Type() != resourceType || resourceName != cluster {
49-
continue
50-
}
51-
resourceb := resource.Body()
52-
if errDyn := checkDynamicBlock(resourceb); errDyn != nil {
53-
return nil, errDyn
54-
}
55-
labels[0] = advCluster
56-
resource.SetLabels(labels)
57-
58-
if resourceb.FirstMatchingBlock(nRepSpecs, nil) != nil {
59-
err = fillCluster(resourceb)
60-
} else {
61-
err = fillFreeTierCluster(resourceb)
62-
}
49+
converted, err := convertResource(resource)
6350
if err != nil {
6451
return nil, err
6552
}
66-
67-
resourceb.AppendNewline()
68-
hcl.AppendComment(resourceb, "Generated by atlas-cli-plugin-terraform.")
69-
hcl.AppendComment(resourceb, "Please confirm that all references to this resource are updated.")
53+
converted = converted || convertDataSource(resource)
54+
if converted {
55+
resourceb := resource.Body()
56+
resourceb.AppendNewline()
57+
hcl.AppendComment(resourceb, "Generated by atlas-cli-plugin-terraform.")
58+
hcl.AppendComment(resourceb, "Please confirm that all references to this resource are updated.")
59+
}
7060
}
7161
return parser.Bytes(), nil
7262
}
7363

64+
func convertResource(resource *hclwrite.Block) (bool, error) {
65+
labels := resource.Labels()
66+
resourceName := labels[0]
67+
if resource.Type() != resourceType || resourceName != cluster {
68+
return false, nil
69+
}
70+
resourceb := resource.Body()
71+
if errDyn := checkDynamicBlock(resourceb); errDyn != nil {
72+
return false, errDyn
73+
}
74+
labels[0] = advCluster
75+
resource.SetLabels(labels)
76+
77+
var err error
78+
if resourceb.FirstMatchingBlock(nRepSpecs, nil) != nil {
79+
err = fillCluster(resourceb)
80+
} else {
81+
err = fillFreeTierCluster(resourceb)
82+
}
83+
if err != nil {
84+
return false, err
85+
}
86+
return true, nil
87+
}
88+
89+
func convertDataSource(resource *hclwrite.Block) bool {
90+
if resource.Type() != dataSourceType {
91+
return false
92+
}
93+
labels := resource.Labels()
94+
resourceName := labels[0]
95+
if resourceName == cluster {
96+
labels[0] = advCluster
97+
resource.SetLabels(labels)
98+
return true
99+
}
100+
if resourceName == clusterPlural {
101+
labels[0] = advClusterPlural
102+
resource.SetLabels(labels)
103+
return true
104+
}
105+
return false
106+
}
107+
74108
// fillFreeTierCluster is the entry point to convert clusters in free tier
75109
func fillFreeTierCluster(resourceb *hclwrite.Body) error {
76110
resourceb.SetAttributeValue(nClusterType, cty.StringVal(valClusterType))
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
data "mongodbatlas_cluster" "singular" {
2+
# data source content is kep, only data source type is changed - singular
3+
project_id = mongodbatlas_advanced_cluster.example.project_id
4+
name = mongodbatlas_advanced_cluster.example.name
5+
depends_on = [mongodbatlas_privatelink_endpoint_service.example_endpoint]
6+
}
7+
8+
data "mongodbatlas_clusters" "plural" {
9+
# data source content is kep, only data source type is changed - plural
10+
project_id = mongodbatlas_advanced_cluster.example.project_id
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
data "mongodbatlas_advanced_cluster" "singular" {
2+
# data source content is kep, only data source type is changed - singular
3+
project_id = mongodbatlas_advanced_cluster.example.project_id
4+
name = mongodbatlas_advanced_cluster.example.name
5+
depends_on = [mongodbatlas_privatelink_endpoint_service.example_endpoint]
6+
7+
# Generated by atlas-cli-plugin-terraform.
8+
# Please confirm that all references to this resource are updated.
9+
}
10+
11+
data "mongodbatlas_advanced_clusters" "plural" {
12+
# data source content is kep, only data source type is changed - plural
13+
project_id = mongodbatlas_advanced_cluster.example.project_id
14+
15+
# Generated by atlas-cli-plugin-terraform.
16+
# Please confirm that all references to this resource are updated.
17+
}

internal/convert/testdata/clu2adv/free_cluster_with_count.in.tf

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,13 @@ resource "resource1" "res1" {
44

55
resource "mongodbatlas_cluster" "free_cluster" { # comment in the resource
66
# comment in own line in the beginning
7-
count = local.use_free_cluster ? 1 : 0
8-
project_id = var.project_id # inline comment kept
9-
name = var.cluster_name
7+
count = local.use_free_cluster ? 1 : 0
8+
project_id = var.project_id # inline comment kept
9+
name = var.cluster_name
1010
# comment in own line in the middle is deleted
1111
provider_name = "TENANT" # inline comment for attribute moved is not kept
1212
backing_provider_name = "AWS"
1313
provider_region_name = var.region
1414
provider_instance_size_name = "M0"
1515
# comment in own line at the end happens before replication_specs
1616
}
17-
18-
data "mongodbatlas_cluster" "cluster2" {
19-
name = "name4"
20-
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,3 @@ resource "mongodbatlas_advanced_cluster" "free_cluster" { # comment in the resou
2828
# Generated by atlas-cli-plugin-terraform.
2929
# Please confirm that all references to this resource are updated.
3030
}
31-
32-
data "mongodbatlas_cluster" "cluster2" {
33-
name = "name4"
34-
}

0 commit comments

Comments
 (0)