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 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..c916113ec 100644 --- a/internal/fleet/output_resource_test.go +++ b/internal/fleet/output_resource_test.go @@ -49,6 +49,12 @@ func TestAccResourceOutputElasticsearch(t *testing.T) { resource.TestCheckResourceAttr("elasticstack_fleet_output.test_output", "hosts.0", "https://elasticsearch:9200"), ), }, + { + SkipFunc: versionutils.CheckIfVersionIsUnsupported(minVersionOutput), + ResourceName: "elasticstack_fleet_output.test_output", + ImportState: true, + ImportStateVerify: true, + }, }, }) }