@@ -120,9 +120,19 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler
120120 return updateClusterCallback (client , currentModel , * currentModel .ProjectId )
121121 }
122122 currentModel .validateDefaultLabel ()
123+
124+ currentCluster , resp , err := client .Atlas20231115014 .ClustersApi .GetCluster (context .Background (), * currentModel .ProjectId , * currentModel .Name ).Execute ()
125+ if pe := util .HandleClusterError (err , resp ); pe != nil {
126+ return * pe , nil
127+ }
128+
129+ // handle unpausing update
130+ if pe , _ := handleUnpausingUpdate (client , currentCluster , currentModel ); pe != nil {
131+ return * pe , nil
132+ }
133+
123134 adminCluster , errEvent := setClusterRequest (currentModel )
124135 if len (adminCluster .GetReplicationSpecs ()) > 0 {
125- currentCluster , _ , _ := client .Atlas20231115014 .ClustersApi .GetCluster (context .Background (), * currentModel .ProjectId , * currentModel .Name ).Execute ()
126136 if currentCluster != nil {
127137 adminCluster .ReplicationSpecs = AddReplicationSpecIDs (currentCluster .GetReplicationSpecs (), adminCluster .GetReplicationSpecs ())
128138 }
@@ -150,6 +160,26 @@ func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler
150160 return event , nil
151161}
152162
163+ func handleUnpausingUpdate (client * util.MongoDBClient , currentCluster * admin20231115014.AdvancedClusterDescription , currentModel * Model ) (* handler.ProgressEvent , error ) {
164+ if (currentCluster .Paused != nil && * currentCluster .Paused ) && (currentModel .Paused == nil || ! * currentModel .Paused ) {
165+ cluster , resp , err := client .Atlas20231115014 .ClustersApi .UpdateCluster (context .Background (), * currentModel .ProjectId , * currentModel .Name ,
166+ & admin20231115014.AdvancedClusterDescription {Paused : admin20231115014 .PtrBool (false )}).Execute ()
167+ if pe := util .HandleClusterError (err , resp ); pe != nil {
168+ return pe , nil
169+ }
170+ // returns InProgress event directly, if any other changes are made they will not be performed as part of this update operation
171+ event := handler.ProgressEvent {
172+ OperationStatus : handler .InProgress ,
173+ Message : fmt .Sprintf ("Unpausing Cluster %s" , * cluster .StateName ),
174+ ResourceModel : currentModel ,
175+ CallbackDelaySeconds : callBackSeconds ,
176+ CallbackContext : callbackContext ,
177+ }
178+ return & event , nil
179+ }
180+ return nil , nil
181+ }
182+
153183// Delete handles the Delete event from the Cloudformation service.
154184func Delete (req handler.Request , prevModel * Model , currentModel * Model ) (handler.ProgressEvent , error ) {
155185 client , setupErr := setupRequest (req , currentModel , createReadUpdateDeleteRequiredFields )
0 commit comments