Skip to content

Commit c008f6f

Browse files
authored
INTMDB-230: added property to maintenance window rs ds (#552)
* added property to maintenance window rs ds * changed go.mod * fix go.sum * fixes lint * fix go.sum * fix maintenance window documentation * fix maintenance window resource documentation
1 parent 4689a7f commit c008f6f

6 files changed

+84
-10
lines changed

mongodbatlas/data_source_mongodbatlas_maintenance_window.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package mongodbatlas
22

33
import (
44
"context"
5-
"fmt"
65

76
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
87
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -33,6 +32,10 @@ func dataSourceMongoDBAtlasMaintenanceWindow() *schema.Resource {
3332
Type: schema.TypeInt,
3433
Computed: true,
3534
},
35+
"auto_defer_once_enabled": {
36+
Type: schema.TypeBool,
37+
Computed: true,
38+
},
3639
},
3740
}
3841
}
@@ -44,23 +47,27 @@ func dataSourceMongoDBAtlasMaintenanceWindowRead(ctx context.Context, d *schema.
4447

4548
maintenance, _, err := conn.MaintenanceWindows.Get(ctx, projectID)
4649
if err != nil {
47-
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, projectID, err))
50+
return diag.Errorf(errorMaintenanceRead, projectID, err)
4851
}
4952

5053
if err := d.Set("day_of_week", maintenance.DayOfWeek); err != nil {
51-
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, projectID, err))
54+
return diag.Errorf(errorMaintenanceRead, projectID, err)
5255
}
5356

5457
if err := d.Set("hour_of_day", maintenance.HourOfDay); err != nil {
55-
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, projectID, err))
58+
return diag.Errorf(errorMaintenanceRead, projectID, err)
5659
}
5760

5861
if err := d.Set("number_of_deferrals", maintenance.NumberOfDeferrals); err != nil {
59-
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, projectID, err))
62+
return diag.Errorf(errorMaintenanceRead, projectID, err)
6063
}
6164

6265
if err := d.Set("start_asap", cast.ToBool(maintenance.StartASAP)); err != nil {
63-
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, projectID, err))
66+
return diag.Errorf(errorMaintenanceRead, projectID, err)
67+
}
68+
69+
if err := d.Set("auto_defer_once_enabled", cast.ToBool(maintenance.AutoDeferOnceEnabled)); err != nil {
70+
return diag.Errorf(errorMaintenanceRead, projectID, err)
6471
}
6572

6673
d.SetId(projectID)

mongodbatlas/data_source_mongodbatlas_maintenance_window_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func TestAccDataSourceMongoDBAtlasMaintenanceWindow_basic(t *testing.T) {
2727
resource.TestCheckResourceAttrSet("data.mongodbatlas_maintenance_window.test", "project_id"),
2828
resource.TestCheckResourceAttrSet("data.mongodbatlas_maintenance_window.test", "day_of_week"),
2929
resource.TestCheckResourceAttrSet("data.mongodbatlas_maintenance_window.test", "hour_of_day"),
30+
resource.TestCheckResourceAttrSet("data.mongodbatlas_maintenance_window.test", "auto_defer_once_enabled"),
3031
),
3132
},
3233
},
@@ -39,6 +40,7 @@ func testAccMongoDBAtlasDataSourceMaintenanceWindowConfig(projectID string, dayO
3940
project_id = "%s"
4041
day_of_week = %d
4142
hour_of_day = %d
43+
auto_defer_once_enabled = true
4244
}
4345
4446
data "mongodbatlas_maintenance_window" "test" {

mongodbatlas/resource_mongodbatlas_maintenance_window.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ func resourceMongoDBAtlasMaintenanceWindow() *schema.Resource {
7979
Optional: true,
8080
Computed: true,
8181
},
82+
"auto_defer_once_enabled": {
83+
Type: schema.TypeBool,
84+
Optional: true,
85+
Computed: true,
86+
},
8287
},
8388
}
8489
}
@@ -117,6 +122,10 @@ func resourceMongoDBAtlasMaintenanceWindowCreate(ctx context.Context, d *schema.
117122
maintenanceWindowReq.NumberOfDeferrals = cast.ToInt(numberOfDeferrals)
118123
}
119124

