Skip to content
This repository was archived by the owner on Jun 17, 2025. It is now read-only.

Commit 7415fd5

Browse files
authored
feat: added new input variable member_host_flavor and updated default value of memory_mb to 4096.<br><br>Reference: [Cloud Database Hosting Models](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hosting-models)<br><br>The [host model switching](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hosting-models&interface=api#hosting-models-switching) section has details of the migrations that the service is rolling out. All instances will have to be switched and the [time line](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hosting-models&interface=api#hosting-model-transition-timeline) for the migrations is outlined.<br><br>During the transition both existing and new models are supported.<br><br>Users of this module should consider the changes being implemented by the service. It is recommended that new deployments use the shared or isolated compute models to start, by specifying the member_host_flavor. It is recommended that existing deployments make updates to control the upgrade process by specifying shared or isolate compute configurations and the resource required to run the service, by adding the member_host_flavor. (#220)
1 parent b957d3e commit 7415fd5

File tree

12 files changed

+105
-49
lines changed

12 files changed

+105
-49
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ To attach access management tags to resources in this module, you need the follo
107107
| <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 |
108108
| <a name="input_member_cpu_count"></a> [member\_cpu\_count](#input\_member\_cpu\_count) | Allocated dedicated CPU per member. Minimum number of CPU allowed is 3. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `3` | no |
109109
| <a name="input_member_disk_mb"></a> [member\_disk\_mb](#input\_member\_disk\_mb) | Allocated disk per member. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `20480` | no |
110-
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per-member. See the following doc for supported values: https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `1024` | no |
110+
| <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 |
111+
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per-member. See the following doc for supported values: https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `4096` | no |
111112
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `3` | no |
112113
| <a name="input_name"></a> [name](#input\_name) | The name given to the Enterprise DB instance. | `string` | n/a | yes |
113114
| <a name="input_pitr_id"></a> [pitr\_id](#input\_pitr\_id) | (Optional) The ID of the source deployment EDB instance that you want to recover back to. The EDB instance is expected to be in an up and in running state. | `string` | `null` | no |

examples/backup/main.tf

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ module "resource_group" {
1111
}
1212

1313
module "enterprise_db" {
14-
count = var.enterprise_db_backup_crn != null ? 0 : 1
15-
source = "../.."
16-
resource_group_id = module.resource_group.resource_group_id
17-
name = "${var.prefix}-edb"
18-
edb_version = var.edb_version
19-
region = var.region
20-
resource_tags = var.resource_tags
21-
access_tags = var.access_tags
14+
count = var.enterprise_db_backup_crn != null ? 0 : 1
15+
source = "../.."
16+
resource_group_id = module.resource_group.resource_group_id
17+
name = "${var.prefix}-edb"
18+
edb_version = var.edb_version
19+
region = var.region
20+
resource_tags = var.resource_tags
21+
access_tags = var.access_tags
22+
member_host_flavor = "b3c.4x16.encrypted"
2223
}
2324

2425
data "ibm_database_backups" "backup_database" {
@@ -28,12 +29,13 @@ data "ibm_database_backups" "backup_database" {
2829

2930
# New enterprise db instance pointing to the backup instance
3031
module "restored_enterprise_db" {
31-
source = "../.."
32-
resource_group_id = module.resource_group.resource_group_id
33-
name = "${var.prefix}-edb-restored"
34-
edb_version = var.edb_version
35-
region = var.region
36-
resource_tags = var.resource_tags
37-
access_tags = var.access_tags
38-
backup_crn = var.enterprise_db_backup_crn == null ? data.ibm_database_backups.backup_database[0].backups[0].backup_id : var.enterprise_db_backup_crn
32+
source = "../.."
33+
resource_group_id = module.resource_group.resource_group_id
34+
name = "${var.prefix}-edb-restored"
35+
edb_version = var.edb_version
36+
region = var.region
37+
resource_tags = var.resource_tags
38+
access_tags = var.access_tags
39+
member_host_flavor = "b3c.4x16.encrypted"
40+
backup_crn = var.enterprise_db_backup_crn == null ? data.ibm_database_backups.backup_database[0].backups[0].backup_id : var.enterprise_db_backup_crn
3941
}

examples/basic/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ module "read_only_replica_enterprise_db" {
3838
access_tags = var.access_tags
3939
edb_version = var.edb_version
4040
remote_leader_crn = module.enterprise_db.crn
41-
member_memory_mb = 3072 # The minimum size of a read-only replica is 3 GB RAM
41+
member_memory_mb = 4096 # The minimum size of a read-only replica is 3 GB RAM
4242
member_disk_mb = 61440 # The minimum size of a read-only replica is 60 GB of disk
4343
}

examples/complete/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ module "enterprise_db" {
9494
resource_tags = var.resource_tags
9595
service_credential_names = var.service_credential_names
9696
access_tags = var.access_tags
97+
member_host_flavor = "b3c.4x16.encrypted"
9798
configuration = {
9899
max_connections = 250
99100
}

examples/fscloud/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ module "enterprise_db" {
6565
service_credential_names = var.service_credential_names
6666
access_tags = var.access_tags
6767
auto_scaling = var.auto_scaling
68+
member_host_flavor = "b3c.4x16.encrypted"
6869
backup_encryption_key_crn = var.backup_encryption_key_crn
6970
backup_crn = var.backup_crn
7071
cbr_rules = [

examples/pitr/main.tf

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,18 @@ data "ibm_database_point_in_time_recovery" "database_pitr" {
1616

1717
# New ICD enterprise database instance pointing to a PITR time
1818
module "enterprise_db_pitr" {
19-
source = "../.."
20-
resource_group_id = module.resource_group.resource_group_id
21-
name = "${var.prefix}-edb-pitr"
22-
region = var.region
23-
resource_tags = var.resource_tags
24-
access_tags = var.access_tags
25-
member_memory_mb = 3072 # 1*3*1024
26-
member_disk_mb = 61440 # 3*20**1024
27-
member_cpu_count = 9
28-
members = var.members
29-
edb_version = var.edb_version
30-
pitr_id = var.pitr_id
31-
pitr_time = data.ibm_database_point_in_time_recovery.database_pitr.earliest_point_in_time_recovery_time
19+
source = "../.."
20+
resource_group_id = module.resource_group.resource_group_id
21+
name = "${var.prefix}-edb-pitr"
22+
region = var.region
23+
resource_tags = var.resource_tags
24+
access_tags = var.access_tags
25+
member_host_flavor = "b3c.4x16.encrypted"
26+
member_memory_mb = 4096 # 1*3*1024
27+
member_disk_mb = 61440 # 3*20**1024
28+
member_cpu_count = 9
29+
members = var.members
30+
edb_version = var.edb_version
31+
pitr_id = var.pitr_id
32+
pitr_time = data.ibm_database_point_in_time_recovery.database_pitr.earliest_point_in_time_recovery_time
3233
}

main.tf

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ locals {
2424
# Determine if auto scaling is enabled
2525
auto_scaling_enabled = var.auto_scaling == null ? [] : [1]
2626

27+
# Determine if host_flavor is used
28+
host_flavor_set = var.member_host_flavor != null ? true : false
29+
2730
# Determine what KMS service is being used for database encryption
2831
kms_service = var.kms_key_crn != null ? (
2932
can(regex(".*kms.*", var.kms_key_crn)) ? "kms" : (
@@ -80,21 +83,52 @@ resource "ibm_database" "enterprise_db" {
8083
role = (users.value.role != "" ? users.value.role : null)
8184
}
8285
}
83-
group {
84-
group_id = "member" # Only member type is allowed for EDB
85-
memory {
86-
allocation_mb = var.member_memory_mb
87-
}
88-
disk {
89-
allocation_mb = var.member_disk_mb
90-
}
91-
cpu {
92-
allocation_count = var.member_cpu_count
86+
87+
## This for_each block is NOT a loop to attach to multiple group blocks.
88+
## This is used to conditionally add one, OR, the other group block depending on var.local.host_flavor_set
89+
## This block is for if host_flavor IS set to specific pre-defined host sizes and not set to "multitenant"
90+
dynamic "group" {
91+
for_each = local.host_flavor_set ? [1] : []
92+
content {
93+
group_id = "member" # Only member type is allowed for IBM Cloud Databases
94+
host_flavor {
95+
id = var.member_host_flavor
96+
}
97+
disk {
98+
allocation_mb = var.member_disk_mb
99+
}
100+
dynamic "members" {
101+
for_each = var.remote_leader_crn == null ? [1] : []
102+
content {
103+
allocation_count = var.members
104+
}
105+
}
93106
}
94-
dynamic "members" {
95-
for_each = var.remote_leader_crn == null ? [1] : []
96-
content {
97-
allocation_count = var.members
107+
}
108+
109+
## "multitenant"
110+
## https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hosting-models&interface=terraform#hosting-models-availability
111+
## Only isolated compute is supported for EnterpriseDB
112+
113+
## This block is for if host_flavor IS NOT set
114+
dynamic "group" {
115+
for_each = local.host_flavor_set ? [] : [1]
116+
content {
117+
group_id = "member" # Only member type is allowed for IBM Cloud Databases
118+
memory {
119+
allocation_mb = var.member_memory_mb
120+
}
121+
disk {
122+
allocation_mb = var.member_disk_mb
123+
}
124+
cpu {
125+
allocation_count = var.member_cpu_count
126+
}
127+
dynamic "members" {
128+
for_each = var.remote_leader_crn == null ? [1] : []
129+
content {
130+
allocation_count = var.members
131+
}
98132
}
99133
}
100134
}

modules/fscloud/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ No resources.
4242
| <a name="input_kms_key_crn"></a> [kms\_key\_crn](#input\_kms\_key\_crn) | The root key CRN of the Hyper Protect Crypto Service (HPCS) to use for disk encryption. | `string` | n/a | yes |
4343
| <a name="input_member_cpu_count"></a> [member\_cpu\_count](#input\_member\_cpu\_count) | Allocated dedicated CPU per member. Minimum number of CPU allowed is 3 . For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `3` | no |
4444
| <a name="input_member_disk_mb"></a> [member\_disk\_mb](#input\_member\_disk\_mb) | Allocated disk per member. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `20480` | no |
45-
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per member. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `1024` | no |
45+
| <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 |
46+
| <a name="input_member_memory_mb"></a> [member\_memory\_mb](#input\_member\_memory\_mb) | Allocated memory per member. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling | `number` | `4096` | no |
4647
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `3` | no |
4748
| <a name="input_name"></a> [name](#input\_name) | The name given to the Enterprise DB instance. | `string` | n/a | yes |
4849
| <a name="input_region"></a> [region](#input\_region) | The region where you want to deploy your instance. Must be the same region as the Hyper Protect Crypto Services instance. | `string` | `"us-south"` | no |

modules/fscloud/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module "enterprise_db" {
1818
member_memory_mb = var.member_memory_mb
1919
member_disk_mb = var.member_disk_mb
2020
member_cpu_count = var.member_cpu_count
21+
member_host_flavor = var.member_host_flavor
2122
members = var.members
2223
service_credential_names = var.service_credential_names
2324
auto_scaling = var.auto_scaling

modules/fscloud/variables.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ variable "region" {
3232
variable "member_memory_mb" {
3333
type = number
3434
description = "Allocated memory per member. For more information, see https://cloud.ibm.com/docs/databases-for-enterprisedb?topic=databases-for-enterprisedb-resources-scaling"
35-
default = 1024
35+
default = 4096
3636
}
3737

3838
variable "member_disk_mb" {
@@ -47,6 +47,13 @@ variable "member_cpu_count" {
4747
default = 3
4848
}
4949

50+
variable "member_host_flavor" {
51+
type = string
52+
description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)."
53+
default = null
54+
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
55+
}
56+
5057
variable "service_credential_names" {
5158
description = "Map of name, role for service credentials that you want to create for the database"
5259
type = map(string)

0 commit comments

Comments
 (0)