Skip to content

Commit ae63289

Browse files
authored
feat: support for new ICD hosting model (#92)
1 parent 2f62d2e commit ae63289

File tree

10 files changed

+118
-42
lines changed

10 files changed

+118
-42
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ To attach access management tags to resources in this module, you need the follo
121121
| <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 |
122122
| <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. For more information, see https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-resources-scaling | `number` | `0` | no |
123123
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `10240` | no |
124-
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `1024` | no |
124+
| <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 |
125+
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `4096` | no |
125126
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `3` | no |
126127
| <a name="input_mysql_version"></a> [mysql\_version](#input\_mysql\_version) | Version of the MySQL instance to provision. If no value is passed, the current preferred version of IBM Cloud Databases is used. | `string` | `null` | no |
127128
| <a name="input_name"></a> [name](#input\_name) | The name to give the MySQL instance. | `string` | n/a | yes |

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 "mysql_db" {
14-
count = var.mysql_db_backup_crn != null ? 0 : 1
15-
source = "../.."
16-
resource_group_id = module.resource_group.resource_group_id
17-
name = "${var.prefix}-mysql"
18-
mysql_version = var.mysql_version
19-
region = var.region
20-
resource_tags = var.resource_tags
21-
access_tags = var.access_tags
14+
count = var.mysql_db_backup_crn != null ? 0 : 1
15+
source = "../.."
16+
resource_group_id = module.resource_group.resource_group_id
17+
name = "${var.prefix}-mysql"
18+
mysql_version = var.mysql_version
19+
region = var.region
20+
resource_tags = var.resource_tags
21+
access_tags = var.access_tags
22+
member_host_flavor = "multitenant"
2223
}
2324

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

2930
# New mysql instance pointing to the backup instance
3031
module "restored_mysql_db" {
31-
source = "../.."
32-
resource_group_id = module.resource_group.resource_group_id
33-
name = "${var.prefix}-mysql-restored"
34-
mysql_version = var.mysql_version
35-
region = var.region
36-
resource_tags = var.resource_tags
37-
access_tags = var.access_tags
38-
backup_crn = var.mysql_db_backup_crn == null ? data.ibm_database_backups.backup_database[0].backups[0].backup_id : var.mysql_db_backup_crn
32+
source = "../.."
33+
resource_group_id = module.resource_group.resource_group_id
34+
name = "${var.prefix}-mysql-restored"
35+
mysql_version = var.mysql_version
36+
region = var.region
37+
resource_tags = var.resource_tags
38+
access_tags = var.access_tags
39+
member_host_flavor = "multitenant"
40+
backup_crn = var.mysql_db_backup_crn == null ? data.ibm_database_backups.backup_database[0].backups[0].backup_id : var.mysql_db_backup_crn
3941
}

examples/complete/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ module "mysql_db" {
107107
resource_tags = var.resource_tags
108108
service_credential_names = var.service_credential_names
109109
access_tags = var.access_tags
110+
member_host_flavor = "multitenant"
110111
configuration = {
111112
max_connections = 250
112113
}

examples/fscloud/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ module "mysql_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: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ module "resource_group" {
1212

1313
# New ICD mysql database instance pointing to a PITR time
1414
module "mysql_db_pitr" {
15-
source = "../.."
16-
resource_group_id = module.resource_group.resource_group_id
17-
name = "${var.prefix}-mysql-pitr"
18-
region = var.region
19-
resource_tags = var.resource_tags
20-
access_tags = var.access_tags
21-
mysql_version = var.mysql_version
22-
pitr_id = var.pitr_id
23-
pitr_time = var.pitr_time == "" ? " " : var.pitr_time
15+
source = "../.."
16+
resource_group_id = module.resource_group.resource_group_id
17+
name = "${var.prefix}-mysql-pitr"
18+
region = var.region
19+
resource_tags = var.resource_tags
20+
access_tags = var.access_tags
21+
mysql_version = var.mysql_version
22+
pitr_id = var.pitr_id
23+
pitr_time = var.pitr_time == "" ? " " : var.pitr_time
24+
member_host_flavor = "multitenant"
2425
}

main.tf

Lines changed: 68 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ locals {
2222
# Determine if auto scaling is enabled
2323
auto_scaling_enabled = var.auto_scaling == null ? [] : [1]
2424

25+
# Determine if host_flavor is used
26+
host_flavor_set = var.member_host_flavor != null ? true : false
27+
2528
# Determine what KMS service is being used for database encryption
2629
kms_service = var.kms_key_crn != null ? (
2730
can(regex(".*kms.*", var.kms_key_crn)) ? "kms" : (
@@ -79,21 +82,73 @@ resource "ibm_database" "mysql_db" {
7982
}
8083
}
8184

82-
group {
83-
group_id = "member" # Only member type is allowed for mysql
84-
memory {
85-
allocation_mb = var.member_memory_mb
86-
}
87-
disk {
88-
allocation_mb = var.member_disk_mb
85+
## This for_each block is NOT a loop to attach to multiple group blocks.
86+
## This is used to conditionally add one, OR, the other group block depending on var.local.host_flavor_set
87+
## This block is for if host_flavor IS set to specific pre-defined host sizes and not set to "multitenant"
88+
dynamic "group" {
89+
for_each = local.host_flavor_set && var.member_host_flavor != "multitenant" ? [1] : []
90+
content {
91+
group_id = "member" # Only member type is allowed for IBM Cloud Databases
92+
host_flavor {
93+
id = var.member_host_flavor
94+
}
95+
disk {
96+
allocation_mb = var.member_disk_mb
97+
}
98+
dynamic "members" {
99+
for_each = var.remote_leader_crn == null ? [1] : []
100+
content {
101+
allocation_count = var.members
102+
}
103+
}
89104
}
90-
cpu {
91-
allocation_count = var.member_cpu_count
105+
}
106+
107+
## This block is for if host_flavor IS set to "multitenant"
108+
dynamic "group" {
109+
for_each = local.host_flavor_set && var.member_host_flavor == "multitenant" ? [1] : []
110+
content {
111+
group_id = "member" # Only member type is allowed for IBM Cloud Databases
112+
host_flavor {
113+
id = var.member_host_flavor
114+
}
115+
disk {
116+
allocation_mb = var.member_disk_mb
117+
}
118+
memory {
119+
allocation_mb = var.member_memory_mb
120+
}
121+
cpu {
122+
allocation_count = var.member_cpu_count
123+
}
124+
dynamic "members" {
125+
for_each = var.remote_leader_crn == null ? [1] : []
126+
content {
127+
allocation_count = var.members
128+
}
129+
}
92130
}
93-
dynamic "members" {
94-
for_each = var.remote_leader_crn == null ? [1] : []
95-
content {
96-
allocation_count = var.members
131+
}
132+
133+
## This block is for if host_flavor IS NOT set
134+
dynamic "group" {
135+
for_each = local.host_flavor_set ? [] : [1]
136+
content {
137+
group_id = "member" # Only member type is allowed for IBM Cloud Databases
138+
memory {
139+
allocation_mb = var.member_memory_mb
140+
}
141+
disk {
142+
allocation_mb = var.member_disk_mb
143+
}
144+
cpu {
145+
allocation_count = var.member_cpu_count
146+
}
147+
dynamic "members" {
148+
for_each = var.remote_leader_crn == null ? [1] : []
149+
content {
150+
allocation_count = var.members
151+
}
97152
}
98153
}
99154
}

modules/fscloud/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ No resources.
4141
| <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 |
4242
| <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. For more information, see https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-resources-scaling | `number` | `3` | no |
4343
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `10240` | no |
44-
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `1024` | no |
44+
| <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 |
45+
| <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-mysql?topic=databases-for-mysql-resources-scaling | `number` | `4096` | no |
4546
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `3` | no |
4647
| <a name="input_mysql_version"></a> [mysql\_version](#input\_mysql\_version) | Version of the MySQL instance. If no value is passed, the current preferred version of IBM Cloud Databases is used. | `string` | `null` | no |
4748
| <a name="input_name"></a> [name](#input\_name) | The name to give the MySQL instance. | `string` | n/a | yes |

modules/fscloud/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module "mysql_db" {
1717
member_memory_mb = var.member_memory_mb
1818
member_disk_mb = var.member_disk_mb
1919
member_cpu_count = var.member_cpu_count
20+
member_host_flavor = var.member_host_flavor
2021
members = var.members
2122
admin_pass = var.admin_pass
2223
users = var.users

modules/fscloud/variables.tf

Lines changed: 7 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. See the following doc for supported values: https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-resources-scaling"
35-
default = 1024
35+
default = 4096
3636
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
3737
}
3838

@@ -50,6 +50,12 @@ variable "member_cpu_count" {
5050
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
5151
}
5252

53+
variable "member_host_flavor" {
54+
type = string
55+
description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)."
56+
default = null
57+
}
58+
5359
variable "admin_pass" {
5460
type = string
5561
description = "The password for the database administrator. If the admin password is null then the admin user ID cannot be accessed. More users can be specified in a user block."

variables.tf

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ variable "region" {
4040
variable "member_memory_mb" {
4141
type = number
4242
description = "Allocated memory per-member. See the following doc for supported values: https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-resources-scaling"
43-
default = 1024
43+
default = 4096
4444
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
4545
}
4646

@@ -58,6 +58,13 @@ variable "member_cpu_count" {
5858
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
5959
}
6060

61+
variable "member_host_flavor" {
62+
type = string
63+
description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)."
64+
default = null
65+
# Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here.
66+
}
67+
6168
variable "service_credential_names" {
6269
description = "Map of name, role for service credentials that you want to create for the database"
6370
type = map(string)

0 commit comments

Comments
 (0)