Skip to content

Commit ed0458e

Browse files
authored
fix: added fix to exclude group from point in time recovery (#525)
1 parent 0003266 commit ed0458e

File tree

7 files changed

+24
-26
lines changed

7 files changed

+24
-26
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ To attach access management tags to resources in this module, you need the follo
9999
| <a name="input_existing_kms_instance_guid"></a> [existing\_kms\_instance\_guid](#input\_existing\_kms\_instance\_guid) | The GUID of the Hyper Protect Crypto Services or Key Protect instance in which the key specified in var.kms\_key\_crn and var.backup\_encryption\_key\_crn is coming from. Required only if var.kms\_encryption\_enabled is set to true, var.skip\_iam\_authorization\_policy is set to false, and you pass a value for var.kms\_key\_crn, var.backup\_encryption\_key\_crn, or both. | `string` | `null` | no |
100100
| <a name="input_kms_encryption_enabled"></a> [kms\_encryption\_enabled](#input\_kms\_encryption\_enabled) | Set this to true to control the encryption keys used to encrypt the data that you store in IBM Cloud Databases. If set to false, the data is encrypted by using randomly generated keys. For more info on Key Protect integration, see https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-key-protect. For more info on HPCS integration, see https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hpcs | `bool` | `false` | no |
101101
| <a name="input_kms_key_crn"></a> [kms\_key\_crn](#input\_kms\_key\_crn) | The root key CRN of a Key Management Services like Key Protect or Hyper Protect Crypto Services (HPCS) that you want to use for disk encryption. Only used if var.kms\_encryption\_enabled is set to true. | `string` | `null` | no |
102-
| <a name="input_member_cpu_count"></a> [member\_cpu\_count](#input\_member\_cpu\_count) | Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling) | `number` | `0` | no |
103-
| <a name="input_member_disk_mb"></a> [member\_disk\_mb](#input\_member\_disk\_mb) | Allocated disk per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling) | `number` | `5120` | no |
104-
| <a name="input_member_host_flavor"></a> [member\_host\_flavor](#input\_member\_host\_flavor) | Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor) | `string` | `null` | no |
105-
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling) | `number` | `4096` | no |
102+
| <a name="input_member_cpu_count"></a> [member\_cpu\_count](#input\_member\_cpu\_count) | Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations | `number` | `0` | no |
103+
| <a name="input_member_disk_mb"></a> [member\_disk\_mb](#input\_member\_disk\_mb) | Allocated disk per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations | `number` | `5120` | no |
104+
| <a name="input_member_host_flavor"></a> [member\_host\_flavor](#input\_member\_host\_flavor) | Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor). Ignored during restore and point in time recovery operations | `string` | `null` | no |
105+
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations | `number` | `4096` | no |
106106
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `2` | no |
107107
| <a name="input_name"></a> [name](#input\_name) | The name to give the Postgresql instance. | `string` | n/a | yes |
108108
| <a name="input_pg_version"></a> [pg\_version](#input\_pg\_version) | Version of the PostgreSQL instance. If no value is passed, the current preferred version of IBM Cloud Databases is used. | `string` | `null` | no |

examples/basic/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ module "read_only_replica_postgresql_db" {
5454
pg_version = var.pg_version
5555
remote_leader_crn = module.postgresql_db.crn
5656
member_host_flavor = "multitenant"
57-
member_memory_mb = 4096 # Must be an increment of 384 megabytes. The minimum size of a read-only replica is 2 GB RAM, new hosting model minimum is 4 GB RAM.
58-
member_disk_mb = 15360 # Must be an increment of 512 megabytes. The minimum size of a read-only replica is 15.36 GB of disk
57+
member_memory_mb = 4096 # Must be an increment of 384 megabytes. The minimum size of a read-only replica is 2 GB RAM, new hosting model minimum is 4 GB RAM.
58+
member_disk_mb = 5120 # Must be an increment of 512 megabytes. The minimum size of a read-only replica is 5 GB of disk
5959
depends_on = [time_sleep.wait_time]
6060
}

examples/pitr/main.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ module "postgresql_db_pitr" {
1818
region = var.region
1919
resource_tags = var.resource_tags
2020
access_tags = var.access_tags
21-
member_memory_mb = 12288
22-
member_disk_mb = 15360
23-
member_cpu_count = var.member_cpu_count
21+
member_memory_mb = 4096
22+
member_disk_mb = 5120
23+
member_cpu_count = 0
2424
member_host_flavor = "multitenant"
2525
members = var.members
2626
pg_version = var.pg_version

examples/pitr/variables.tf

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,3 @@ variable "members" {
5353
description = "Allocated number of members. Members must be same or higher than the source deployment PostgreSQL instance."
5454
default = 2
5555
}
56-
57-
variable "member_cpu_count" {
58-
type = number
59-
description = "Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling)"
60-
}

main.tf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ locals {
2525
# Determine if host_flavor is used
2626
host_flavor_set = var.member_host_flavor != null ? true : false
2727

28+
# Determine if restore, from backup or point in time recovery
29+
recovery_mode = var.backup_crn != null || var.pitr_id != null
30+
2831
# Determine what KMS service is being used for database encryption
2932
kms_service = var.kms_key_crn != null ? (
3033
can(regex(".*kms.*", var.kms_key_crn)) ? "kms" : (
@@ -84,12 +87,13 @@ resource "ibm_database" "postgresql_db" {
8487

8588
# Workaround for https://github.ibm.com/GoldenEye/issues/issues/11359
8689
# means that no `group` block is added when restoring from backup
90+
# or point in time recovery
8791

8892
## This for_each block is NOT a loop to attach to multiple group blocks.
8993
## This is used to conditionally add one, OR, the other group block depending on var.local.host_flavor_set
9094
## This block is for if host_flavor IS set to specific pre-defined host sizes and not set to "multitenant"
9195
dynamic "group" {
92-
for_each = local.host_flavor_set && var.member_host_flavor != "multitenant" && var.backup_crn == null ? [1] : []
96+
for_each = local.host_flavor_set && var.member_host_flavor != "multitenant" && !local.recovery_mode ? [1] : []
9397
content {
9498
group_id = "member" # Only member type is allowed for IBM Cloud Databases
9599
host_flavor {
@@ -109,7 +113,7 @@ resource "ibm_database" "postgresql_db" {
109113

110114
## This block is for if host_flavor IS set to "multitenant"
111115
dynamic "group" {
112-
for_each = local.host_flavor_set && var.member_host_flavor == "multitenant" && var.backup_crn == null ? [1] : []
116+
for_each = local.host_flavor_set && var.member_host_flavor == "multitenant" && !local.recovery_mode ? [1] : []
113117
content {
114118
group_id = "member" # Only member type is allowed for IBM Cloud Databases
115119
host_flavor {
@@ -135,7 +139,7 @@ resource "ibm_database" "postgresql_db" {
135139

136140
## This block is for if host_flavor IS NOT set
137141
dynamic "group" {
138-
for_each = local.host_flavor_set == false && var.backup_crn == null ? [1] : []
142+
for_each = local.host_flavor_set == false && !local.recovery_mode ? [1] : []
139143
content {
140144
group_id = "member" # Only member type is allowed for IBM Cloud Databases
141145
memory {

tests/other_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ func TestRunPointInTimeRecoveryDBExample(t *testing.T) {
3939
ResourceGroup: resourceGroup,
4040
Region: fmt.Sprint(permanentResources["postgresqlPITRRegion"]),
4141
TerraformVars: map[string]interface{}{
42-
"pitr_id": permanentResources["postgresqlPITRCrn"],
43-
"pitr_time": "", // if blank string is passed, earliest_point_in_time_recovery_time will be used to restore
44-
"pg_version": permanentResources["postgresqlPITRVersion"],
45-
"members": "3", // Lock members to 3 as the permanent postgres instances has 3 members
46-
"member_cpu_count": 0, // Lock cpu to 0 as the permanent postgres instances has 0 cpu
42+
"pitr_id": permanentResources["postgresqlPITRCrn"],
43+
"pitr_time": "", // if blank string is passed, earliest_point_in_time_recovery_time will be used to restore
44+
"pg_version": permanentResources["postgresqlPITRVersion"],
45+
"members": "3", // Lock members to 3 as the permanent postgres instances has 3 members
4746
},
4847
CloudInfoService: sharedInfoSvc,
4948
})

variables.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,28 +55,28 @@ variable "members" {
5555

5656
variable "member_cpu_count" {
5757
type = number
58-
description = "Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling)"
58+
description = "Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations"
5959
default = 0
6060
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
6161
}
6262

6363
variable "member_disk_mb" {
6464
type = number
65-
description = "Allocated disk per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling)"
65+
description = "Allocated disk per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations"
6666
default = 5120
6767
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
6868
}
6969

7070
variable "member_host_flavor" {
7171
type = string
72-
description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)"
72+
description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor). Ignored during restore and point in time recovery operations"
7373
default = null
7474
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
7575
}
7676

7777
variable "member_memory_mb" {
7878
type = number
79-
description = "Allocated memory per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling)"
79+
description = "Allocated memory per member. [Learn more](https://cloud.ibm.com/docs/databases-for-postgresql?topic=databases-for-postgresql-resources-scaling). Ignored during restore and point in time recovery operations"
8080
default = 4096
8181
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
8282
}

0 commit comments

Comments
 (0)