From af07a731d6f92f62f21f0d6cd96789a2789f052f Mon Sep 17 00:00:00 2001 From: librucha Date: Wed, 12 Feb 2025 22:07:39 +0100 Subject: [PATCH] Added datasource for current connection --- .../data_source_postgresql_connection.go | 71 +++++++++++++++++++ .../data_source_postgresql_connection_test.go | 39 ++++++++++ postgresql/provider.go | 7 +- .../d/postgresql_connection.html.markdown | 33 +++++++++ website/postgresql.erb | 3 + 5 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 postgresql/data_source_postgresql_connection.go create mode 100644 postgresql/data_source_postgresql_connection_test.go create mode 100644 website/docs/d/postgresql_connection.html.markdown diff --git a/postgresql/data_source_postgresql_connection.go b/postgresql/data_source_postgresql_connection.go new file mode 100644 index 00000000..ca03e1c1 --- /dev/null +++ b/postgresql/data_source_postgresql_connection.go @@ -0,0 +1,71 @@ +package postgresql + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "strconv" + "strings" +) + +func dataSourcePostgreSQLDatabaseConnection() *schema.Resource { + return &schema.Resource{ + Read: PGResourceFunc(dataSourcePostgreSQLConnectionRead), + Schema: map[string]*schema.Schema{ + "host": { + Type: schema.TypeString, + Computed: true, + Description: "The current connected PostgreSQL server hostname", + }, + "port": { + Type: schema.TypeInt, + Computed: true, + Description: "The current connected PostgreSQL server port", + }, + "scheme": { + Type: schema.TypeString, + Computed: true, + Description: "TThe current connected PostgreSQL server scheme", + }, + "username": { + Type: schema.TypeString, + Computed: true, + Description: "The current connected username of the PostgreSQL server", + }, + "database_username": { + Type: schema.TypeString, + Computed: true, + Description: "The current connected username of the PostgreSQL server", + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: "The current connected PostgreSQL server version", + }, + "database": { + Type: schema.TypeString, + Computed: true, + Description: "The current connected PostgreSQL server database", + }, + }, + } +} + +func dataSourcePostgreSQLConnectionRead(db *DBConnection, d *schema.ResourceData) error { + d.Set("host", db.client.config.Host) + d.Set("port", db.client.config.Port) + d.Set("scheme", db.client.config.Scheme) + d.Set("username", db.client.config.Username) + d.Set("database_username", db.client.config.DatabaseUsername) + d.Set("version", db.version.String()) + d.Set("database", db.client.databaseName) + + d.SetId(strings.Join([]string{ + db.client.config.Host, + strconv.Itoa(db.client.config.Port), + db.client.config.Scheme, + db.client.config.Username, + db.client.config.DatabaseUsername, + db.version.String(), + db.client.databaseName, + }, "_")) + return nil +} diff --git a/postgresql/data_source_postgresql_connection_test.go b/postgresql/data_source_postgresql_connection_test.go new file mode 100644 index 00000000..2c6b8517 --- /dev/null +++ b/postgresql/data_source_postgresql_connection_test.go @@ -0,0 +1,39 @@ +package postgresql + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "os" + "testing" +) + +func TestAccPostgresqlDataSourceConnection(t *testing.T) { + skipIfNotAcc(t) + + testAccPostgresqlDataSourceTablesDatabaseConfig := generateDataSourceConnectionConfig() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccPostgresqlDataSourceTablesDatabaseConfig, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "host", os.Getenv("PGHOST")), + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "port", os.Getenv("PGPORT")), + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "scheme", "postgres"), + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "username", os.Getenv("PGUSER")), + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "database_username", ""), + resource.TestCheckResourceAttrSet("data.postgresql_connection.current1", "version"), + resource.TestCheckResourceAttr("data.postgresql_connection.current1", "database", "postgres"), + ), + }, + }, + }) +} + +func generateDataSourceConnectionConfig() string { + return ` + data "postgresql_connection" "current1" { + } +` +} diff --git a/postgresql/provider.go b/postgresql/provider.go index 8bc7546d..2771da77 100644 --- a/postgresql/provider.go +++ b/postgresql/provider.go @@ -220,9 +220,10 @@ func Provider() *schema.Provider { }, DataSourcesMap: map[string]*schema.Resource{ - "postgresql_schemas": dataSourcePostgreSQLDatabaseSchemas(), - "postgresql_tables": dataSourcePostgreSQLDatabaseTables(), - "postgresql_sequences": dataSourcePostgreSQLDatabaseSequences(), + "postgresql_schemas": dataSourcePostgreSQLDatabaseSchemas(), + "postgresql_tables": dataSourcePostgreSQLDatabaseTables(), + "postgresql_sequences": dataSourcePostgreSQLDatabaseSequences(), + "postgresql_connection": dataSourcePostgreSQLDatabaseConnection(), }, ConfigureFunc: providerConfigure, diff --git a/website/docs/d/postgresql_connection.html.markdown b/website/docs/d/postgresql_connection.html.markdown new file mode 100644 index 00000000..09162b26 --- /dev/null +++ b/website/docs/d/postgresql_connection.html.markdown @@ -0,0 +1,33 @@ +--- +layout: "postgresql" +page_title: "PostgreSQL: postgresql_tables" +sidebar_current: "docs-postgresql-data-source-postgresql_tables" +description: |- + Retrieves a list of table names from a PostgreSQL database. +--- + +# postgresql\_connection + +The ``postgresql_connection`` data source retrieves a current config of PostgreSQL connection. + + +## Usage + +```hcl +data "postgresql_connection" "current" { +} +``` + +## Argument Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `host` - The current connected PostgreSQL server hostname +* `port` - The current connected PostgreSQL server port +* `scheme` - TThe current connected PostgreSQL server scheme +* `username` - The current connected username of the PostgreSQL server +* `database_username` - The current connected username of the PostgreSQL server +* `version` - The current connected PostgreSQL server version +* `database` - The current connected PostgreSQL server database \ No newline at end of file diff --git a/website/postgresql.erb b/website/postgresql.erb index b48358f2..7da02cb8 100644 --- a/website/postgresql.erb +++ b/website/postgresql.erb @@ -70,6 +70,9 @@ > postgresql_sequences + > + postgresql_sequences +