125+
if autoDeferOnceEnabled, ok := d.GetOk("auto_defer_once_enabled"); ok {
126+
maintenanceWindowReq.AutoDeferOnceEnabled = pointy.Bool(autoDeferOnceEnabled.(bool))
127+
}
128+
120129
_, err := conn.MaintenanceWindows.Update(ctx, projectID, maintenanceWindowReq)
121130
if err != nil {
122131
return diag.FromErr(fmt.Errorf(errorMaintenanceCreate, projectID, err))
@@ -153,12 +162,18 @@ func resourceMongoDBAtlasMaintenanceWindowRead(ctx context.Context, d *schema.Re
153162
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, d.Id(), err))
154163
}
155164
// start_asap is just display the state of the maintenance,
156-
// and it doesn't able to set it because breacks the Terraform flow
165+
// and it doesn't able to set it because breaks the Terraform flow
157166
// it can be used via API
158167
if err := d.Set("start_asap", maintenanceWindow.StartASAP); err != nil {
159168
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, d.Id(), err))
160169
}
161170

171+
if maintenanceWindow.AutoDeferOnceEnabled != nil {
172+
if err := d.Set("auto_defer_once_enabled", *maintenanceWindow.AutoDeferOnceEnabled); err != nil {
173+
return diag.Errorf(errorMaintenanceRead, d.Id(), err)
174+
}
175+
}
176+
162177
if err := d.Set("project_id", d.Id()); err != nil {
163178
return diag.FromErr(fmt.Errorf(errorMaintenanceRead, d.Id(), err))
164179
}
@@ -198,6 +213,10 @@ func resourceMongoDBAtlasMaintenanceWindowUpdate(ctx context.Context, d *schema.
198213
maintenanceWindowReq.NumberOfDeferrals = cast.ToInt(d.Get("number_of_deferrals"))
199214
}
200215

216+
if d.HasChange("auto_defer_once_enabled") {
217+
maintenanceWindowReq.AutoDeferOnceEnabled = pointy.Bool(d.Get("number_of_deferrals").(bool))
218+
}
219+
201220
_, err := conn.MaintenanceWindows.Update(ctx, d.Id(), maintenanceWindowReq)
202221
if err != nil {
203222
return diag.FromErr(fmt.Errorf(errorMaintenanceUpdate, d.Id(), err))

mongodbatlas/resource_mongodbatlas_maintenance_window_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,50 @@ func TestAccResourceMongoDBAtlasMaintenanceWindow_importBasic(t *testing.T) {
104104
})
105105
}
106106

