From 3e5fe807810d7cb5066988c7e5a393df88f68fc2 Mon Sep 17 00:00:00 2001 From: Toby Brain Date: Mon, 1 Jan 2024 22:17:54 +1100 Subject: [PATCH 1/3] Populate all relevant attributes during fleet output import --- internal/fleet/output_resource.go | 35 ++++++++++++++------------ internal/fleet/output_resource_test.go | 5 ++++ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/internal/fleet/output_resource.go b/internal/fleet/output_resource.go index 26ed3cc1c..1ac3ad3b0 100644 --- a/internal/fleet/output_resource.go +++ b/internal/fleet/output_resource.go @@ -2,6 +2,7 @@ package fleet import ( "context" + fleetapi "github.com/elastic/terraform-provider-elasticstack/generated/fleet" "github.com/elastic/terraform-provider-elasticstack/internal/clients/fleet" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -405,6 +406,9 @@ func resourceOutputUpdate(ctx context.Context, d *schema.ResourceData, meta inte } func resourceOutputReadElasticsearch(d *schema.ResourceData, data fleetapi.OutputCreateRequestElasticsearch) diag.Diagnostics { + if err := d.Set("type", "elasticsearch"); err != nil { + return diag.FromErr(err) + } if err := d.Set("name", data.Name); err != nil { return diag.FromErr(err) } @@ -441,6 +445,9 @@ func resourceOutputReadElasticsearch(d *schema.ResourceData, data fleetapi.Outpu } func resourceOutputReadLogstash(d *schema.ResourceData, data fleetapi.OutputCreateRequestLogstash) diag.Diagnostics { + if err := d.Set("type", "logstash"); err != nil { + return diag.FromErr(err) + } if err := d.Set("name", data.Name); err != nil { return diag.FromErr(err) } @@ -493,22 +500,18 @@ func resourceOutputRead(ctx context.Context, d *schema.ResourceData, meta interf return nil } - outputType := d.Get("type").(string) - switch outputType { - case "elasticsearch": - output, err := rawOutput.AsOutputCreateRequestElasticsearch() - if err != nil { - return diag.FromErr(err) - } - - diags = resourceOutputReadElasticsearch(d, output) - case "logstash": - output, err := rawOutput.AsOutputCreateRequestLogstash() - if err != nil { - return diag.FromErr(err) - } - - diags = resourceOutputReadLogstash(d, output) + output, err := rawOutput.ValueByDiscriminator() + if err != nil { + return diag.FromErr(err) + } + switch outputType := output.(type) { + case fleetapi.OutputCreateRequestElasticsearch: + diags = resourceOutputReadElasticsearch(d, outputType) + case fleetapi.OutputCreateRequestLogstash: + diags = resourceOutputReadLogstash(d, outputType) + } + if err := d.Set("output_id", d.Id()); err != nil { + return diag.FromErr(err) } if diags.HasError() { return diags diff --git a/internal/fleet/output_resource_test.go b/internal/fleet/output_resource_test.go index 882e8b28e..745de038e 100644 --- a/internal/fleet/output_resource_test.go +++ b/internal/fleet/output_resource_test.go @@ -49,6 +49,11 @@ func TestAccResourceOutputElasticsearch(t *testing.T) { resource.TestCheckResourceAttr("elasticstack_fleet_output.test_output", "hosts.0", "https://elasticsearch:9200"), ), }, + { + ResourceName: "elasticstack_fleet_output.test_output", + ImportState: true, + ImportStateVerify: true, + }, }, }) } From bc1ab0c7d6f18d4d0de44b69444bc354e6af93b8 Mon Sep 17 00:00:00 2001 From: Toby Brain Date: Mon, 1 Jan 2024 22:20:23 +1100 Subject: [PATCH 2/3] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d6a90d56..5a0d97758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Fixed - Handle nil LastExecutionDate's in Kibana alerting rules. ([#508](https://github.com/elastic/terraform-provider-elasticstack/pull/508)) +- Import all relevant attributes during `elasticstack_fleet_output` import ([#522](https://github.com/elastic/terraform-provider-elasticstack/pull/522)) ## [0.11.0] - 2023-12-12 From 14591052730e9b4fd5f127e1e368f458a9ad4b37 Mon Sep 17 00:00:00 2001 From: Toby Brain Date: Mon, 1 Jan 2024 22:26:50 +1100 Subject: [PATCH 3/3] Skip test if not supported --- internal/fleet/output_resource_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/fleet/output_resource_test.go b/internal/fleet/output_resource_test.go index 745de038e..c916113ec 100644 --- a/internal/fleet/output_resource_test.go +++ b/internal/fleet/output_resource_test.go @@ -50,6 +50,7 @@ func TestAccResourceOutputElasticsearch(t *testing.T) { ), }, { + SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionOutput), ResourceName: "elasticstack_fleet_output.test_output", ImportState: true, ImportStateVerify: true,