From 3eb5fbd19e2023bb360ef86c3df533f051415837 Mon Sep 17 00:00:00 2001 From: Mischa Spiegelmock Date: Sat, 1 Nov 2025 22:51:02 -0700 Subject: [PATCH] Add disabled parameter to provider config Adds an optional boolean parameter that prevents the provider from connecting to PostgreSQL when set to true. Useful for temporarily disabling provider operations without removing configuration. --- postgresql/provider.go | 11 ++++++ postgresql/provider_disabled_test.go | 50 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 postgresql/provider_disabled_test.go diff --git a/postgresql/provider.go b/postgresql/provider.go index 778778be..862162aa 100644 --- a/postgresql/provider.go +++ b/postgresql/provider.go @@ -199,6 +199,12 @@ func Provider() *schema.Provider { Description: "Specify the expected version of PostgreSQL.", ValidateFunc: validateExpectedVersion, }, + "disabled": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Disable the provider from making any changes to PostgreSQL. When set to true, the provider will not connect to the database.", + }, }, ResourcesMap: map[string]*schema.Resource{ @@ -331,6 +337,11 @@ func acquireAzureOauthToken(tenantId string) (string, error) { } func providerConfigure(d *schema.ResourceData) (any, error) { + // If disabled, return nil to prevent any database connections + if d.Get("disabled").(bool) { + return nil, nil + } + var sslMode string if sslModeRaw, ok := d.GetOk("sslmode"); ok { sslMode = sslModeRaw.(string) diff --git a/postgresql/provider_disabled_test.go b/postgresql/provider_disabled_test.go new file mode 100644 index 00000000..39bd3368 --- /dev/null +++ b/postgresql/provider_disabled_test.go @@ -0,0 +1,50 @@ +package postgresql + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func TestProviderConfigure_Disabled(t *testing.T) { + raw := map[string]interface{}{ + "disabled": true, + "host": "localhost", + "port": 5432, + "username": "postgres", + "password": "test", + } + + p := Provider() + d := schema.TestResourceDataRaw(t, p.Schema, raw) + + client, err := providerConfigure(d) + if err != nil { + t.Fatalf("expected no error, got: %v", err) + } + + if client != nil { + t.Fatal("expected client to be nil when disabled=true") + } +} + +func TestProviderConfigure_NotDisabled(t *testing.T) { + raw := map[string]interface{}{ + "disabled": false, + "host": "localhost", + "port": 25432, + "username": "postgres", + "password": "postgres", + "database": "postgres", + } + + p := Provider() + d := schema.TestResourceDataRaw(t, p.Schema, raw) + + client, err := providerConfigure(d) + + // Client creation will likely fail without a real DB, but that's ok + // We just want to verify it doesn't return early like disabled=true does + _ = client + _ = err +}