Skip to content

Commit a37eee4

Browse files
author
sivaram-mongodb
committed
feat: Search Deployment CloudFormation Resource
1 parent 6fd44b2 commit a37eee4

15 files changed

Lines changed: 1338 additions & 237 deletions

cfn-resources/search-deployment/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ run-contract-testing:
3030
@echo "==> Run contract testing"
3131
make build
3232
sam local start-lambda &
33-
cfn test --function-name TestEntrypoint --verbose
33+
cfn test --verbose --enforce-timeout 3600

cfn-resources/search-deployment/cmd/resource/mappings.go

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,49 @@
1414

1515
package resource
1616

17-
import admin20231115014 "go.mongodb.org/atlas-sdk/v20231115014/admin"
17+
import (
18+
admin20250312010 "go.mongodb.org/atlas-sdk/v20250312010/admin"
1819

19-
func NewCFNSearchDeployment(prevModel *Model, apiResp *admin20231115014.ApiSearchDeploymentResponse) Model {
20+
"github.com/mongodb/mongodbatlas-cloudformation-resources/util"
21+
)
22+
23+
func NewCFNSearchDeployment(prevModel *Model, apiResp *admin20250312010.ApiSearchDeploymentResponse) Model {
2024
respSpecs := apiResp.GetSpecs()
2125
resultSpecs := make([]ApiSearchDeploymentSpec, len(respSpecs))
2226
for i := range respSpecs {
27+
instanceSize := respSpecs[i].InstanceSize
28+
// Follow cluster pattern: directly assign NodeCount from API response
29+
// Reference: mongodbatlas-cloudformation-resources/cfn-resources/cluster/cmd/resource/mappings.go:305,317
30+
// Note: API returns int, but CFN model expects *int, so convert to pointer
31+
nodeCount := respSpecs[i].NodeCount
2332
resultSpecs[i] = ApiSearchDeploymentSpec{
24-
InstanceSize: &respSpecs[i].InstanceSize,
25-
NodeCount: &respSpecs[i].NodeCount,
33+
InstanceSize: &instanceSize,
34+
NodeCount: util.IntPtr(nodeCount),
2635
}
2736
}
28-
return Model{
29-
Profile: prevModel.Profile,
30-
ClusterName: prevModel.ClusterName,
31-
ProjectId: prevModel.ProjectId,
32-
Id: apiResp.Id,
33-
Specs: resultSpecs,
34-
StateName: apiResp.StateName,
37+
38+
finalModel := Model{
39+
Profile: prevModel.Profile,
40+
ClusterName: prevModel.ClusterName,
41+
ProjectId: prevModel.ProjectId,
42+
Id: apiResp.Id,
43+
Specs: resultSpecs,
44+
StateName: apiResp.StateName,
45+
EncryptionAtRestProvider: apiResp.EncryptionAtRestProvider,
3546
}
47+
48+
return finalModel
3649
}
3750

38-
func NewSearchDeploymentReq(model *Model) admin20231115014.ApiSearchDeploymentRequest {
51+
func NewSearchDeploymentReq(model *Model) admin20250312010.ApiSearchDeploymentRequest {
3952
modelSpecs := model.Specs
40-
requestSpecs := make([]admin20231115014.ApiSearchDeploymentSpec, len(modelSpecs))
53+
requestSpecs := make([]admin20250312010.ApiSearchDeploymentSpec, len(modelSpecs))
4154
for i, spec := range modelSpecs {
4255
// Both spec fields are required in CFN model and will be defined
43-
requestSpecs[i] = admin20231115014.ApiSearchDeploymentSpec{
56+
requestSpecs[i] = admin20250312010.ApiSearchDeploymentSpec{
4457
InstanceSize: *spec.InstanceSize,
4558
NodeCount: *spec.NodeCount,
4659
}
4760
}
48-
return admin20231115014.ApiSearchDeploymentRequest{Specs: requestSpecs}
61+
return admin20250312010.ApiSearchDeploymentRequest{Specs: requestSpecs}
4962
}

cfn-resources/search-deployment/cmd/resource/mappings_test.go

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import (
1919

2020
"github.com/mongodb/mongodbatlas-cloudformation-resources/search-deployment/cmd/resource"
2121
"github.com/stretchr/testify/assert"
22-
admin20231115014 "go.mongodb.org/atlas-sdk/v20231115014/admin"
22+
admin20250312010 "go.mongodb.org/atlas-sdk/v20250312010/admin"
2323
)
2424

2525
type sdkToCFNModelTestCase struct {
2626
prevModel resource.Model
2727
expectedModel resource.Model
28-
SDKResp admin20231115014.ApiSearchDeploymentResponse
28+
SDKResp admin20250312010.ApiSearchDeploymentResponse
2929
name string
3030
}
3131

@@ -44,54 +44,54 @@ func TestSDKToCFNModel(t *testing.T) {
4444
{
4545
name: "Complete SDK response",
4646
prevModel: resource.Model{
47-
Profile: admin20231115014.PtrString(profile),
48-
ClusterName: admin20231115014.PtrString(clusterName),
49-
ProjectId: admin20231115014.PtrString(dummyProjectID),
47+
Profile: admin20250312010.PtrString(profile),
48+
ClusterName: admin20250312010.PtrString(clusterName),
49+
ProjectId: admin20250312010.PtrString(dummyProjectID),
5050
},
51-
SDKResp: admin20231115014.ApiSearchDeploymentResponse{
52-
Id: admin20231115014.PtrString(dummyDeploymentID),
53-
GroupId: admin20231115014.PtrString(dummyProjectID),
54-
StateName: admin20231115014.PtrString(stateName),
55-
Specs: &[]admin20231115014.ApiSearchDeploymentSpec{
51+
SDKResp: admin20250312010.ApiSearchDeploymentResponse{
52+
Id: admin20250312010.PtrString(dummyDeploymentID),
53+
GroupId: admin20250312010.PtrString(dummyProjectID),
54+
StateName: admin20250312010.PtrString(stateName),
55+
Specs: &[]admin20250312010.ApiSearchDeploymentSpec{
5656
{
5757
InstanceSize: instanceSize,
5858
NodeCount: nodeCount,
5959
},
6060
},
6161
},
6262
expectedModel: resource.Model{
63-
Profile: admin20231115014.PtrString(profile),
64-
ClusterName: admin20231115014.PtrString(clusterName),
65-
ProjectId: admin20231115014.PtrString(dummyProjectID),
66-
Id: admin20231115014.PtrString(dummyDeploymentID),
67-
StateName: admin20231115014.PtrString(stateName),
63+
Profile: admin20250312010.PtrString(profile),
64+
ClusterName: admin20250312010.PtrString(clusterName),
65+
ProjectId: admin20250312010.PtrString(dummyProjectID),
66+
Id: admin20250312010.PtrString(dummyDeploymentID),
67+
StateName: admin20250312010.PtrString(stateName),
6868
Specs: []resource.ApiSearchDeploymentSpec{
6969
{
70-
InstanceSize: admin20231115014.PtrString(instanceSize),
71-
NodeCount: admin20231115014.PtrInt(nodeCount),
70+
InstanceSize: admin20250312010.PtrString(instanceSize),
71+
NodeCount: admin20250312010.PtrInt(nodeCount),
7272
},
7373
},
7474
},
7575
},
7676
{
7777
name: "Empty specs array",
7878
prevModel: resource.Model{
79-
Profile: admin20231115014.PtrString(profile),
80-
ClusterName: admin20231115014.PtrString(clusterName),
81-
ProjectId: admin20231115014.PtrString(dummyProjectID),
79+
Profile: admin20250312010.PtrString(profile),
80+
ClusterName: admin20250312010.PtrString(clusterName),
81+
ProjectId: admin20250312010.PtrString(dummyProjectID),
8282
},
83-
SDKResp: admin20231115014.ApiSearchDeploymentResponse{
84-
Id: admin20231115014.PtrString(dummyDeploymentID),
85-
GroupId: admin20231115014.PtrString(dummyProjectID),
86-
StateName: admin20231115014.PtrString(stateName),
87-
Specs: &[]admin20231115014.ApiSearchDeploymentSpec{},
83+
SDKResp: admin20250312010.ApiSearchDeploymentResponse{
84+
Id: admin20250312010.PtrString(dummyDeploymentID),
85+
GroupId: admin20250312010.PtrString(dummyProjectID),
86+
StateName: admin20250312010.PtrString(stateName),
87+
Specs: &[]admin20250312010.ApiSearchDeploymentSpec{},
8888
},
8989
expectedModel: resource.Model{
90-
Profile: admin20231115014.PtrString(profile),
91-
ClusterName: admin20231115014.PtrString(clusterName),
92-
ProjectId: admin20231115014.PtrString(dummyProjectID),
93-
Id: admin20231115014.PtrString(dummyDeploymentID),
94-
StateName: admin20231115014.PtrString(stateName),
90+
Profile: admin20250312010.PtrString(profile),
91+
ClusterName: admin20250312010.PtrString(clusterName),
92+
ProjectId: admin20250312010.PtrString(dummyProjectID),
93+
Id: admin20250312010.PtrString(dummyDeploymentID),
94+
StateName: admin20250312010.PtrString(stateName),
9595
Specs: []resource.ApiSearchDeploymentSpec{},
9696
},
9797
},
@@ -109,25 +109,25 @@ func TestCFNModelToSDK(t *testing.T) {
109109
testCases := []struct {
110110
model resource.Model
111111
name string
112-
expectedSDKReq admin20231115014.ApiSearchDeploymentRequest
112+
expectedSDKReq admin20250312010.ApiSearchDeploymentRequest
113113
}{
114114
{
115115
name: "Complete CFN model",
116116
model: resource.Model{
117-
Profile: admin20231115014.PtrString(profile),
118-
ClusterName: admin20231115014.PtrString(clusterName),
119-
ProjectId: admin20231115014.PtrString(dummyProjectID),
120-
Id: admin20231115014.PtrString(dummyDeploymentID),
121-
StateName: admin20231115014.PtrString(stateName),
117+
Profile: admin20250312010.PtrString(profile),
118+
ClusterName: admin20250312010.PtrString(clusterName),
119+
ProjectId: admin20250312010.PtrString(dummyProjectID),
120+
Id: admin20250312010.PtrString(dummyDeploymentID),
121+
StateName: admin20250312010.PtrString(stateName),
122122
Specs: []resource.ApiSearchDeploymentSpec{
123123
{
124-
InstanceSize: admin20231115014.PtrString(instanceSize),
125-
NodeCount: admin20231115014.PtrInt(nodeCount),
124+
InstanceSize: admin20250312010.PtrString(instanceSize),
125+
NodeCount: admin20250312010.PtrInt(nodeCount),
126126
},
127127
},
128128
},
129-
expectedSDKReq: admin20231115014.ApiSearchDeploymentRequest{
130-
Specs: []admin20231115014.ApiSearchDeploymentSpec{
129+
expectedSDKReq: admin20250312010.ApiSearchDeploymentRequest{
130+
Specs: []admin20250312010.ApiSearchDeploymentSpec{
131131
{
132132
InstanceSize: instanceSize,
133133
NodeCount: nodeCount,
@@ -138,15 +138,15 @@ func TestCFNModelToSDK(t *testing.T) {
138138
{
139139
name: "Empty specs array",
140140
model: resource.Model{
141-
Profile: admin20231115014.PtrString(profile),
142-
ClusterName: admin20231115014.PtrString(clusterName),
143-
ProjectId: admin20231115014.PtrString(dummyProjectID),
144-
Id: admin20231115014.PtrString(dummyDeploymentID),
145-
StateName: admin20231115014.PtrString(stateName),
141+
Profile: admin20250312010.PtrString(profile),
142+
ClusterName: admin20250312010.PtrString(clusterName),
143+
ProjectId: admin20250312010.PtrString(dummyProjectID),
144+
Id: admin20250312010.PtrString(dummyDeploymentID),
145+
StateName: admin20250312010.PtrString(stateName),
146146
Specs: []resource.ApiSearchDeploymentSpec{},
147147
},
148-
expectedSDKReq: admin20231115014.ApiSearchDeploymentRequest{
149-
Specs: []admin20231115014.ApiSearchDeploymentSpec{},
148+
expectedSDKReq: admin20250312010.ApiSearchDeploymentRequest{
149+
Specs: []admin20250312010.ApiSearchDeploymentSpec{},
150150
},
151151
},
152152
}

cfn-resources/search-deployment/cmd/resource/model.go

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)