timescale / terraform-provider-timescale

Timescale Cloud Terraform Provider
Apache License 2.0
18 stars 2 forks source link

Connection pooler not working when DB in VPC #151

Open GabriFila opened 5 months ago

GabriFila commented 5 months ago

Hi! First of all, thank you for working on this provider 😍 I tried the latest version to test the CRUD of the connection pooler, it works fine except when the DB is in a VPC

The Terraform output is

{
    "connection_pooler_enabled": true,
    "enable_ha_replica": false,
    "hostname": "REDACTED.REDACTED.vpc.tsdb.forge.timescale.com",
    "id": "REDACTED",
    "memory_gb": 2,
    "milli_cpu": 500,
    "name": "REDACTED",
    "password": "REDACTED",
    "pooler_hostname": "",
    "pooler_port": 39454,
    "port": 5432,
    "read_replica_source": null,
    "region_code": "REDACTED",
    "storage_gb": null,
    "timeouts": null,
    "username": "tsdbadmin",
    "vpc_id": "REDACTED"
  }

where the pooler hostname is "" and the port doesn't reflect the Timescale UI information. The UI for the pooler shows hostname similar to the non-pooler one (only with -pooler inside) and a port 5432 instead of the one returned from terraform

If you need any other info let me know

Khyme commented 5 months ago

Thank you for your feedback, looking into it!

shababq commented 4 months ago

facing this same issue i have added more details in this link https://github.com/timescale/terraform-provider-timescale/issues/142#issuecomment-1914728562

luqasn commented 3 weeks ago

I am also facing this problem, is there a solution yet?

gabrifilaWiseair commented 3 weeks ago

Hello We noticed that the pooler url follows a certain structure when the DB is in a VPC. For now we use this workaround (could break any time if Timescale changes it)

output "DB_HOSTNAME" {
  value       = strcontains(timescale_service.main.hostname, "forge") ? replace(timescale_service.main.hostname, "/([a-zA-Z\\d]+)(\\.)(.+)/", "$1-pooler$2$3") : timescale_service.main.hostname 
  description = "Probable hostname of the pooler of the DB"
}

output "DB_PORT" {
  value       = strcontains(timescale_service.main.hostname, "forge") ? 5432 : timescale_service.main.port 
  description = "Probable port of the connection pooler of the DB"
}

Let me know if you see any errors