From 5dbd9423ccf4e6a981c36afc682257c8887fbd47 Mon Sep 17 00:00:00 2001 From: Sam Dunne Date: Wed, 2 Nov 2016 14:36:39 +0000 Subject: [PATCH] Update based off review --- builtin/providers/postgresql/provider.go | 1 + .../resource_postgresql_extension.go | 28 ++++++++++++++++++- website/source/layouts/postgresql.erb | 3 ++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/builtin/providers/postgresql/provider.go b/builtin/providers/postgresql/provider.go index 4b73192ad..f720ea8e7 100644 --- a/builtin/providers/postgresql/provider.go +++ b/builtin/providers/postgresql/provider.go @@ -45,6 +45,7 @@ func Provider() terraform.ResourceProvider { ResourcesMap: map[string]*schema.Resource{ "postgresql_database": resourcePostgreSQLDatabase(), "postgresql_role": resourcePostgreSQLRole(), + "postgresql_extension": resourcePostgreSQLExtension(), }, ConfigureFunc: providerConfigure, diff --git a/builtin/providers/postgresql/resource_postgresql_extension.go b/builtin/providers/postgresql/resource_postgresql_extension.go index eb374061f..d4e990b56 100644 --- a/builtin/providers/postgresql/resource_postgresql_extension.go +++ b/builtin/providers/postgresql/resource_postgresql_extension.go @@ -1,6 +1,7 @@ package postgresql import ( + "database/sql" "fmt" "github.com/hashicorp/errwrap" @@ -11,6 +12,7 @@ import ( func resourcePostgreSQLExtension() *schema.Resource { return &schema.Resource{ Create: resourcePostgreSQLExtensionCreate, + Read: resourcePostgreSQLExtensionRead, Delete: resourcePostgreSQLExtensionDelete, Schema: map[string]*schema.Schema{ @@ -41,7 +43,31 @@ func resourcePostgreSQLExtensionCreate(d *schema.ResourceData, meta interface{}) d.SetId(extensionName) - return resourcePostgreSQLRoleRead(d, meta) + return resourcePostgreSQLExtensionRead(d, meta) +} + +func resourcePostgreSQLExtensionRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*Client) + conn, err := client.Connect() + if err != nil { + return err + } + defer conn.Close() + + extensionName := d.Get("name").(string) + + var hasExtension bool + err = conn.QueryRow("SELECT 1 from pg_extension d WHERE extname=$1", extensionName).Scan(&hasExtension) + switch { + case err == sql.ErrNoRows: + d.SetId("") + return nil + case err != nil: + return errwrap.Wrapf("Error reading extension: {{err}}", err) + default: + d.Set("extension", hasExtension) + return nil + } } func resourcePostgreSQLExtensionDelete(d *schema.ResourceData, meta interface{}) error { diff --git a/website/source/layouts/postgresql.erb b/website/source/layouts/postgresql.erb index 7375784ce..50aef15a6 100644 --- a/website/source/layouts/postgresql.erb +++ b/website/source/layouts/postgresql.erb @@ -19,6 +19,9 @@ > postgresql_role + > + postgresql_extensions +