Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/resources/fleet_agent_policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,5 +178,5 @@ Import is supported using the following syntax:
The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:

```shell
terraform import elasticstack_fleet_agent_policy.my_policy <fleet_agent_policy_id>
terraform import elasticstack_fleet_agent_policy.my_policy <space_id>/<fleet_agent_policy_id>
```
Original file line number Diff line number Diff line change
@@ -1 +1 @@
terraform import elasticstack_fleet_agent_policy.my_policy <fleet_agent_policy_id>
terraform import elasticstack_fleet_agent_policy.my_policy <space_id>/<fleet_agent_policy_id>
51 changes: 51 additions & 0 deletions internal/fleet/agent_policy/acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -872,3 +872,54 @@ func TestAccResourceAgentPolicyWithAdvancedMonitoring(t *testing.T) {
},
})
}

func TestAccResourceAgentPolicyNonDefaultSpace(t *testing.T) {
policyName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)
spaceName := sdkacctest.RandStringFromCharSet(22, sdkacctest.CharSetAlphaNum)
spaceID := fmt.Sprintf("space-%s", spaceName)

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(t) },
CheckDestroy: checkResourceAgentPolicyDestroy,
Steps: []resource.TestStep{
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionSpaceIds),
ConfigDirectory: acctest.NamedTestCaseDirectory("create"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
"space_id": config.StringVariable(spaceID),
"space_name": config.StringVariable(fmt.Sprintf("Test Space %s", spaceName)),
},
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "name", fmt.Sprintf("Policy %s", policyName)),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "namespace", "default"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "description", "Test Agent Policy in Non-Default Space"),
resource.TestCheckResourceAttr("elasticstack_fleet_agent_policy.test_policy", "space_ids.#", "1"),
resource.TestCheckTypeSetElemAttr("elasticstack_fleet_agent_policy.test_policy", "space_ids.*", spaceID),
),
},
{
ProtoV6ProviderFactories: acctest.Providers,
SkipFunc: versionutils.CheckIfVersionIsUnsupported(agent_policy.MinVersionSpaceIds),
ConfigDirectory: acctest.NamedTestCaseDirectory("create"),
ConfigVariables: config.Variables{
"policy_name": config.StringVariable(fmt.Sprintf("Policy %s", policyName)),
"space_id": config.StringVariable(spaceID),
"space_name": config.StringVariable(fmt.Sprintf("Test Space %s", spaceName)),
},
ResourceName: "elasticstack_fleet_agent_policy.test_policy",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"skip_destroy"},
ImportStateIdFunc: func(s *terraform.State) (string, error) {
res := s.RootModule().Resources["elasticstack_fleet_agent_policy.test_policy"]
if res == nil || res.Primary == nil {
return "", fmt.Errorf("resource elasticstack_fleet_agent_policy.test_policy not found in state")
}
return fmt.Sprintf("%s/%s", spaceID, res.Primary.ID), nil
},
},
},
})
}
17 changes: 16 additions & 1 deletion internal/fleet/agent_policy/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,22 @@ func (r *agentPolicyResource) Metadata(ctx context.Context, req resource.Metadat
}

func (r *agentPolicyResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
resource.ImportStatePassthroughID(ctx, path.Root("policy_id"), req, resp)
var spaceID string
var policyID string

compID, diags := clients.CompositeIdFromStrFw(req.ID)
if diags.HasError() {
policyID = req.ID
} else {
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The field name ClusterId is misleading in this context as it's being used to store a spaceID, not a cluster ID. Consider using a more appropriate field or adding a comment explaining this usage.

Suggested change
} else {
} else {
// Note: compID.ClusterId is used here to store the space ID, not a cluster ID.

Copilot uses AI. Check for mistakes.
spaceID = compID.ClusterId
policyID = compID.ResourceId
}

resp.Diagnostics.Append(resp.State.SetAttribute(ctx, path.Root("policy_id"), policyID)...)

if spaceID != "" {
resp.Diagnostics.Append(resp.State.SetAttribute(ctx, path.Root("space_ids"), []string{spaceID})...)
}
}

func (r *agentPolicyResource) buildFeatures(ctx context.Context) (features, diag.Diagnostics) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
provider "elasticstack" {
elasticsearch {}
kibana {}
}

resource "elasticstack_kibana_space" "test_space" {
space_id = var.space_id
name = var.space_name
description = "Test space for Fleet agent policy non-default space test"
}

resource "elasticstack_fleet_agent_policy" "test_policy" {
name = var.policy_name
namespace = "default"
description = "Test Agent Policy in Non-Default Space"
monitor_logs = true
monitor_metrics = false
skip_destroy = false
space_ids = [var.space_id]

depends_on = [elasticstack_kibana_space.test_space]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
variable "policy_name" {
type = string
}

variable "space_id" {
type = string
}

variable "space_name" {
type = string
}