@@ -27,7 +27,7 @@ import (
2727 "github.com/mongodb/mongodbatlas-cloudformation-resources/util/logger"
2828 progress_events "github.com/mongodb/mongodbatlas-cloudformation-resources/util/progressevent"
2929 "github.com/mongodb/mongodbatlas-cloudformation-resources/util/validator"
30- admin20231115002 "go.mongodb.org/atlas-sdk/v20231115002 /admin"
30+ "go.mongodb.org/atlas-sdk/v20250312012 /admin"
3131)
3232
3333var RequiredFields = []string {constants .ProjectID }
@@ -56,15 +56,29 @@ func Create(req handler.Request, prevModel *Model, currentModel *Model) (handler
5656 return progress_events .GetFailedEventByCode ("resource already exists" , string (types .HandlerErrorCodeAlreadyExists )), nil
5757 }
5858
59+ // Handle Defer if requested
60+ if currentModel .Defer != nil && * currentModel .Defer {
61+ if pe := deferMaintenanceWindow (client , * currentModel .ProjectId ); pe != nil {
62+ return * pe , nil
63+ }
64+ }
65+
5966 atlasModel := currentModel .toAtlasModel ()
6067 startASP := false
6168 atlasModel .StartASAP = & startASP
6269
63- _ , resp , err := client .Atlas20231115002 .MaintenanceWindowsApi .UpdateMaintenanceWindow (context .Background (), * currentModel .ProjectId , & atlasModel ).Execute ()
70+ resp , err := client .AtlasSDK .MaintenanceWindowsApi .UpdateMaintenanceWindow (context .Background (), * currentModel .ProjectId , & atlasModel ).Execute ()
6471 if err != nil {
6572 return progress_events .GetFailedEventByResponse (err .Error (), resp ), nil
6673 }
6774
75+ // Handle AutoDefer if requested
76+ if currentModel .AutoDefer != nil && * currentModel .AutoDefer {
77+ if pe := toggleAutoDefer (client , * currentModel .ProjectId ); pe != nil {
78+ return * pe , nil
79+ }
80+ }
81+
6882 return handler.ProgressEvent {
6983 OperationStatus : handler .Success ,
7084 ResourceModel : * currentModel ,
@@ -92,7 +106,17 @@ func Read(req handler.Request, prevModel *Model, currentModel *Model) (handler.P
92106
93107 currentModel .AutoDeferOnceEnabled = maintenanceWindow .AutoDeferOnceEnabled
94108 currentModel .DayOfWeek = & maintenanceWindow .DayOfWeek
95- currentModel .HourOfDay = & maintenanceWindow .HourOfDay
109+ currentModel .HourOfDay = maintenanceWindow .HourOfDay
110+ currentModel .StartASAP = maintenanceWindow .StartASAP
111+ currentModel .NumberOfDeferrals = maintenanceWindow .NumberOfDeferrals
112+ currentModel .TimeZoneId = maintenanceWindow .TimeZoneId
113+
114+ if maintenanceWindow .ProtectedHours != nil {
115+ currentModel .ProtectedHours = & ProtectedHours {
116+ StartHourOfDay : maintenanceWindow .ProtectedHours .StartHourOfDay ,
117+ EndHourOfDay : maintenanceWindow .ProtectedHours .EndHourOfDay ,
118+ }
119+ }
96120
97121 return handler.ProgressEvent {
98122 OperationStatus : handler .Success ,
@@ -120,15 +144,35 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler
120144 return * handlerError , nil
121145 }
122146
147+ // Handle Defer if changed
148+ if currentModel .Defer != nil && * currentModel .Defer {
149+ if prevModel == nil || prevModel .Defer == nil || ! * prevModel .Defer {
150+ if pe := deferMaintenanceWindow (client , * currentModel .ProjectId ); pe != nil {
151+ return * pe , nil
152+ }
153+ }
154+ }
155+
123156 atlasModel := currentModel .toAtlasModel ()
124157 startASP := false
125158 atlasModel .StartASAP = & startASP
126159
127- _ , resp , err := client .Atlas20231115002 .MaintenanceWindowsApi .UpdateMaintenanceWindow (context .Background (), * currentModel .ProjectId , & atlasModel ).Execute ()
160+ resp , err := client .AtlasSDK .MaintenanceWindowsApi .UpdateMaintenanceWindow (context .Background (), * currentModel .ProjectId , & atlasModel ).Execute ()
128161 if err != nil {
129162 return progress_events .GetFailedEventByResponse (err .Error (), resp ), nil
130163 }
131164
165+ // Handle AutoDefer if changed
166+ if prevModel != nil {
167+ prevAutoDefer := prevModel .AutoDefer != nil && * prevModel .AutoDefer
168+ currAutoDefer := currentModel .AutoDefer != nil && * currentModel .AutoDefer
169+ if prevAutoDefer != currAutoDefer {
170+ if pe := toggleAutoDefer (client , * currentModel .ProjectId ); pe != nil {
171+ return * pe , nil
172+ }
173+ }
174+ }
175+
132176 return handler.ProgressEvent {
133177 OperationStatus : handler .Success ,
134178 ResourceModel : currentModel ,
@@ -154,7 +198,7 @@ func Delete(req handler.Request, prevModel *Model, currentModel *Model) (handler
154198 return * handlerError , nil
155199 }
156200
157- resp , err := client .Atlas20231115002 .MaintenanceWindowsApi .ResetMaintenanceWindow (context .Background (), * currentModel .ProjectId ).Execute ()
201+ resp , err := client .AtlasSDK .MaintenanceWindowsApi .ResetMaintenanceWindow (context .Background (), * currentModel .ProjectId ).Execute ()
158202 if err != nil {
159203 return progress_events .GetFailedEventByResponse (err .Error (), resp ), nil
160204 }
@@ -169,17 +213,28 @@ func List(req handler.Request, prevModel *Model, currentModel *Model) (handler.P
169213 return handler.ProgressEvent {}, errors .New ("not implemented: List" )
170214}
171215
172- func (m Model ) toAtlasModel () admin20231115002 .GroupMaintenanceWindow {
173- return admin20231115002 .GroupMaintenanceWindow {
216+ func (m Model ) toAtlasModel () admin .GroupMaintenanceWindow {
217+ return admin .GroupMaintenanceWindow {
174218 DayOfWeek : * m .DayOfWeek ,
175- HourOfDay : * m .HourOfDay ,
219+ HourOfDay : m .HourOfDay ,
176220 StartASAP : m .StartASAP ,
177221 AutoDeferOnceEnabled : m .AutoDeferOnceEnabled ,
222+ ProtectedHours : m .toProtectedHours (),
178223 }
179224}
180225
181- func get (client * util.MongoDBClient , currentModel Model ) (* admin20231115002.GroupMaintenanceWindow , * handler.ProgressEvent ) {
182- maintenanceWindow , resp , err := client .Atlas20231115002 .MaintenanceWindowsApi .GetMaintenanceWindow (context .Background (), * currentModel .ProjectId ).Execute ()
226+ func (m Model ) toProtectedHours () * admin.ProtectedHours {
227+ if m .ProtectedHours == nil {
228+ return nil
229+ }
230+ return & admin.ProtectedHours {
231+ StartHourOfDay : m .ProtectedHours .StartHourOfDay ,
232+ EndHourOfDay : m .ProtectedHours .EndHourOfDay ,
233+ }
234+ }
235+
236+ func get (client * util.MongoDBClient , currentModel Model ) (* admin.GroupMaintenanceWindow , * handler.ProgressEvent ) {
237+ maintenanceWindow , resp , err := client .AtlasSDK .MaintenanceWindowsApi .GetMaintenanceWindow (context .Background (), * currentModel .ProjectId ).Execute ()
183238 if err != nil {
184239 _ , _ = logger .Warnf ("Read - error: %+v" , err )
185240 ev := progress_events .GetFailedEventByResponse (err .Error (), resp )
@@ -195,6 +250,30 @@ func get(client *util.MongoDBClient, currentModel Model) (*admin20231115002.Grou
195250 return maintenanceWindow , nil
196251}
197252
198- func isResponseEmpty (maintenanceWindow * admin20231115002.GroupMaintenanceWindow ) bool {
199- return maintenanceWindow != nil && maintenanceWindow .DayOfWeek == 0
253+ func isResponseEmpty (maintenanceWindow * admin.GroupMaintenanceWindow ) bool {
254+ return maintenanceWindow != nil && maintenanceWindow .GetDayOfWeek () == 0
255+ }
256+
257+ func deferMaintenanceWindow (client * util.MongoDBClient , projectID string ) * handler.ProgressEvent {
258+ _ , err := client .AtlasSDK .MaintenanceWindowsApi .DeferMaintenanceWindow (context .Background (), projectID ).Execute ()
259+ if err != nil {
260+ return & handler.ProgressEvent {
261+ OperationStatus : handler .Failed ,
262+ Message : err .Error (),
263+ HandlerErrorCode : "GeneralServiceException" ,
264+ }
265+ }
266+ return nil
267+ }
268+
269+ func toggleAutoDefer (client * util.MongoDBClient , projectID string ) * handler.ProgressEvent {
270+ _ , err := client .AtlasSDK .MaintenanceWindowsApi .ToggleMaintenanceAutoDefer (context .Background (), projectID ).Execute ()
271+ if err != nil {
272+ return & handler.ProgressEvent {
273+ OperationStatus : handler .Failed ,
274+ Message : err .Error (),
275+ HandlerErrorCode : "GeneralServiceException" ,
276+ }
277+ }
278+ return nil
200279}
0 commit comments