diff --git a/README.md b/README.md index 0e8fce1f..01a4c755 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ To attach access management tags to resources in this module, you need the follo | [kms\_key\_crn](#input\_kms\_key\_crn) | The CRN of a Key Protect or Hyper Protect Crypto Services encryption key to encrypt your data. Applies only if `use_ibm_owned_encryption_key` is false. By default this key is used for both deployment data and backups, but this behaviour can be altered using the `use_same_kms_key_for_backups` and `backup_encryption_key_crn` inputs. Bare in mind that backups encryption is only available in certain regions. See [Bring your own key for backups](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-key-protect&interface=ui#key-byok) and [Using the HPCS Key for Backup encryption](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hpcs#use-hpcs-backups). | `string` | `null` | no | | [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 | | [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 | -| [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 | +| [member\_host\_flavor](#input\_member\_host\_flavor) | The host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor). | `string` | `"multitenant"` | no | | [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 | | [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `2` | no | | [name](#input\_name) | The name to give the Postgresql instance. | `string` | n/a | yes | diff --git a/examples/basic/main.tf b/examples/basic/main.tf index fb3f93b3..ffdf30e7 100644 --- a/examples/basic/main.tf +++ b/examples/basic/main.tf @@ -23,7 +23,7 @@ module "database" { tags = var.resource_tags access_tags = var.access_tags service_endpoints = var.service_endpoints - member_host_flavor = var.member_host_flavor + member_host_flavor = "multitenant" service_credential_names = { "postgresql_admin" : "Administrator", "postgresql_operator" : "Operator", diff --git a/examples/basic/variables.tf b/examples/basic/variables.tf index 7029af4b..74fd6e70 100644 --- a/examples/basic/variables.tf +++ b/examples/basic/variables.tf @@ -51,12 +51,6 @@ variable "read_only_replicas_count" { } } -variable "member_host_flavor" { - type = string - description = "Allocated host flavor per member. For more information, see https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor" - default = null -} - variable "service_endpoints" { type = string description = "The type of endpoint of the database instance. Possible values: `public`, `private`, `public-and-private`." diff --git a/ibm_catalog.json b/ibm_catalog.json index 96471ac9..92322039 100644 --- a/ibm_catalog.json +++ b/ibm_catalog.json @@ -197,7 +197,7 @@ { "displayname": "preferred", "value": "__NULL__" - }, + }, { "displayname": "13", "value": "13" @@ -233,7 +233,38 @@ "key": "member_disk_mb" }, { - "key": "member_host_flavor" + "key": "member_host_flavor", + "default_value": "multitenant", + "options": [ + { + "displayname": "multitenant (Shared)", + "value": "multitenant" + }, + { + "displayname": "XS 4x16", + "value": "b3c.4x16.encrypted" + }, + { + "displayname": "S 8x32", + "value": "b3c.8x32.encrypted" + }, + { + "displayname": "S+ 16x64", + "value": "m3c.8x64.encrypted" + }, + { + "displayname": "M 16x64", + "value": "b3c.16x64.encrypted" + }, + { + "displayname": "L 32x128", + "value": "b3c.32x128.encrypted" + }, + { + "displayname": "XL 30x240", + "value": "m3c.30x240.encrypted" + } + ] }, { "key": "configuration" diff --git a/main.tf b/main.tf index 25470a22..0e0530f2 100644 --- a/main.tf +++ b/main.tf @@ -27,9 +27,6 @@ locals { # Determine if auto scaling is enabled auto_scaling_enabled = var.auto_scaling == null ? [] : [1] - # Determine if host_flavor is used - host_flavor_set = var.member_host_flavor != null ? true : false - # Determine if restore, from backup or point in time recovery recovery_mode = var.backup_crn != null || var.pitr_id != null } @@ -212,10 +209,10 @@ resource "ibm_database" "postgresql_db" { # or point in time recovery ## This for_each block is NOT a loop to attach to multiple group blocks. - ## This is used to conditionally add one, OR, the other group block depending on var.local.host_flavor_set + ## This is used to conditionally add one, OR, the other group block depending on var.member_host_flavor ## This block is for if host_flavor IS set to specific pre-defined host sizes and not set to "multitenant" dynamic "group" { - for_each = local.host_flavor_set && var.member_host_flavor != "multitenant" && !local.recovery_mode ? [1] : [] + for_each = var.member_host_flavor != "multitenant" && !local.recovery_mode ? [1] : [] content { group_id = "member" # Only member type is allowed for IBM Cloud Databases host_flavor { @@ -235,7 +232,7 @@ resource "ibm_database" "postgresql_db" { ## This block is for if host_flavor IS set to "multitenant" dynamic "group" { - for_each = local.host_flavor_set && var.member_host_flavor == "multitenant" && !local.recovery_mode ? [1] : [] + for_each = var.member_host_flavor == "multitenant" && !local.recovery_mode ? [1] : [] content { group_id = "member" # Only member type is allowed for IBM Cloud Databases host_flavor { @@ -259,29 +256,6 @@ resource "ibm_database" "postgresql_db" { } } - ## This block is for if host_flavor IS NOT set - dynamic "group" { - for_each = local.host_flavor_set == false && !local.recovery_mode ? [1] : [] - content { - group_id = "member" # Only member type is allowed for IBM Cloud Databases - memory { - allocation_mb = var.member_memory_mb - } - disk { - allocation_mb = var.member_disk_mb - } - cpu { - allocation_count = var.member_cpu_count - } - dynamic "members" { - for_each = var.remote_leader_crn == null ? [1] : [] - content { - allocation_count = var.members - } - } - } - } - ## This for_each block is NOT a loop to attach to multiple auto_scaling blocks. ## This block is only used to conditionally add auto_scaling block depending on var.auto_scaling dynamic "auto_scaling" { diff --git a/modules/fscloud/README.md b/modules/fscloud/README.md index 9e854663..0aba2f5e 100644 --- a/modules/fscloud/README.md +++ b/modules/fscloud/README.md @@ -38,7 +38,7 @@ No resources. | [kms\_key\_crn](#input\_kms\_key\_crn) | The CRN of a Key Protect or Hyper Protect Crypto Services encryption key to encrypt your data. Applies only if `use_ibm_owned_encryption_key` is false. By default this key is used for both deployment data and backups, but this behaviour can be altered using the `use_same_kms_key_for_backups` and `backup_encryption_key_crn` inputs. Bare in mind that backups encryption is only available in certain regions. See [Bring your own key for backups](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-key-protect&interface=ui#key-byok) and [Using the HPCS Key for Backup encryption](https://cloud.ibm.com/docs/cloud-databases?topic=cloud-databases-hpcs#use-hpcs-backups). | `string` | `null` | no | | [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` | `3` | no | | [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 | -| [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 | +| [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` | `"multitenant"` | no | | [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 | | [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `2` | no | | [name](#input\_name) | The name to give the Postgresql instance. | `string` | n/a | yes | diff --git a/modules/fscloud/variables.tf b/modules/fscloud/variables.tf index 14ed0a4d..63e1e483 100644 --- a/modules/fscloud/variables.tf +++ b/modules/fscloud/variables.tf @@ -49,7 +49,7 @@ variable "member_disk_mb" { variable "member_host_flavor" { type = string description = "Allocated host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)" - default = null + default = "multitenant" } variable "member_memory_mb" { diff --git a/tests/other_test.go b/tests/other_test.go index b5e54140..c2249565 100644 --- a/tests/other_test.go +++ b/tests/other_test.go @@ -98,19 +98,16 @@ func TestRunCompleteExample(t *testing.T) { assert.NotNil(t, output, "Expected some output") } -func TestRunBasicExampleWithFlavorMultitenant(t *testing.T) { +func TestRunBasicExample(t *testing.T) { t.Parallel() options := testhelper.TestOptionsDefaultWithVars(&testhelper.TestOptions{ Testing: t, TerraformDir: "examples/basic", - Prefix: "pg-flvr-multitenant", + Prefix: "pg-basic", BestRegionYAMLPath: regionSelectionPath, ResourceGroup: resourceGroup, - TerraformVars: map[string]interface{}{ - "member_host_flavor": "multitenant", - }, - CloudInfoService: sharedInfoSvc, + CloudInfoService: sharedInfoSvc, }) output, err := options.RunTestConsistency() diff --git a/variables.tf b/variables.tf index 355cba0f..4d882b39 100644 --- a/variables.tf +++ b/variables.tf @@ -69,9 +69,13 @@ variable "member_disk_mb" { variable "member_host_flavor" { type = string - 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" - default = null - # Validation is done in the Terraform plan phase by the IBM provider, so no need to add extra validation here. + description = "The host flavor per member. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)." + default = "multitenant" + # Prevent null or "", require multitenant or a machine type + validation { + condition = (length(var.member_host_flavor) > 0) + error_message = "Member host flavor must be specified. [Learn more](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs/resources/database#host_flavor)." + } } variable "member_memory_mb" {