Skip to content

Commit c1f255c

Browse files
committed
Add feature flag for policy_ids
1 parent 597393c commit c1f255c

File tree

5 files changed

+46
-8
lines changed

5 files changed

+46
-8
lines changed

internal/fleet/integration_policy/create.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@ func (r *integrationPolicyResource) Create(ctx context.Context, req resource.Cre
2222
return
2323
}
2424

25-
body, diags := planModel.toAPIModel(ctx, false)
25+
feat, diags := r.buildFeatures(ctx)
26+
resp.Diagnostics.Append(diags...)
27+
if resp.Diagnostics.HasError() {
28+
return
29+
}
30+
31+
body, diags := planModel.toAPIModel(ctx, false, feat)
2632
resp.Diagnostics.Append(diags...)
2733
if resp.Diagnostics.HasError() {
2834
return

internal/fleet/integration_policy/models.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import (
1212
"github.com/hashicorp/terraform-plugin-framework/types"
1313
)
1414

15+
type features struct {
16+
SupportsPolicyIds bool
17+
}
18+
1519
type integrationPolicyModel struct {
1620
ID types.String `tfsdk:"id"`
1721
PolicyID types.String `tfsdk:"policy_id"`
@@ -113,7 +117,7 @@ func (model *integrationPolicyModel) populateInputFromAPI(ctx context.Context, i
113117
}
114118
}
115119

116-
func (model integrationPolicyModel) toAPIModel(ctx context.Context, isUpdate bool) (kbapi.PackagePolicyRequest, diag.Diagnostics) {
120+
func (model integrationPolicyModel) toAPIModel(ctx context.Context, isUpdate bool, feat features) (kbapi.PackagePolicyRequest, diag.Diagnostics) {
117121
var diags diag.Diagnostics
118122

119123
body := kbapi.PackagePolicyRequest{
@@ -133,9 +137,12 @@ func (model integrationPolicyModel) toAPIModel(ctx context.Context, isUpdate boo
133137
diags.Append(d...)
134138
return &policyIDs
135139
}
136-
// Return empty array instead of nil when agent_policy_ids is not defined
137-
emptyArray := []string{}
138-
return &emptyArray
140+
// Only return empty array for 8.15+ when agent_policy_ids is not defined
141+
if feat.SupportsPolicyIds {
142+
emptyArray := []string{}
143+
return &emptyArray
144+
}
145+
return nil
139146
}(),
140147
Vars: utils.MapRef(utils.NormalizedTypeToMap[any](model.VarsJson, path.Root("vars_json"), &diags)),
141148
}

internal/fleet/integration_policy/resource.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import (
55
"fmt"
66

77
"github.com/elastic/terraform-provider-elasticstack/internal/clients"
8+
"github.com/elastic/terraform-provider-elasticstack/internal/diagutil"
9+
"github.com/hashicorp/go-version"
10+
"github.com/hashicorp/terraform-plugin-framework/diag"
811
"github.com/hashicorp/terraform-plugin-framework/path"
912
"github.com/hashicorp/terraform-plugin-framework/resource"
1013
)
@@ -16,6 +19,10 @@ var (
1619
_ resource.ResourceWithUpgradeState = &integrationPolicyResource{}
1720
)
1821

22+
var (
23+
MinVersionPolicyIds = version.Must(version.NewVersion("8.15.0"))
24+
)
25+
1926
// NewResource is a helper function to simplify the provider implementation.
2027
func NewResource() resource.Resource {
2128
return &integrationPolicyResource{}
@@ -44,3 +51,14 @@ func (r *integrationPolicyResource) UpgradeState(context.Context) map[int64]reso
4451
0: {PriorSchema: getSchemaV0(), StateUpgrader: upgradeV0},
4552
}
4653
}
54+
55+
func (r *integrationPolicyResource) buildFeatures(ctx context.Context) (features, diag.Diagnostics) {
56+
supportsPolicyIds, diags := r.client.EnforceMinVersion(ctx, MinVersionPolicyIds)
57+
if diags.HasError() {
58+
return features{}, diagutil.FrameworkDiagsFromSDK(diags)
59+
}
60+
61+
return features{
62+
SupportsPolicyIds: supportsPolicyIds,
63+
}, nil
64+
}

internal/fleet/integration_policy/resource_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
)
2222

2323
var minVersionIntegrationPolicy = version.Must(version.NewVersion("8.10.0"))
24+
var minVersionIntegrationPolicyIds = version.Must(version.NewVersion("8.15.0"))
2425

2526
func TestAccResourceIntegrationPolicyMultipleAgentPolicies(t *testing.T) {
2627
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)
@@ -31,7 +32,7 @@ func TestAccResourceIntegrationPolicyMultipleAgentPolicies(t *testing.T) {
3132
ProtoV6ProviderFactories: acctest.Providers,
3233
Steps: []resource.TestStep{
3334
{
34-
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionIntegrationPolicy),
35+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionIntegrationPolicyIds),
3536
Config: testAccResourceIntegrationPolicyCreateMultipleAgentPolicies(policyName),
3637
Check: resource.ComposeTestCheckFunc(
3738
resource.TestCheckResourceAttr("elasticstack_fleet_integration_policy.test_policy", "name", policyName),
@@ -54,7 +55,7 @@ func TestAccResourceIntegrationPolicyBothAgentPolicyFields(t *testing.T) {
5455
ProtoV6ProviderFactories: acctest.Providers,
5556
Steps: []resource.TestStep{
5657
{
57-
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionIntegrationPolicy),
58+
SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionIntegrationPolicyIds),
5859
Config: testAccResourceIntegrationPolicyCreateWithBothAgentPolicyFields(policyName),
5960
Check: resource.ComposeTestCheckFunc(
6061
resource.TestCheckResourceAttr("elasticstack_fleet_integration_policy.test_policy", "name", policyName),

internal/fleet/integration_policy/update.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@ func (r *integrationPolicyResource) Update(ctx context.Context, req resource.Upd
2222
return
2323
}
2424

25-
body, diags := planModel.toAPIModel(ctx, true)
25+
feat, diags := r.buildFeatures(ctx)
26+
resp.Diagnostics.Append(diags...)
27+
if resp.Diagnostics.HasError() {
28+
return
29+
}
30+
31+
body, diags := planModel.toAPIModel(ctx, true, feat)
2632
resp.Diagnostics.Append(diags...)
2733
if resp.Diagnostics.HasError() {
2834
return

0 commit comments

Comments
 (0)