@@ -14,17 +14,20 @@ import (
1414)
1515
1616const (
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
3033type 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
75109func fillFreeTierCluster (resourceb * hclwrite.Body ) error {
76110 resourceb .SetAttributeValue (nClusterType , cty .StringVal (valClusterType ))
0 commit comments