From c312b6fd28398e78ed0d5609ed87fa9cf3cd997e Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Fri, 4 Oct 2024 11:45:57 +0100 Subject: [PATCH 01/10] Promote read replicas --- ibm/service/database/resource_ibm_database.go | 49 +++++++++++++++++-- .../resource_ibm_database_postgresql_test.go | 42 ++++++++++++++++ 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/ibm/service/database/resource_ibm_database.go b/ibm/service/database/resource_ibm_database.go index 50198a8145a..df2f56e4f19 100644 --- a/ibm/service/database/resource_ibm_database.go +++ b/ibm/service/database/resource_ibm_database.go @@ -258,10 +258,14 @@ func ResourceIBMDatabaseInstance() *schema.Resource { Optional: true, }, "remote_leader_id": { - Description: "The CRN of leader database", - Type: schema.TypeString, - Optional: true, - DiffSuppressFunc: flex.ApplyOnce, + Description: "The CRN of leader database", + Type: schema.TypeString, + Optional: true, + }, + "skip_initial_backup": { + Description: "Option to skip the initial backup when promoting a read-only replica. Skipping the initial backup means that your replica becomes available more quickly, but there is no immediate backup available.", + Type: schema.TypeBool, + Optional: true, }, "key_protect_instance": { Description: "The CRN of Key protect instance", @@ -840,6 +844,7 @@ func ResourceIBMDatabaseInstance() *schema.Resource { }, } } + func ResourceIBMICDValidator() *validate.ResourceValidator { validateSchema := make([]validate.ValidateSchema, 0) @@ -1598,6 +1603,9 @@ func resourceIBMDatabaseInstanceRead(context context.Context, d *schema.Resource d.Set("service_endpoints", endpoint) } + if remoteLeaderId, ok := instance.Parameters["remote_leader_id"]; ok { + d.Set("remote_leader_id", remoteLeaderId) + } } d.Set(flex.ResourceName, *instance.Name) @@ -2136,6 +2144,39 @@ func resourceIBMDatabaseInstanceUpdate(context context.Context, d *schema.Resour } } + if d.HasChange("remote_leader_id") { + remoteLeaderId := d.Get("remote_leader_id").(string) + + if remoteLeaderId == "" { + skipInitialBackup := false + if skip, ok := d.GetOk("skip_initial_backup"); ok { + skipInitialBackup = skip.(bool) + } + + promoteReadOnlyReplicaOptions := &clouddatabasesv5.PromoteReadOnlyReplicaOptions{ + ID: &instanceID, + Promotion: map[string]interface{}{ + "skip_initial_backup": skipInitialBackup, + }, + } + + promoteReadReplicaResponse, response, err := cloudDatabasesClient.PromoteReadOnlyReplica(promoteReadOnlyReplicaOptions) + + if err != nil { + return diag.FromErr(fmt.Errorf("[ERROR] Error promoting read replica: %s\n%s", err, response)) + } + + taskID := *promoteReadReplicaResponse.Task.ID + _, err = waitForDatabaseTaskComplete(taskID, d, meta, d.Timeout(schema.TimeoutUpdate)) + + if err != nil { + return diag.FromErr(fmt.Errorf("[ERROR] Error promoting read replica: %s", err)) + } + } else { + return diag.FromErr(fmt.Errorf("[ERROR] Electing a new database source for replication is not allowed")) + } + } + return resourceIBMDatabaseInstanceRead(context, d, meta) } diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index 8d7ce0890fc..3c97ff2c4bf 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -736,3 +736,45 @@ func testAccCheckIBMDatabaseInstancePostgresMinimal_PITR(databaseResourceGroup s } `, databaseResourceGroup, name, acc.Region()) } + +func TestAccIBMDatabaseInstancePostgresPromoteReadReplica(t *testing.T) { + // TODO lorna: I would have to create an instance, then rr, then promote? + // Have to provide a valid rr crn to run tests? + t.Parallel() + databaseResourceGroup := "default" + var databaseInstanceOne string + var databaseInstanceTwo string + serviceName := fmt.Sprintf("tf-Pgress-%d", acctest.RandIntRange(10, 100)) + + promoteServiceName := serviceName + "-promote-read-replica" + resourceName := "ibm_database." + serviceName + promoteResource := "ibm_database." + promoteServiceName + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(resourceName, &databaseInstanceOne), + resource.TestCheckResourceAttr(resourceName, "name", serviceName), + resource.TestCheckResourceAttr(resourceName, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(resourceName, "plan", "standard"), + resource.TestCheckResourceAttr(resourceName, "location", acc.Region()), + ), + }, + { + Config: testAccCheckIBMDatabaseInstancePostgresMinimal_PITR(databaseResourceGroup, serviceName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(promoteResource, &databaseInstanceTwo), + resource.TestCheckResourceAttr(promoteResource, "name", promoteServiceName), + resource.TestCheckResourceAttr(promoteResource, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(promoteResource, "plan", "standard"), + resource.TestCheckResourceAttr(promoteResource, "location", acc.Region()), + ), + }, + }, + }) +} From 1bb7040811c5c62fc813ad9f0b1c08020f28a5b4 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Fri, 11 Oct 2024 15:04:31 +0100 Subject: [PATCH 02/10] Add tests --- .../resource_ibm_database_postgresql_test.go | 138 ++++++++++++------ 1 file changed, 96 insertions(+), 42 deletions(-) diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index 3c97ff2c4bf..dfd70ac525d 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -256,6 +256,102 @@ func TestAccIBMDatabaseInstancePostgresPITR(t *testing.T) { }) } +func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { + t.Parallel() + + databaseResourceGroup := "default" + + var sourceInstanceCRN string + var replicaInstanceCRN string + + serviceName := fmt.Sprintf("tf-Pgress-%d", acctest.RandIntRange(10, 100)) + readReplicaName := serviceName + "-replica" + + sourceResource := "ibm_database." + serviceName + replicaReplicaResource := "ibm_database." + readReplicaName + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + resource.TestCheckResourceAttr(sourceResource, "name", serviceName), + resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), + resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, readReplicaName, sourceInstanceCRN), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + ), + }, + { + Config: testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", ""), + resource.TestCheckResourceAttr(replicaReplicaResource, "skip_initial_backup", "true"), + ), + }, + }, + }) +} + +func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-postgresql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "%[4]s" + skip_initial_backup = true + } + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) +} + +func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-postgresql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "" + skip_initial_backup = true + } + `, databaseResourceGroup, readReplicaName, acc.Region()) +} + func testAccCheckIBMDatabaseInstanceDestroy(s *terraform.State) error { rsContClient, err := acc.TestAccProvider.Meta().(conns.ClientSession).ResourceControllerV2API() if err != nil { @@ -736,45 +832,3 @@ func testAccCheckIBMDatabaseInstancePostgresMinimal_PITR(databaseResourceGroup s } `, databaseResourceGroup, name, acc.Region()) } - -func TestAccIBMDatabaseInstancePostgresPromoteReadReplica(t *testing.T) { - // TODO lorna: I would have to create an instance, then rr, then promote? - // Have to provide a valid rr crn to run tests? - t.Parallel() - databaseResourceGroup := "default" - var databaseInstanceOne string - var databaseInstanceTwo string - serviceName := fmt.Sprintf("tf-Pgress-%d", acctest.RandIntRange(10, 100)) - - promoteServiceName := serviceName + "-promote-read-replica" - resourceName := "ibm_database." + serviceName - promoteResource := "ibm_database." + promoteServiceName - - resource.Test(t, resource.TestCase{ - PreCheck: func() { acc.TestAccPreCheck(t) }, - Providers: acc.TestAccProviders, - CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMDatabaseInstanceExists(resourceName, &databaseInstanceOne), - resource.TestCheckResourceAttr(resourceName, "name", serviceName), - resource.TestCheckResourceAttr(resourceName, "service", "databases-for-postgresql"), - resource.TestCheckResourceAttr(resourceName, "plan", "standard"), - resource.TestCheckResourceAttr(resourceName, "location", acc.Region()), - ), - }, - { - Config: testAccCheckIBMDatabaseInstancePostgresMinimal_PITR(databaseResourceGroup, serviceName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMDatabaseInstanceExists(promoteResource, &databaseInstanceTwo), - resource.TestCheckResourceAttr(promoteResource, "name", promoteServiceName), - resource.TestCheckResourceAttr(promoteResource, "service", "databases-for-postgresql"), - resource.TestCheckResourceAttr(promoteResource, "plan", "standard"), - resource.TestCheckResourceAttr(promoteResource, "location", acc.Region()), - ), - }, - }, - }) -} From b3e91fe8c4cd3ce1afcdce3bd23760226fe35a42 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Tue, 15 Oct 2024 17:17:06 +0100 Subject: [PATCH 03/10] Fixes --- ibm/service/database/resource_ibm_database.go | 28 ++++++++++++++----- .../resource_ibm_database_postgresql_test.go | 2 ++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/ibm/service/database/resource_ibm_database.go b/ibm/service/database/resource_ibm_database.go index df2f56e4f19..3c8bed04a8e 100644 --- a/ibm/service/database/resource_ibm_database.go +++ b/ibm/service/database/resource_ibm_database.go @@ -140,7 +140,8 @@ func ResourceIBMDatabaseInstance() *schema.Resource { CustomizeDiff: customdiff.All( resourceIBMDatabaseInstanceDiff, validateGroupsDiff, - validateUsersDiff), + validateUsersDiff, + validateRemoteLeaderIDDiff), Importer: &schema.ResourceImporter{}, @@ -1602,10 +1603,6 @@ func resourceIBMDatabaseInstanceRead(context context.Context, d *schema.Resource if endpoint, ok := instance.Parameters["service-endpoints"]; ok { d.Set("service_endpoints", endpoint) } - - if remoteLeaderId, ok := instance.Parameters["remote_leader_id"]; ok { - d.Set("remote_leader_id", remoteLeaderId) - } } d.Set(flex.ResourceName, *instance.Name) @@ -2145,9 +2142,9 @@ func resourceIBMDatabaseInstanceUpdate(context context.Context, d *schema.Resour } if d.HasChange("remote_leader_id") { - remoteLeaderId := d.Get("remote_leader_id").(string) + oldValue, newValue := d.GetChange("remote_leader_id") - if remoteLeaderId == "" { + if oldValue != "" && newValue == "" { skipInitialBackup := false if skip, ok := d.GetOk("skip_initial_backup"); ok { skipInitialBackup = skip.(bool) @@ -2175,6 +2172,7 @@ func resourceIBMDatabaseInstanceUpdate(context context.Context, d *schema.Resour } else { return diag.FromErr(fmt.Errorf("[ERROR] Electing a new database source for replication is not allowed")) } + } return resourceIBMDatabaseInstanceRead(context, d, meta) @@ -3080,6 +3078,22 @@ func expandUserChanges(_oldUsers []interface{}, _newUsers []interface{}) (userCh return userChanges } +func validateRemoteLeaderIDDiff(_ context.Context, diff *schema.ResourceDiff, meta interface{}) (err error) { + _, remoteLeaderIdOk := diff.GetOk("remote_leader_id") + + if !remoteLeaderIdOk { + return nil + } + + service := diff.Get("service").(string) + + if remoteLeaderIdOk && (service != "databases-for-postgresql" && service != "databases-for-mysql" && service != "databases-for-enterprisedb") { + return fmt.Errorf("[ERROR] remote_leader_id is only supported for databases-for-postgresql, databases-for-enterprisedb and databases-for-mysql") + } + + return nil +} + func (c *userChange) isDelete() bool { return c.Old != nil && c.New == nil } diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index dfd70ac525d..d2ea800c70e 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -313,6 +313,8 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { } func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { + + // todo add pg leader config return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { is_default = true From cc06c6b1baf674f8872717fd3ccf2cee11449978 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Mon, 21 Oct 2024 12:17:37 +0100 Subject: [PATCH 04/10] Docs --- website/docs/r/database.html.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/docs/r/database.html.markdown b/website/docs/r/database.html.markdown index 83d8a80b8fc..f72636b3f1d 100644 --- a/website/docs/r/database.html.markdown +++ b/website/docs/r/database.html.markdown @@ -680,7 +680,8 @@ Review the argument reference that you can specify for your resource. - `plan` - (Required, Forces new resource, String) The name of the service plan that you choose for your instance. All databases use `standard`. `enterprise` is supported only for elasticsearch (`databases-for-elasticsearch`), and mongodb(`databases-for-mongodb`). `platinum` is supported for elasticsearch (`databases-for-elasticsearch`). - `point_in_time_recovery_deployment_id` - (Optional, String) The ID of the source deployment that you want to recover back to. - `point_in_time_recovery_time` - (Optional, String) The timestamp in UTC format that you want to restore to. To retrieve the timestamp, run the `ibmcloud cdb postgresql earliest-pitr-timestamp ` command. To restore to the latest available time, use a blank string `""` as the timestamp. For more information, see [Point-in-time Recovery](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-pitr). -- `remote_leader_id` - (Optional, String) A CRN of the leader database to make the replica(read-only) deployment. The leader database is created by a database deployment with the same service ID. A read-only replica is set up to replicate all of your data from the leader deployment to the replica deployment by using asynchronous replication. For more information, see [Configuring Read-only Replicas](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas). +- `remote_leader_id` - (Optional, String) A CRN of the leader database to make the replica(read-only) deployment. The leader database is created by a database deployment with the same service ID. A read-only replica is set up to replicate all of your data from the leader deployment to the replica deployment by using asynchronous replication. Removing the `remote_leader_id` attribute from an existing read-only replica will promote the deployment to a standalone deployment. The deployment will restart and break its connection with the leader. This will disable all database users associated with this deployment. For more information, see [Configuring Read-only Replicas](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas). +- `skip_initial_backup` - (Optional, Boolean) Should only be set when promoting a read-only replica. By setting this value to `true`, you skip the initial backup that would normally be taken upon promotion. Skipping the initial backup means that your replica becomes available more quickly, but there is no immediate backup available. The default is `false`. For more information, see [Configuring Read-only Replicas] - `resource_group_id` - (Optional, Forces new resource, String) The ID of the resource group where you want to create the instance. To retrieve this value, run `ibmcloud resource groups` or use the `ibm_resource_group` data source. If no value is provided, the `default` resource group is used. - `service` - (Required, Forces new resource, String) The type of Cloud Databases that you want to create. Only the following services are currently accepted: `databases-for-etcd`, `databases-for-postgresql`, `databases-for-redis`, `databases-for-elasticsearch`, `messages-for-rabbitmq`,`databases-for-mongodb`,`databases-for-mysql`, and `databases-for-enterprisedb`. - `service_endpoints` - (Required, String) Specify whether you want to enable the public, private, or both service endpoints. Supported values are `public`, `private`, or `public-and-private`. From e89c6d84d908c353ecafd8e788f4c30b35fd34c9 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Mon, 21 Oct 2024 17:06:21 +0100 Subject: [PATCH 05/10] Fixes --- ibm/service/database/resource_ibm_database.go | 19 +++++++++---------- .../resource_ibm_database_postgresql_test.go | 16 +++++++++++----- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/ibm/service/database/resource_ibm_database.go b/ibm/service/database/resource_ibm_database.go index 3c8bed04a8e..a0d2ab72a0f 100644 --- a/ibm/service/database/resource_ibm_database.go +++ b/ibm/service/database/resource_ibm_database.go @@ -2142,9 +2142,9 @@ func resourceIBMDatabaseInstanceUpdate(context context.Context, d *schema.Resour } if d.HasChange("remote_leader_id") { - oldValue, newValue := d.GetChange("remote_leader_id") + remoteLeaderId := d.Get("remote_leader_id").(string) - if oldValue != "" && newValue == "" { + if remoteLeaderId == "" { skipInitialBackup := false if skip, ok := d.GetOk("skip_initial_backup"); ok { skipInitialBackup = skip.(bool) @@ -2169,10 +2169,7 @@ func resourceIBMDatabaseInstanceUpdate(context context.Context, d *schema.Resour if err != nil { return diag.FromErr(fmt.Errorf("[ERROR] Error promoting read replica: %s", err)) } - } else { - return diag.FromErr(fmt.Errorf("[ERROR] Electing a new database source for replication is not allowed")) } - } return resourceIBMDatabaseInstanceRead(context, d, meta) @@ -3080,17 +3077,19 @@ func expandUserChanges(_oldUsers []interface{}, _newUsers []interface{}) (userCh func validateRemoteLeaderIDDiff(_ context.Context, diff *schema.ResourceDiff, meta interface{}) (err error) { _, remoteLeaderIdOk := diff.GetOk("remote_leader_id") - - if !remoteLeaderIdOk { - return nil - } - service := diff.Get("service").(string) + crn := diff.Get("resource_crn").(string) if remoteLeaderIdOk && (service != "databases-for-postgresql" && service != "databases-for-mysql" && service != "databases-for-enterprisedb") { return fmt.Errorf("[ERROR] remote_leader_id is only supported for databases-for-postgresql, databases-for-enterprisedb and databases-for-mysql") } + oldValue, newValue := diff.GetChange("remote_leader_id") + + if crn != "" && oldValue == "" && newValue != "" { + return fmt.Errorf("[ERROR] You cannot convert an existing instance to a read replica") + } + return nil } diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index d2ea800c70e..bd35487153e 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -286,7 +286,7 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { ), }, { - Config: testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, readReplicaName, sourceInstanceCRN), + Config: testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -314,7 +314,6 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - // todo add pg leader config return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { is_default = true @@ -323,13 +322,21 @@ func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResource resource "ibm_database" "%[2]s" { resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" + name = "%[2]s" + service = "databases-for-postgresql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + } + + resource "ibm_database" "%[2]s-replica" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s-replica" service = "databases-for-postgresql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" remote_leader_id = "%[4]s" - skip_initial_backup = true } `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) } @@ -348,7 +355,6 @@ func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourc plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = "" skip_initial_backup = true } `, databaseResourceGroup, readReplicaName, acc.Region()) From 8ab68ecef5d9c09034ece81e8ffbfdfb75546ed9 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Tue, 22 Oct 2024 13:55:16 +0100 Subject: [PATCH 06/10] Add my sql and edb tests --- .../resource_ibm_database_edb_test.go | 122 ++++++++++++++++++ .../resource_ibm_database_mysql_test.go | 122 ++++++++++++++++++ 2 files changed, 244 insertions(+) diff --git a/ibm/service/database/resource_ibm_database_edb_test.go b/ibm/service/database/resource_ibm_database_edb_test.go index 7936460bf4e..dce8d3b3508 100644 --- a/ibm/service/database/resource_ibm_database_edb_test.go +++ b/ibm/service/database/resource_ibm_database_edb_test.go @@ -85,6 +85,80 @@ func TestAccIBMEDBDatabaseInstanceBasic(t *testing.T) { }) } +func TestAccIBMDatabaseInstanceEDBReadReplicaPromotion(t *testing.T) { + t.Parallel() + + databaseResourceGroup := "default" + + var sourceInstanceCRN string + var replicaInstanceCRN string + + serviceName := fmt.Sprintf("tf-edb-%d", acctest.RandIntRange(10, 100)) + readReplicaName := serviceName + "-replica" + + sourceResource := "ibm_database." + serviceName + replicaReplicaResource := "ibm_database." + readReplicaName + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + resource.TestCheckResourceAttr(sourceResource, "name", serviceName), + resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-enterprisedb"), + resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), + resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-enterprisedb"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + ), + }, + { + Config: testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-enterprisedb"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", ""), + resource.TestCheckResourceAttr(replicaReplicaResource, "skip_initial_backup", "true"), + ), + }, + }, + }) +} + +func testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup string, name string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-enterprisedb" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + } + `, databaseResourceGroup, name, acc.Region()) +} + func testAccCheckIBMDatabaseInstanceEDBBasic(databaseResourceGroup string, name string) string { return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { @@ -207,3 +281,51 @@ func testAccCheckIBMDatabaseInstanceEDBReduced(databaseResourceGroup string, nam } `, databaseResourceGroup, name, acc.Region()) } + +func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { + + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-enterprisedb" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + } + + resource "ibm_database" "%[2]s-replica" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s-replica" + service = "databases-for-enterprisedb" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "%[4]s" + } + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) +} + +func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-enterprisedb" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + skip_initial_backup = true + } + `, databaseResourceGroup, readReplicaName, acc.Region()) +} diff --git a/ibm/service/database/resource_ibm_database_mysql_test.go b/ibm/service/database/resource_ibm_database_mysql_test.go index 301ca3570cb..b3f3ad1b36f 100644 --- a/ibm/service/database/resource_ibm_database_mysql_test.go +++ b/ibm/service/database/resource_ibm_database_mysql_test.go @@ -62,6 +62,80 @@ func TestAccIBMMysqlDatabaseInstanceBasic(t *testing.T) { }) } +func TestAccIBMDatabaseInstanceMySQLReadReplicaPromotion(t *testing.T) { + t.Parallel() + + databaseResourceGroup := "default" + + var sourceInstanceCRN string + var replicaInstanceCRN string + + serviceName := fmt.Sprintf("tf-mysql-%d", acctest.RandIntRange(10, 100)) + readReplicaName := serviceName + "-replica" + + sourceResource := "ibm_database." + serviceName + replicaReplicaResource := "ibm_database." + readReplicaName + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + resource.TestCheckResourceAttr(sourceResource, "name", serviceName), + resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-mysql"), + resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), + resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-mysql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + ), + }, + { + Config: testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-mysql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", ""), + resource.TestCheckResourceAttr(replicaReplicaResource, "skip_initial_backup", "true"), + ), + }, + }, + }) +} + +func testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup string, name string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + } + `, databaseResourceGroup, name, acc.Region()) +} + func testAccCheckIBMDatabaseInstanceMysqlBasic(databaseResourceGroup string, name string) string { return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { @@ -166,3 +240,51 @@ func testAccCheckIBMDatabaseInstanceMysqlFullyspecified(databaseResourceGroup st } `, databaseResourceGroup, name, acc.Region()) } + +func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { + + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + } + + resource "ibm_database" "%[2]s-replica" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s-replica" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "%[4]s" + } + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) +} + +func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { + return fmt.Sprintf(` + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + skip_initial_backup = true + } + `, databaseResourceGroup, readReplicaName, acc.Region()) +} From 0ab9de7307b6321342a804d76b3093f9a1d7e4a0 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Fri, 1 Nov 2024 15:50:53 +0000 Subject: [PATCH 07/10] Update tests --- .../resource_ibm_database_edb_test.go | 38 ++++-------------- .../resource_ibm_database_mysql_test.go | 39 ++++-------------- .../resource_ibm_database_postgresql_test.go | 40 ++++--------------- 3 files changed, 23 insertions(+), 94 deletions(-) diff --git a/ibm/service/database/resource_ibm_database_edb_test.go b/ibm/service/database/resource_ibm_database_edb_test.go index dce8d3b3508..6b139c86531 100644 --- a/ibm/service/database/resource_ibm_database_edb_test.go +++ b/ibm/service/database/resource_ibm_database_edb_test.go @@ -105,24 +105,15 @@ func TestAccIBMDatabaseInstanceEDBReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose(acc.ConfigAlternateRegionProvider(), + testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-enterprisedb"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), - resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), - ), - }, - { - Config: testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), - resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-enterprisedb"), - resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), - resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), - resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + resource.TestCheckResourceAttr(sourceResource, "location", acc.RegionAlternate()), ), }, { @@ -282,33 +273,20 @@ func testAccCheckIBMDatabaseInstanceEDBReduced(databaseResourceGroup string, nam `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { +func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string) string { return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" - service = "databases-for-enterprisedb" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - } - resource "ibm_database" "%[2]s-replica" { + depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-enterprisedb" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" + remote_leader_id = ibm_database.%[2]s.id } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) + `, databaseResourceGroup, name, acc.Region()) } func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { diff --git a/ibm/service/database/resource_ibm_database_mysql_test.go b/ibm/service/database/resource_ibm_database_mysql_test.go index b3f3ad1b36f..7cd882f9043 100644 --- a/ibm/service/database/resource_ibm_database_mysql_test.go +++ b/ibm/service/database/resource_ibm_database_mysql_test.go @@ -82,24 +82,15 @@ func TestAccIBMDatabaseInstanceMySQLReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose(acc.ConfigAlternateRegionProvider(), + testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-mysql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), - resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), - ), - }, - { - Config: testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), - resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-mysql"), - resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), - resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), - resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + resource.TestCheckResourceAttr(sourceResource, "location", acc.RegionAlternate()), ), }, { @@ -241,33 +232,19 @@ func testAccCheckIBMDatabaseInstanceMysqlFullyspecified(databaseResourceGroup st `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - +func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string) string { return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" - service = "databases-for-mysql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - } - resource "ibm_database" "%[2]s-replica" { + depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-mysql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" + remote_leader_id = ibm_database.%[2]s.id } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) + `, databaseResourceGroup, name, acc.Region()) } func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index bd35487153e..9818e9c6d9c 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -276,23 +276,16 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-postgresql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), - ), - }, - { - Config: testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-postgresql"), - resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), - resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), ), }, @@ -312,42 +305,23 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { }) } -func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - +func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string) string { return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" - service = "databases-for-postgresql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - } - resource "ibm_database" "%[2]s-replica" { + depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-postgresql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" + remote_leader_id = ibm_database.%[2]s.id } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) + `, databaseResourceGroup, name, acc.Region()) } func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - resource "ibm_database" "%[2]s" { resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s" From d7a051ca8de199e6b07eda5fe03579a1fcdf8dc8 Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Wed, 6 Nov 2024 14:20:02 +0000 Subject: [PATCH 08/10] Fixes --- .../resource_ibm_database_postgresql_test.go | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index 9818e9c6d9c..4d19a342d04 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -278,9 +278,10 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { { Config: acc.ConfigCompose( testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName)), + testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-postgresql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), @@ -290,7 +291,7 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { ), }, { - Config: testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Config: testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -305,33 +306,37 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { }) } -func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string) string { +func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { return fmt.Sprintf(` resource "ibm_database" "%[2]s-replica" { - depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-postgresql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = ibm_database.%[2]s.id + remote_leader_id = "%[4]s" } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) } -func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { +func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup string, name string) string { return fmt.Sprintf(` - resource "ibm_database" "%[2]s" { + data "ibm_resource_group" "test_acc" { + is_default = true + # name = "%[1]s" + } + + resource "ibm_database" "%[2]s-replica" { resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" + name = "%[2]s-replica" service = "databases-for-postgresql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" skip_initial_backup = true } - `, databaseResourceGroup, readReplicaName, acc.Region()) + `, databaseResourceGroup, name, acc.Region()) } func testAccCheckIBMDatabaseInstanceDestroy(s *terraform.State) error { From 79cf1378770c757713ffc7103a57a90a7d9cd0aa Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Wed, 6 Nov 2024 15:04:39 +0000 Subject: [PATCH 09/10] Update mysql, edb tests --- .../resource_ibm_database_edb_test.go | 43 ++++++++++++++----- .../resource_ibm_database_mysql_test.go | 26 +++++------ 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/ibm/service/database/resource_ibm_database_edb_test.go b/ibm/service/database/resource_ibm_database_edb_test.go index 6b139c86531..81d92c1a1af 100644 --- a/ibm/service/database/resource_ibm_database_edb_test.go +++ b/ibm/service/database/resource_ibm_database_edb_test.go @@ -105,19 +105,22 @@ func TestAccIBMDatabaseInstanceEDBReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: acc.ConfigCompose(acc.ConfigAlternateRegionProvider(), + Config: acc.ConfigCompose( testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName)), + testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-enterprisedb"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), - resource.TestCheckResourceAttr(sourceResource, "location", acc.RegionAlternate()), + resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), ), }, { - Config: testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Config: testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -146,6 +149,15 @@ func testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup string, nam plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" + group { + group_id = "member" + host_flavor { + id = "b3c.4x16.encrypted" + } + disk { + allocation_mb = 20480 + } + } } `, databaseResourceGroup, name, acc.Region()) } @@ -273,7 +285,7 @@ func testAccCheckIBMDatabaseInstanceEDBReduced(databaseResourceGroup string, nam `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string) string { +func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { return fmt.Sprintf(` resource "ibm_database" "%[2]s-replica" { @@ -284,26 +296,35 @@ func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = ibm_database.%[2]s.id + remote_leader_id = "%[4]s" + group { + group_id = "member" + host_flavor { + id = "b3c.4x16.encrypted" + } + disk { + allocation_mb = 20480 + } + } } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) } -func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { +func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup string, name string) string { return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { is_default = true # name = "%[1]s" } - resource "ibm_database" "%[2]s" { + resource "ibm_database" "%[2]s-replica" { resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" + name = "%[2]s-replica" service = "databases-for-enterprisedb" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" skip_initial_backup = true } - `, databaseResourceGroup, readReplicaName, acc.Region()) + `, databaseResourceGroup, name, acc.Region()) } diff --git a/ibm/service/database/resource_ibm_database_mysql_test.go b/ibm/service/database/resource_ibm_database_mysql_test.go index 7cd882f9043..5bf3805beb8 100644 --- a/ibm/service/database/resource_ibm_database_mysql_test.go +++ b/ibm/service/database/resource_ibm_database_mysql_test.go @@ -82,19 +82,22 @@ func TestAccIBMDatabaseInstanceMySQLReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: acc.ConfigCompose(acc.ConfigAlternateRegionProvider(), + Config: acc.ConfigCompose( testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName)), + testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-mysql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), - resource.TestCheckResourceAttr(sourceResource, "location", acc.RegionAlternate()), + resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), + resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), ), }, { - Config: testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup, readReplicaName), + Config: testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -232,36 +235,35 @@ func testAccCheckIBMDatabaseInstanceMysqlFullyspecified(databaseResourceGroup st `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string) string { +func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { return fmt.Sprintf(` resource "ibm_database" "%[2]s-replica" { - depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-mysql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = ibm_database.%[2]s.id + remote_leader_id = "%[4]s" } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) } -func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup string, readReplicaName string) string { +func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup string, name string) string { return fmt.Sprintf(` data "ibm_resource_group" "test_acc" { is_default = true # name = "%[1]s" } - resource "ibm_database" "%[2]s" { + resource "ibm_database" "%[2]s-replica" { resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s" + name = "%[2]s-replica" service = "databases-for-mysql" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" skip_initial_backup = true } - `, databaseResourceGroup, readReplicaName, acc.Region()) + `, databaseResourceGroup, name, acc.Region()) } From c4135f8d7b8a600b25f84523f9502bcd18eca8df Mon Sep 17 00:00:00 2001 From: Lorna-Kelly Date: Thu, 7 Nov 2024 09:16:20 +0000 Subject: [PATCH 10/10] Fix to tests --- .../resource_ibm_database_edb_test.go | 61 ++++++++----- .../resource_ibm_database_mysql_test.go | 87 ++++++++++--------- .../resource_ibm_database_postgresql_test.go | 83 +++++++++--------- 3 files changed, 128 insertions(+), 103 deletions(-) diff --git a/ibm/service/database/resource_ibm_database_edb_test.go b/ibm/service/database/resource_ibm_database_edb_test.go index 81d92c1a1af..bf15266c836 100644 --- a/ibm/service/database/resource_ibm_database_edb_test.go +++ b/ibm/service/database/resource_ibm_database_edb_test.go @@ -105,23 +105,33 @@ func TestAccIBMDatabaseInstanceEDBReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: acc.ConfigCompose( - testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), + Config: testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-enterprisedb"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup, serviceName)), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-enterprisedb"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), ), }, { - Config: testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceEDBReadReplicaPromote(databaseResourceGroup, readReplicaName)), Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-enterprisedb"), @@ -148,7 +158,7 @@ func testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup string, nam service = "databases-for-enterprisedb" plan = "standard" location = "%[3]s" - service_endpoints = "public-and-private" + service_endpoints = "public-and-private" group { group_id = "member" host_flavor { @@ -159,7 +169,7 @@ func testAccCheckIBMDatabaseInstanceEDBMinimal(databaseResourceGroup string, nam } } } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, name, acc.Region()) } func testAccCheckIBMDatabaseInstanceEDBBasic(databaseResourceGroup string, name string) string { @@ -285,18 +295,17 @@ func testAccCheckIBMDatabaseInstanceEDBReduced(databaseResourceGroup string, nam `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - +func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup string, name string) string { return fmt.Sprintf(` resource "ibm_database" "%[2]s-replica" { - depends_on = [ibm_database.%[2]s] resource_group_id = data.ibm_resource_group.test_acc.id name = "%[2]s-replica" service = "databases-for-enterprisedb" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" + remote_leader_id = ibm_database.%[2]s.id + group { group_id = "member" host_flavor { @@ -307,24 +316,30 @@ func testAccCheckIBMDatabaseInstanceEDBMinimal_ReadReplica(databaseResourceGroup } } } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) + `, databaseResourceGroup, name, acc.Region()) } -func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromotion(databaseResourceGroup string, name string) string { +func testAccCheckIBMDatabaseInstanceEDBReadReplicaPromote(databaseResourceGroup string, readReplicaName string) string { return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s-replica" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s-replica" + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" service = "databases-for-enterprisedb" plan = "standard" location = "%[3]s" service_endpoints = "public-and-private" + remote_leader_id = "" skip_initial_backup = true + + group { + group_id = "member" + host_flavor { + id = "b3c.4x16.encrypted" + } + disk { + allocation_mb = 20480 + } + } } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, readReplicaName, acc.Region()) } diff --git a/ibm/service/database/resource_ibm_database_mysql_test.go b/ibm/service/database/resource_ibm_database_mysql_test.go index 5bf3805beb8..af0bb87ebb5 100644 --- a/ibm/service/database/resource_ibm_database_mysql_test.go +++ b/ibm/service/database/resource_ibm_database_mysql_test.go @@ -82,22 +82,31 @@ func TestAccIBMDatabaseInstanceMySQLReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: acc.ConfigCompose( - testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), + Config: testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-mysql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup, serviceName)), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-mysql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), ), }, { - Config: testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromote(databaseResourceGroup, readReplicaName)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -125,9 +134,38 @@ func testAccCheckIBMDatabaseInstanceMySQLMinimal(databaseResourceGroup string, n service = "databases-for-mysql" plan = "standard" location = "%[3]s" - service_endpoints = "public-and-private" + service_endpoints = "public-and-private" } - `, databaseResourceGroup, name, acc.Region()) + `, databaseResourceGroup, name, acc.Region()) +} + +func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string) string { + return fmt.Sprintf(` + resource "ibm_database" "%[2]s-replica" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s-replica" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = ibm_database.%[2]s.id + } + `, databaseResourceGroup, name, acc.Region()) +} + +func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromote(databaseResourceGroup string, readReplicaName string) string { + return fmt.Sprintf(` + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-mysql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "" + skip_initial_backup = true + } + `, databaseResourceGroup, readReplicaName, acc.Region()) } func testAccCheckIBMDatabaseInstanceMysqlBasic(databaseResourceGroup string, name string) string { @@ -234,36 +272,3 @@ func testAccCheckIBMDatabaseInstanceMysqlFullyspecified(databaseResourceGroup st } `, databaseResourceGroup, name, acc.Region()) } - -func testAccCheckIBMDatabaseInstanceMySQLMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - return fmt.Sprintf(` - resource "ibm_database" "%[2]s-replica" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s-replica" - service = "databases-for-mysql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" - } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) -} - -func testAccCheckIBMDatabaseInstanceMySQLReadReplicaPromotion(databaseResourceGroup string, name string) string { - return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s-replica" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s-replica" - service = "databases-for-mysql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - skip_initial_backup = true - } - `, databaseResourceGroup, name, acc.Region()) -} diff --git a/ibm/service/database/resource_ibm_database_postgresql_test.go b/ibm/service/database/resource_ibm_database_postgresql_test.go index 4d19a342d04..a8c6453c0af 100644 --- a/ibm/service/database/resource_ibm_database_postgresql_test.go +++ b/ibm/service/database/resource_ibm_database_postgresql_test.go @@ -276,22 +276,31 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { CheckDestroy: testAccCheckIBMDatabaseInstanceDestroy, Steps: []resource.TestStep{ { - Config: acc.ConfigCompose( - testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), - testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName, sourceInstanceCRN)), + Config: testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(sourceResource, &sourceInstanceCRN), - testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(sourceResource, "name", serviceName), resource.TestCheckResourceAttr(sourceResource, "service", "databases-for-postgresql"), resource.TestCheckResourceAttr(sourceResource, "plan", "standard"), resource.TestCheckResourceAttr(sourceResource, "location", acc.Region()), + ), + }, + { + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup, serviceName)), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), - resource.TestCheckResourceAttr(replicaReplicaResource, "remote_leader_id", sourceInstanceCRN), + resource.TestCheckResourceAttr(replicaReplicaResource, "service", "databases-for-postgresql"), + resource.TestCheckResourceAttr(replicaReplicaResource, "plan", "standard"), + resource.TestCheckResourceAttr(replicaReplicaResource, "location", acc.Region()), ), }, { - Config: testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup, serviceName), + Config: acc.ConfigCompose( + testAccCheckIBMDatabaseInstancePostgresMinimal(databaseResourceGroup, serviceName), + testAccCheckIBMDatabaseInstancePostgresReadReplicaPromote(databaseResourceGroup, readReplicaName)), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMDatabaseInstanceExists(replicaReplicaResource, &replicaInstanceCRN), resource.TestCheckResourceAttr(replicaReplicaResource, "name", readReplicaName), @@ -306,39 +315,6 @@ func TestAccIBMDatabaseInstancePostgresReadReplicaPromotion(t *testing.T) { }) } -func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string, sourceInstanceCRN string) string { - return fmt.Sprintf(` - resource "ibm_database" "%[2]s-replica" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s-replica" - service = "databases-for-postgresql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - remote_leader_id = "%[4]s" - } - `, databaseResourceGroup, name, acc.Region(), sourceInstanceCRN) -} - -func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromotion(databaseResourceGroup string, name string) string { - return fmt.Sprintf(` - data "ibm_resource_group" "test_acc" { - is_default = true - # name = "%[1]s" - } - - resource "ibm_database" "%[2]s-replica" { - resource_group_id = data.ibm_resource_group.test_acc.id - name = "%[2]s-replica" - service = "databases-for-postgresql" - plan = "standard" - location = "%[3]s" - service_endpoints = "public-and-private" - skip_initial_backup = true - } - `, databaseResourceGroup, name, acc.Region()) -} - func testAccCheckIBMDatabaseInstanceDestroy(s *terraform.State) error { rsContClient, err := acc.TestAccProvider.Meta().(conns.ClientSession).ResourceControllerV2API() if err != nil { @@ -819,3 +795,32 @@ func testAccCheckIBMDatabaseInstancePostgresMinimal_PITR(databaseResourceGroup s } `, databaseResourceGroup, name, acc.Region()) } + +func testAccCheckIBMDatabaseInstancePostgresMinimal_ReadReplica(databaseResourceGroup string, name string) string { + return fmt.Sprintf(` + resource "ibm_database" "%[2]s-replica" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s-replica" + service = "databases-for-postgresql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = ibm_database.%[2]s.id + } + `, databaseResourceGroup, name, acc.Region()) +} + +func testAccCheckIBMDatabaseInstancePostgresReadReplicaPromote(databaseResourceGroup string, readReplicaName string) string { + return fmt.Sprintf(` + resource "ibm_database" "%[2]s" { + resource_group_id = data.ibm_resource_group.test_acc.id + name = "%[2]s" + service = "databases-for-postgresql" + plan = "standard" + location = "%[3]s" + service_endpoints = "public-and-private" + remote_leader_id = "" + skip_initial_backup = true + } + `, databaseResourceGroup, readReplicaName, acc.Region()) +}