From 36c6432bbeeff53aca02cb76d661fc57f6925af8 Mon Sep 17 00:00:00 2001 From: Vishal Sawale Date: Mon, 5 Aug 2024 17:50:56 +0530 Subject: [PATCH] feat: Read-only connection string for PGD --- docs/data-sources/pgd.md | 5 ++++ docs/resources/pgd.md | 5 ++++ .../data-sources/biganimal_pgd/data-source.tf | 4 +++ .../biganimal_pgd/aws/data_group/resource.tf | 4 +++ .../azure/data_group/resource.tf | 4 +++ .../biganimal_pgd/gcp/data_group/resource.tf | 4 +++ pkg/provider/data_source_pgd.go | 5 ++++ pkg/provider/resource_pgd.go | 26 ++++++++++++------- 8 files changed, 47 insertions(+), 10 deletions(-) diff --git a/docs/data-sources/pgd.md b/docs/data-sources/pgd.md index 788d9db5..813ecddf 100644 --- a/docs/data-sources/pgd.md +++ b/docs/data-sources/pgd.md @@ -33,6 +33,10 @@ output "data_groups" { output "witness_groups" { value = data.biganimal_pgd.this.witness_groups } + +output "ro_connection_uri" { + value = data.biganimal_cluster.this.ro_connection_uri +} ``` ## PGD Data Source Example @@ -98,6 +102,7 @@ terraform { - `data_groups` (Attributes Set) Cluster data groups. (see [below for nested schema](#nestedatt--data_groups)) - `id` (String) The ID of this resource. - `witness_groups` (Attributes Set) (see [below for nested schema](#nestedatt--witness_groups)) +- `ro_connection_uri` (String) Cluster read-only connection URI. Only available for high availability clusters. ### Nested Schema for `data_groups` diff --git a/docs/resources/pgd.md b/docs/resources/pgd.md index d3134269..4f74a3e3 100644 --- a/docs/resources/pgd.md +++ b/docs/resources/pgd.md @@ -94,6 +94,10 @@ resource "biganimal_pgd" "pgd_cluster" { start_day = 1 start_time = "13:00" } + ro_connection_uri = { + value = resource.biganimal_cluster.ha_cluster.ro_connection_uri +} + }, ] } @@ -1714,6 +1718,7 @@ Read-Only: - `metrics_url` (String) The URL to find the metrics of this cluster. - `phase` (String) Current phase of the data group. - `resizing_pvc` (Set of String) Resizing PVC. +- `ro_connection_uri` (String) Cluster read-only connection URI. Only available for high availability clusters. ### Nested Schema for `data_groups.cloud_provider` diff --git a/examples/data-sources/biganimal_pgd/data-source.tf b/examples/data-sources/biganimal_pgd/data-source.tf index 8f84a097..0506545f 100644 --- a/examples/data-sources/biganimal_pgd/data-source.tf +++ b/examples/data-sources/biganimal_pgd/data-source.tf @@ -28,3 +28,7 @@ output "data_groups" { output "witness_groups" { value = data.biganimal_pgd.this.witness_groups } + +output "ro_connection_uri" { + value = data.biganimal_pgd.this.ro_connection_uri +} diff --git a/examples/resources/biganimal_pgd/aws/data_group/resource.tf b/examples/resources/biganimal_pgd/aws/data_group/resource.tf index 96f13417..a8bcd05f 100644 --- a/examples/resources/biganimal_pgd/aws/data_group/resource.tf +++ b/examples/resources/biganimal_pgd/aws/data_group/resource.tf @@ -97,3 +97,7 @@ output "password" { sensitive = true value = resource.biganimal_pgd.pgd_cluster.password } + +output "ro_connection_uri" { + value = resource.biganimal_cluster.ha_cluster.ro_connection_uri +} diff --git a/examples/resources/biganimal_pgd/azure/data_group/resource.tf b/examples/resources/biganimal_pgd/azure/data_group/resource.tf index 2c6c7cd5..be876596 100644 --- a/examples/resources/biganimal_pgd/azure/data_group/resource.tf +++ b/examples/resources/biganimal_pgd/azure/data_group/resource.tf @@ -97,3 +97,7 @@ output "password" { sensitive = true value = resource.biganimal_pgd.pgd_cluster.password } + +output "ro_connection_uri" { + value = resource.biganimal_cluster.ha_cluster.ro_connection_uri +} diff --git a/examples/resources/biganimal_pgd/gcp/data_group/resource.tf b/examples/resources/biganimal_pgd/gcp/data_group/resource.tf index a5a62735..a8aa7935 100644 --- a/examples/resources/biganimal_pgd/gcp/data_group/resource.tf +++ b/examples/resources/biganimal_pgd/gcp/data_group/resource.tf @@ -101,3 +101,7 @@ output "password" { sensitive = true value = resource.biganimal_pgd.pgd_cluster.password } + +output "ro_connection_uri" { + value = resource.biganimal_cluster.ha_cluster.ro_connection_uri +} diff --git a/pkg/provider/data_source_pgd.go b/pkg/provider/data_source_pgd.go index a14d83b8..6b4c8f49 100644 --- a/pkg/provider/data_source_pgd.go +++ b/pkg/provider/data_source_pgd.go @@ -275,6 +275,11 @@ func (p pgdDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, Computed: true, ElementType: types.StringType, }, + "ro_connection_uri": schema.SetAttribute{ + Description: "Read-only connection URI.", + Computed: true, + ElementType: types.StringType, + }, }, }, }, diff --git a/pkg/provider/resource_pgd.go b/pkg/provider/resource_pgd.go index 156d7403..d36376ef 100644 --- a/pkg/provider/resource_pgd.go +++ b/pkg/provider/resource_pgd.go @@ -331,6 +331,11 @@ func PgdSchema(ctx context.Context) schema.Schema { }, }, }, + "ro_connection_uri": schema.StringAttribute{ + MarkdownDescription: "Cluster read-only connection URI. Only available for high availability clusters.", + Computed: true, + PlanModifiers: []planmodifier.String{plan_modifier.CustomConnection()}, + }, "instance_type": schema.SingleNestedAttribute{ Description: "Instance type.", Required: true, @@ -588,16 +593,17 @@ func (p *pgdResource) Configure(_ context.Context, req resource.ConfigureRequest } type PGD struct { - ID *string `tfsdk:"id"` - ProjectId string `tfsdk:"project_id"` - ClusterId *string `tfsdk:"cluster_id"` - ClusterName *string `tfsdk:"cluster_name"` - MostRecent *bool `tfsdk:"most_recent"` - Password *string `tfsdk:"password"` - Timeouts timeouts.Value `tfsdk:"timeouts"` - Pause types.Bool `tfsdk:"pause"` - DataGroups []terraform.DataGroup `tfsdk:"data_groups"` - WitnessGroups []terraform.WitnessGroup `tfsdk:"witness_groups"` + ID *string `tfsdk:"id"` + ProjectId string `tfsdk:"project_id"` + ClusterId *string `tfsdk:"cluster_id"` + ClusterName *string `tfsdk:"cluster_name"` + MostRecent *bool `tfsdk:"most_recent"` + Password *string `tfsdk:"password"` + Timeouts timeouts.Value `tfsdk:"timeouts"` + Pause types.Bool `tfsdk:"pause"` + DataGroups []terraform.DataGroup `tfsdk:"data_groups"` + WitnessGroups []terraform.WitnessGroup `tfsdk:"witness_groups"` + RoConnectionUri types.String `tfsdk:"ro_connection_uri"` } // Create creates the resource and sets the initial Terraform state.