Skip to content

Commit 2a65569

Browse files
committed
Add serverless check for maintenance window resource.
1 parent bf84803 commit 2a65569

File tree

3 files changed

+63
-11
lines changed

3 files changed

+63
-11
lines changed

internal/kibana/maintenance_window.go

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ import (
1414
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1515
)
1616

17-
func validateMinMaintenanceWindowServerVersion(serverVersion *version.Version) diag.Diagnostics {
18-
var maintenanceWindowPublicAPIMinSupportedVersion = version.Must(version.NewVersion("8.1.0"))
17+
func validateMaintenanceWindowServer(serverVersion *version.Version, serverFlavor string) diag.Diagnostics {
18+
var serverlessFlavor = "serverless"
19+
var maintenanceWindowPublicAPIMinSupportedVersion = version.Must(version.NewVersion("9.1.0"))
1920
var diags diag.Diagnostics
2021

21-
if serverVersion.LessThan(maintenanceWindowPublicAPIMinSupportedVersion) {
22+
if serverVersion.LessThan(maintenanceWindowPublicAPIMinSupportedVersion) && serverFlavor != serverlessFlavor {
2223
diags = append(diags, diag.Diagnostic{
2324
Severity: diag.Error,
2425
Summary: "Maintenance window API not supported",
25-
Detail: fmt.Sprintf(`The maintenance Window public API feature requires a minimum Elasticsearch version of "%s"`, maintenanceWindowPublicAPIMinSupportedVersion),
26+
Detail: fmt.Sprintf(`The maintenance Window public API feature requires a minimum Elasticsearch version of "%s" or a serverless Kibana instance.`, maintenanceWindowPublicAPIMinSupportedVersion),
2627
})
2728
return diags
2829
}
@@ -261,7 +262,12 @@ func resourceMaintenanceWindowCreate(ctx context.Context, d *schema.ResourceData
261262
return diags
262263
}
263264

264-
diags = validateMinMaintenanceWindowServerVersion(serverVersion)
265+
serverFlavor, diags := client.ServerFlavor(ctx)
266+
if diags.HasError() {
267+
return diags
268+
}
269+
270+
diags = validateMaintenanceWindowServer(serverVersion, serverFlavor)
265271
if diags.HasError() {
266272
return diags
267273
}
@@ -295,7 +301,12 @@ func resourceMaintenanceWindowUpdate(ctx context.Context, d *schema.ResourceData
295301
return diags
296302
}
297303

298-
diags = validateMinMaintenanceWindowServerVersion(serverVersion)
304+
serverFlavor, diags := client.ServerFlavor(ctx)
305+
if diags.HasError() {
306+
return diags
307+
}
308+
309+
diags = validateMaintenanceWindowServer(serverVersion, serverFlavor)
299310
if diags.HasError() {
300311
return diags
301312
}
@@ -333,7 +344,12 @@ func resourceMaintenanceWindowRead(ctx context.Context, d *schema.ResourceData,
333344
return diags
334345
}
335346

336-
diags = validateMinMaintenanceWindowServerVersion(serverVersion)
347+
serverFlavor, diags := client.ServerFlavor(ctx)
348+
if diags.HasError() {
349+
return diags
350+
}
351+
352+
diags = validateMaintenanceWindowServer(serverVersion, serverFlavor)
337353
if diags.HasError() {
338354
return diags
339355
}
@@ -421,7 +437,12 @@ func resourceMaintenanceWindowDelete(ctx context.Context, d *schema.ResourceData
421437
return diags
422438
}
423439

424-
diags = validateMinMaintenanceWindowServerVersion(serverVersion)
440+
serverFlavor, diags := client.ServerFlavor(ctx)
441+
if diags.HasError() {
442+
return diags
443+
}
444+
445+
diags = validateMaintenanceWindowServer(serverVersion, serverFlavor)
425446
if diags.HasError() {
426447
return diags
427448
}

internal/kibana/maintenance_window_test.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,22 @@ import (
1414
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1515
)
1616

17-
func TestAccResourceMaintenanceWindow(t *testing.T) {
17+
func CheckMinVersionAndServerless() (bool, error) {
1818
minSupportedVersion := version.Must(version.NewSemver("9.1.0"))
19+
versionIsUnsupported, err := versionutils.CheckIfVersionIsUnsupported(minSupportedVersion)()
20+
if err != nil {
21+
return false, err
22+
}
1923

24+
isServerless, err := versionutils.CheckIfServerless()()
25+
if err != nil {
26+
return false, err
27+
}
28+
29+
return versionIsUnsupported && !isServerless, err
30+
}
31+
32+
func TestAccResourceMaintenanceWindow(t *testing.T) {
2033
t.Setenv("KIBANA_API_KEY", "")
2134

2235
resource.Test(t, resource.TestCase{
@@ -25,7 +38,7 @@ func TestAccResourceMaintenanceWindow(t *testing.T) {
2538
ProtoV6ProviderFactories: acctest.Providers,
2639
Steps: []resource.TestStep{
2740
{
28-
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minSupportedVersion),
41+
SkipFunc: CheckMinVersionAndServerless,
2942
Config: testAccResourceMaintenanceWindowCreate,
3043
Check: resource.ComposeTestCheckFunc(
3144
resource.TestCheckResourceAttr("elasticstack_kibana_maintenance_window.test_maintenance_window", "title", "Terraform Maintenance Window"),
@@ -41,7 +54,7 @@ func TestAccResourceMaintenanceWindow(t *testing.T) {
4154
),
4255
},
4356
{
44-
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minSupportedVersion),
57+
SkipFunc: CheckMinVersionAndServerless,
4558
Config: testAccResourceMaintenanceWindowUpdate,
4659
Check: resource.ComposeTestCheckFunc(
4760
resource.TestCheckResourceAttr("elasticstack_kibana_maintenance_window.test_maintenance_window", "title", "Terraform Maintenance Window UPDATED"),
@@ -65,6 +78,7 @@ func TestAccResourceMaintenanceWindow(t *testing.T) {
6578

6679
const testAccResourceMaintenanceWindowCreate = `
6780
provider "elasticstack" {
81+
elasticsearch {}
6882
kibana {}
6983
}
7084
@@ -93,6 +107,7 @@ resource "elasticstack_kibana_maintenance_window" "test_maintenance_window" {
93107

94108
const testAccResourceMaintenanceWindowUpdate = `
95109
provider "elasticstack" {
110+
elasticsearch {}
96111
kibana {}
97112
}
98113

internal/versionutils/testutils.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ func CheckIfVersionIsUnsupported(minSupportedVersion *version.Version) func() (b
2323
}
2424
}
2525

26+
func CheckIfServerless() func() (bool, error) {
27+
return func() (b bool, err error) {
28+
serverlessFlavor := "serverless"
29+
client, err := clients.NewAcceptanceTestingClient()
30+
if err != nil {
31+
return false, err
32+
}
33+
serverFlavor, diags := client.ServerFlavor(context.Background())
34+
if diags.HasError() {
35+
return false, fmt.Errorf("failed to parse the elasticsearch server flavor %v", diags)
36+
}
37+
38+
return serverFlavor == serverlessFlavor, nil
39+
}
40+
}
41+
2642
func CheckIfVersionMeetsConstraints(constraints version.Constraints) func() (bool, error) {
2743
return func() (b bool, err error) {
2844
client, err := clients.NewAcceptanceTestingClient()

0 commit comments

Comments
 (0)