107+
func TestAccResourceMongoDBAtlasMaintenanceWindow_autoDeferActivated(t *testing.T) {
108+
var (
109+
maintenance matlas.MaintenanceWindow
110+
resourceName = "mongodbatlas_maintenance_window.test"
111+
projectID = os.Getenv("MONGODB_ATLAS_PROJECT_ID")
112+
dayOfWeek = 7
113+
hourOfDay = 3
114+
)
115+
116+
resource.Test(t, resource.TestCase{
117+
PreCheck: func() { testAccPreCheck(t) },
118+
ProviderFactories: testAccProviderFactories,
119+
CheckDestroy: testAccCheckMongoDBAtlasMaintenanceWindowDestroy,
120+
Steps: []resource.TestStep{
121+
{
122+
Config: testAccMongoDBAtlasMaintenanceWindowConfigAutoDeferEnabled(projectID, dayOfWeek, hourOfDay),
123+
Check: resource.ComposeTestCheckFunc(
124+
testAccCheckMongoDBAtlasMaintenanceWindowExists(resourceName, &maintenance),
125+
resource.TestCheckResourceAttrSet(resourceName, "project_id"),
126+
resource.TestCheckResourceAttrSet(resourceName, "day_of_week"),
127+
resource.TestCheckResourceAttrSet(resourceName, "hour_of_day"),
128+
129+
resource.TestCheckResourceAttr(resourceName, "day_of_week", cast.ToString(dayOfWeek)),
130+
resource.TestCheckResourceAttr(resourceName, "hour_of_day", cast.ToString(hourOfDay)),
131+
resource.TestCheckResourceAttr(resourceName, "number_of_deferrals", "0"),
132+
resource.TestCheckResourceAttr(resourceName, "auto_defer_once_enabled", "true"),
133+
134+
testAccCheckMongoDBAtlasMaintenanceWindowAttributes("day_of_week", dayOfWeek, &maintenance.DayOfWeek),
135+
),
136+
},
137+
},
138+
})
139+
}
140+
141+
func testAccMongoDBAtlasMaintenanceWindowConfigAutoDeferEnabled(projectID string, dayOfWeek, hourOfDay int) string {
142+
return fmt.Sprintf(`
143+
resource "mongodbatlas_maintenance_window" "test" {
144+
project_id = "%s"
145+
day_of_week = %d
146+
hour_of_day = %d
147+
auto_defer_once_enabled = true
148+
}`, projectID, dayOfWeek, hourOfDay)
149+
}
150+
107151
func testAccCheckMongoDBAtlasMaintenanceWindowExists(resourceName string, maintenance *matlas.MaintenanceWindow) resource.TestCheckFunc {
108152
return func(s *terraform.State) error {
109153
conn := testAccProvider.Meta().(*MongoDBClient).Atlas

website/docs/d/maintenance_window.html.markdown

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ resource "mongodbatlas_maintenance_window" "test" {
1919
project_id = "<your-project-id>"
2020
day_of_week = 3
2121
hour_of_day = 4
22+
auto_defer_once_enabled = true
2223
}
2324
2425
data "mongodbatlas_maintenance_window" "test" {
@@ -50,5 +51,5 @@ In addition to all arguments above, the following attributes are exported:
5051
* `hour_of_day` - Hour of the day when you would like the maintenance window to start. This parameter uses the 24-hour clock, where midnight is 0, noon is 12 (Time zone is UTC).
5152
* `start_asap` - Flag indicating whether project maintenance has been directed to start immediately. If you request that maintenance begin immediately, this field returns true from the time the request was made until the time the maintenance event completes.
5253
* `number_of_deferrals` - Number of times the current maintenance event for this project has been deferred, you can set a maximum of 2 deferrals.
53-
54+
* `auto_defer_once_enabled` - Flag that indicates whether you want to defer all maintenance windows one week they would be triggered.
5455
For more information see: [MongoDB Atlas API Reference.](https://docs.atlas.mongodb.com/reference/api/maintenance-windows/)

website/docs/r/maintenance_window.html.markdown

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ Once maintenance is scheduled for your cluster, you cannot change your maintenan
4545
* `hour_of_day` - Hour of the day when you would like the maintenance window to start. This parameter uses the 24-hour clock, where midnight is 0, noon is 12 (Time zone is UTC).
4646
* `start_asap` - Flag indicating whether project maintenance has been directed to start immediately. If you request that maintenance begin immediately, this field returns true from the time the request was made until the time the maintenance event completes.
4747
* `number_of_deferrals` - Number of times the current maintenance event for this project has been deferred, you can set a maximum of 2 deferrals.
48-
* `defer` - Defer maintenance for the given project for one week.
49-
* `auto_defer` - Automatically defer any maintenance for the given project for one week.
48+
* `defer` - Defer the next scheduled maintenance for the given project for one week.
49+
* `auto_defer` - Defer any scheduled maintenance for the given project for one week.
50+
* `auto_defer_once_enabled` - Flag that indicates whether you want to defer all maintenance windows one week they would be triggered.
5051

5152
-> **NOTE:** The `start_asap` attribute can't be used because of breaks the Terraform flow, but you can enable via API.
5253

0 commit comments

Comments
 (0)