diff --git a/docs/resources/fleet_agent_policy.md b/docs/resources/fleet_agent_policy.md index ac255526b..12de133f3 100644 --- a/docs/resources/fleet_agent_policy.md +++ b/docs/resources/fleet_agent_policy.md @@ -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 +terraform import elasticstack_fleet_agent_policy.my_policy / ``` diff --git a/examples/resources/elasticstack_fleet_agent_policy/import.sh b/examples/resources/elasticstack_fleet_agent_policy/import.sh index c3ce60089..ce48597bb 100644 --- a/examples/resources/elasticstack_fleet_agent_policy/import.sh +++ b/examples/resources/elasticstack_fleet_agent_policy/import.sh @@ -1 +1 @@ -terraform import elasticstack_fleet_agent_policy.my_policy +terraform import elasticstack_fleet_agent_policy.my_policy / diff --git a/internal/fleet/agent_policy/acc_test.go b/internal/fleet/agent_policy/acc_test.go index 2320e12fc..bb03e49d5 100644 --- a/internal/fleet/agent_policy/acc_test.go +++ b/internal/fleet/agent_policy/acc_test.go @@ -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 + }, + }, + }, + }) +} diff --git a/internal/fleet/agent_policy/resource.go b/internal/fleet/agent_policy/resource.go index 3cda6999e..d59acf5d3 100644 --- a/internal/fleet/agent_policy/resource.go +++ b/internal/fleet/agent_policy/resource.go @@ -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 { + 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) { diff --git a/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/main.tf b/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/main.tf new file mode 100644 index 000000000..3dd2d19b6 --- /dev/null +++ b/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/main.tf @@ -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] +} diff --git a/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/variables.tf b/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/variables.tf new file mode 100644 index 000000000..68136cae4 --- /dev/null +++ b/internal/fleet/agent_policy/testdata/TestAccResourceAgentPolicyNonDefaultSpace/create/variables.tf @@ -0,0 +1,11 @@ +variable "policy_name" { + type = string +} + +variable "space_id" { + type = string +} + +variable "space_name" { + type = string +}