diff --git a/CHANGELOG.md b/CHANGELOG.md index 88d7acee1..feaedb045 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## [Unreleased] - Add `ignore_missing_component_templates` to `elasticstack_elasticsearch_index_template` ([#1206](https://github.com/elastic/terraform-provider-elasticstack/pull/1206)) +- Prevent provider panic when a script exists in state, but not in Elasticsearch ([#1218](https://github.com/elastic/terraform-provider-elasticstack/pull/1218)) ## [0.11.17] - 2025-07-21 diff --git a/internal/elasticsearch/cluster/script.go b/internal/elasticsearch/cluster/script.go index 8b09c443e..1a96f7c27 100644 --- a/internal/elasticsearch/cluster/script.go +++ b/internal/elasticsearch/cluster/script.go @@ -81,6 +81,7 @@ func resourceScriptRead(ctx context.Context, d *schema.ResourceData, meta interf if script == nil && diags == nil { tflog.Warn(ctx, fmt.Sprintf(`Script "%s" not found, removing from state`, compId.ResourceId)) d.SetId("") + return nil } if diags.HasError() { return diags diff --git a/internal/elasticsearch/cluster/script_test.go b/internal/elasticsearch/cluster/script_test.go index 6c8170f53..eb31cf320 100644 --- a/internal/elasticsearch/cluster/script_test.go +++ b/internal/elasticsearch/cluster/script_test.go @@ -9,6 +9,7 @@ import ( sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/stretchr/testify/require" ) func TestAccResourceScript(t *testing.T) { @@ -37,6 +38,26 @@ func TestAccResourceScript(t *testing.T) { resource.TestCheckResourceAttr("elasticstack_elasticsearch_script.test", "params", `{"changed_modifier":2}`), ), }, + { + // Ensure the provider doesn't panic if the script has been deleted outside of the Terraform flow + PreConfig: func() { + client, err := clients.NewAcceptanceTestingClient() + require.NoError(t, err) + + esClient, err := client.GetESClient() + require.NoError(t, err) + + _, err = esClient.DeleteScript(scriptID) + require.NoError(t, err) + }, + Config: testAccScriptUpdate(scriptID), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("elasticstack_elasticsearch_script.test", "script_id", scriptID), + resource.TestCheckResourceAttr("elasticstack_elasticsearch_script.test", "lang", "painless"), + resource.TestCheckResourceAttr("elasticstack_elasticsearch_script.test", "source", "Math.log(_score * 4) + params['changed_modifier']"), + resource.TestCheckResourceAttr("elasticstack_elasticsearch_script.test", "params", `{"changed_modifier":2}`), + ), + }, }, }) }