Skip to content

Commit 702141b

Browse files
feat: Module updates:<br>- instance_name renamed to name<br>- endpoints renamed to service_endpoints<br><br>DA updates:<br>- Removed cbr_rule_ids, adminuser and certificate_base64 outputs.<br>- Added inputs existing_redis_instance_crn, admin_pass_secret_manager_secret_group, use_existing_admin_pass_secret_manager_secret_group and admin_pass_secret_manager_secret_name inputs.<br>- Added support for passing existing RabbitMQ instance (#322)
1 parent 730221e commit 702141b

File tree

20 files changed

+424
-204
lines changed

20 files changed

+424
-204
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,20 @@ You need the following permissions to run this module.
9090
| <a name="input_auto_scaling"></a> [auto\_scaling](#input\_auto\_scaling) | Optional rules to allow the database to increase resources in response to usage. Only a single autoscaling block is allowed. Make sure you understand the effects of autoscaling, especially for production environments. See https://cloud.ibm.com/docs/messages-for-rabbitmq?topic=messages-for-rabbitmq-autoscaling in the IBM Cloud Docs. | <pre>object({<br/> disk = object({<br/> capacity_enabled = optional(bool, false)<br/> free_space_less_than_percent = optional(number, 10)<br/> io_above_percent = optional(number, 90)<br/> io_enabled = optional(bool, false)<br/> io_over_period = optional(string, "15m")<br/> rate_increase_percent = optional(number, 10)<br/> rate_limit_mb_per_member = optional(number, 3670016)<br/> rate_period_seconds = optional(number, 900)<br/> rate_units = optional(string, "mb")<br/> })<br/> memory = object({<br/> io_above_percent = optional(number, 90)<br/> io_enabled = optional(bool, false)<br/> io_over_period = optional(string, "15m")<br/> rate_increase_percent = optional(number, 10)<br/> rate_limit_mb_per_member = optional(number, 114688)<br/> rate_period_seconds = optional(number, 900)<br/> rate_units = optional(string, "mb")<br/> })<br/> })</pre> | `null` | no |
9191
| <a name="input_backup_crn"></a> [backup\_crn](#input\_backup\_crn) | The CRN of a backup resource to restore from. The backup is created by a database deployment with the same service ID. The backup is loaded after provisioning and the new deployment starts up that uses that data. A backup CRN is in the format crn:v1:<…>:backup:. If omitted, the database is provisioned empty. | `string` | `null` | no |
9292
| <a name="input_backup_encryption_key_crn"></a> [backup\_encryption\_key\_crn](#input\_backup\_encryption\_key\_crn) | The CRN of a Key Protect or Hyper Protect Crypto Services encryption key that you want to use for encrypting the disk that holds deployment backups. Applies only if `use_ibm_owned_encryption_key` is false and `use_same_kms_key_for_backups` is false. If no value is passed, and `use_same_kms_key_for_backups` is true, the value of `kms_key_crn` is used. Alternatively set `use_default_backup_encryption_key` to true to use the IBM Cloud Databases default encryption. 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 |
93-
| <a name="input_cbr_rules"></a> [cbr\_rules](#input\_cbr\_rules) | (Optional, list) List of CBR rules to create | <pre>list(object({<br/> description = string<br/> account_id = string<br/> rule_contexts = list(object({<br/> attributes = optional(list(object({<br/> name = string<br/> value = string<br/> }))) }))<br/> enforcement_mode = string<br/> }))</pre> | `[]` | no |
93+
| <a name="input_cbr_rules"></a> [cbr\_rules](#input\_cbr\_rules) | (Optional, list) List of context-based restrictions rules to create. | <pre>list(object({<br/> description = string<br/> account_id = string<br/> rule_contexts = list(object({<br/> attributes = optional(list(object({<br/> name = string<br/> value = string<br/> }))) }))<br/> enforcement_mode = string<br/> tags = optional(list(object({<br/> name = string<br/> value = string<br/> })))<br/> operations = optional(list(object({<br/> api_types = list(object({<br/> api_type_id = string<br/> }))<br/> })))<br/> }))</pre> | `[]` | no |
9494
| <a name="input_cpu_count"></a> [cpu\_count](#input\_cpu\_count) | Allocated dedicated CPU per member. For shared CPU, set to 0. [Learn more](https://cloud.ibm.com/docs/messages-for-rabbitmq?topic=messages-for-rabbitmq-resources-scaling) | `number` | `0` | no |
9595
| <a name="input_disk_mb"></a> [disk\_mb](#input\_disk\_mb) | Allocated disk per member. [Learn more](https://cloud.ibm.com/docs/messages-for-rabbitmq?topic=messages-for-rabbitmq-resources-scaling) | `number` | `1024` | no |
96-
| <a name="input_endpoints"></a> [endpoints](#input\_endpoints) | Endpoints available to the database instance (public, private, public-and-private) | `string` | `"private"` | no |
97-
| <a name="input_instance_name"></a> [instance\_name](#input\_instance\_name) | The name to give the RabbitMQ instance | `string` | n/a | yes |
9896
| <a name="input_kms_key_crn"></a> [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 |
9997
| <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 |
10098
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. [Learn more](https://cloud.ibm.com/docs/messages-for-rabbitmq?topic=messages-for-rabbitmq-resources-scaling) | `number` | `3` | no |
10199
| <a name="input_memory_mb"></a> [memory\_mb](#input\_memory\_mb) | Allocated memory per-member. [Learn more](https://cloud.ibm.com/docs/messages-for-rabbitmq?topic=messages-for-rabbitmq-resources-scaling) | `number` | `8192` | no |
100+
| <a name="input_name"></a> [name](#input\_name) | The name to give the RabbitMQ instance | `string` | n/a | yes |
102101
| <a name="input_plan"></a> [plan](#input\_plan) | The name of the service plan that you choose for your RabbitMQ instance | `string` | `"standard"` | no |
103102
| <a name="input_rabbitmq_version"></a> [rabbitmq\_version](#input\_rabbitmq\_version) | The version of RabbitMQ to deploy. If no value passed, the current ICD preferred version is used. | `string` | `null` | no |
104103
| <a name="input_region"></a> [region](#input\_region) | The region where you want to deploy your instance. | `string` | `"us-south"` | no |
105104
| <a name="input_resource_group_id"></a> [resource\_group\_id](#input\_resource\_group\_id) | The resource group ID where the RabbitMQ instance will be created. | `string` | n/a | yes |
106105
| <a name="input_service_credential_names"></a> [service\_credential\_names](#input\_service\_credential\_names) | Map of name, role for service credentials that you want to create for the database | `map(string)` | `{}` | no |
106+
| <a name="input_service_endpoints"></a> [service\_endpoints](#input\_service\_endpoints) | Specify whether you want to enable the public, private, or both service endpoints. Supported values are 'public', 'private', or 'public-and-private'. | `string` | `"private"` | no |
107107
| <a name="input_skip_iam_authorization_policy"></a> [skip\_iam\_authorization\_policy](#input\_skip\_iam\_authorization\_policy) | Set to true to skip the creation of IAM authorization policies that permits all Databases for RabbitMQ instances in the given resource group 'Reader' access to the Key Protect or Hyper Protect Crypto Services key that was provided in the `kms_key_crn` and `backup_encryption_key_crn` inputs. This policy is required in order to enable KMS encryption, so only skip creation if there is one already present in your account. No policy is created if `use_ibm_owned_encryption_key` is true. | `bool` | `false` | no |
108108
| <a name="input_tags"></a> [tags](#input\_tags) | Optional list of tags to be added to the RabbitMQ instance. | `list(any)` | `[]` | no |
109109
| <a name="input_use_default_backup_encryption_key"></a> [use\_default\_backup\_encryption\_key](#input\_use\_default\_backup\_encryption\_key) | When `use_ibm_owned_encryption_key` is set to false, backups will be encrypted with either the key specified in `kms_key_crn`, or in `backup_encryption_key_crn` if a value is passed. If you do not want to use your own key for backups encryption, you can set this to `true` to use the IBM Cloud Databases default encryption for backups. Alternatively set `use_ibm_owned_encryption_key` to true to use the default encryption for both backups and deployment data. | `bool` | `false` | no |

examples/backup-restore/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ data "ibm_database_backups" "backup_database" {
1818
module "restored_rabbitmq_db" {
1919
source = "../.."
2020
resource_group_id = module.resource_group.resource_group_id
21-
instance_name = "${var.prefix}-rabbitmq-restored"
21+
name = "${var.prefix}-rabbitmq-restored"
2222
region = var.region
2323
rabbitmq_version = var.rabbitmq_version
2424
access_tags = var.access_tags

examples/basic/main.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ module "resource_group" {
1414
# RabbitMQ
1515
##############################################################################
1616

17-
module "icd_rabbitmq" {
17+
module "database" {
1818
source = "../.."
1919
resource_group_id = module.resource_group.resource_group_id
20-
instance_name = "${var.prefix}-rabbitmq"
20+
name = "${var.prefix}-rabbitmq"
2121
region = var.region
2222
tags = var.resource_tags
2323
access_tags = var.access_tags
2424
rabbitmq_version = var.rabbitmq_version
25+
service_endpoints = var.service_endpoints
2526
}

examples/basic/outputs.tf

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,37 @@
22
# Outputs
33
##############################################################################
44
output "id" {
5-
description = "rabbitmq instance id"
6-
value = module.icd_rabbitmq.id
5+
description = "RabbitMQ instance id"
6+
value = module.database.id
7+
}
8+
9+
output "rabbitmq_crn" {
10+
description = "RabbitMQ CRN"
11+
value = module.database.crn
712
}
813

914
output "version" {
10-
description = "rabbitmq instance version"
11-
value = module.icd_rabbitmq.version
15+
description = "RabbitMQ instance version"
16+
value = module.database.version
1217
}
1318

1419
output "adminuser" {
1520
description = "Database admin user name"
16-
value = module.icd_rabbitmq.adminuser
21+
value = module.database.adminuser
1722
}
1823

1924
output "hostname" {
2025
description = "Database hostname"
21-
value = module.icd_rabbitmq.hostname
26+
value = module.database.hostname
2227
}
2328

2429
output "port" {
2530
description = "Database port"
26-
value = module.icd_rabbitmq.port
31+
value = module.database.port
2732
}
2833

2934
output "certificate_base64" {
3035
description = "Database connection certificate"
31-
value = module.icd_rabbitmq.certificate_base64
36+
value = module.database.certificate_base64
3237
sensitive = true
3338
}

examples/basic/variables.tf

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,14 @@ variable "access_tags" {
3939
description = "A list of access tags to apply to the rabbitmq instance created by the module, see https://cloud.ibm.com/docs/account?topic=account-access-tags-tutorial for more details"
4040
default = []
4141
}
42+
43+
variable "service_endpoints" {
44+
type = string
45+
description = "Specify whether you want to enable the public, private, or both service endpoints. Supported values are 'public', 'private', or 'public-and-private'."
46+
default = "public"
47+
48+
validation {
49+
condition = can(regex("public|public-and-private|private", var.service_endpoints))
50+
error_message = "Valid values for service_endpoints are 'public', 'public-and-private', and 'private'"
51+
}
52+
}

examples/complete/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ module "cbr_zone" {
9292
module "icd_rabbitmq" {
9393
source = "../../"
9494
resource_group_id = module.resource_group.resource_group_id
95-
instance_name = "${var.prefix}-rabbitmq"
95+
name = "${var.prefix}-rabbitmq"
9696
region = var.region
9797
admin_pass = var.admin_pass
9898
users = var.users

examples/fscloud/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ module "cbr_zone" {
5656
module "rabbitmq_database" {
5757
source = "../../modules/fscloud"
5858
resource_group_id = module.resource_group.resource_group_id
59-
instance_name = "${var.prefix}-rabbitmq"
59+
name = "${var.prefix}-rabbitmq"
6060
region = var.region
6161
rabbitmq_version = var.rabbitmq_version
6262
kms_key_crn = var.kms_key_crn

ibm_catalog.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,21 @@
317317
},
318318
{
319319
"key": "use_default_backup_encryption_key"
320+
},
321+
{
322+
"key": "admin_pass_secrets_manager_secret_group"
323+
},
324+
{
325+
"key": "admin_pass_secrets_manager_secret_name"
326+
},
327+
{
328+
"key": "use_existing_admin_pass_secrets_manager_secret_group"
329+
},
330+
{
331+
"key": "cbr_rules"
332+
},
333+
{
334+
"key": "existing_rabbitmq_instance_crn"
320335
}
321336
]
322337
}

main.tf

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
########################################################################################################################
2+
# Input variable validation
3+
# (approach based on https://github.com/hashicorp/terraform/issues/25609#issuecomment-1057614400)
4+
#
5+
# TODO: Replace with terraform cross variable validation: https://github.ibm.com/GoldenEye/issues/issues/10836
6+
########################################################################################################################
7+
18
locals {
29
# Validation (approach based on https://github.com/hashicorp/terraform/issues/25609#issuecomment-1057614400)
310
# tflint-ignore: terraform_unused_declarations
@@ -8,9 +15,13 @@ locals {
815
validate_backup_key = !var.use_ibm_owned_encryption_key && var.backup_encryption_key_crn != null && (var.use_default_backup_encryption_key || var.use_same_kms_key_for_backups) ? tobool("When passing a value for 'backup_encryption_key_crn' you cannot set 'use_default_backup_encryption_key' to true or 'use_ibm_owned_encryption_key' to false.") : true
916
# tflint-ignore: terraform_unused_declarations
1017
validate_backup_key_2 = !var.use_ibm_owned_encryption_key && var.backup_encryption_key_crn == null && !var.use_same_kms_key_for_backups ? tobool("When 'use_same_kms_key_for_backups' is set to false, a value needs to be passed for 'backup_encryption_key_crn'.") : true
18+
}
1119

12-
# If no value passed for 'backup_encryption_key_crn' use the value of 'kms_key_crn' and perform validation of 'kms_key_crn' to check if region is supported by backup encryption key.
20+
########################################################################################################################
21+
# Locals
22+
########################################################################################################################
1323

24+
locals {
1425
# If 'use_ibm_owned_encryption_key' is true or 'use_default_backup_encryption_key' is true, default to null.
1526
# If no value is passed for 'backup_encryption_key_crn', then default to use 'kms_key_crn'.
1627
backup_encryption_key_crn = var.use_ibm_owned_encryption_key || var.use_default_backup_encryption_key ? null : (var.backup_encryption_key_crn != null ? var.backup_encryption_key_crn : var.kms_key_crn)
@@ -20,6 +31,7 @@ locals {
2031

2132
# Determine if host_flavor is used
2233
host_flavor_set = var.member_host_flavor != null ? true : false
34+
2335
}
2436

2537
########################################################################################################################
@@ -165,14 +177,14 @@ resource "time_sleep" "wait_for_backup_kms_authorization_policy" {
165177
########################################################################################################################
166178

167179
resource "ibm_database" "rabbitmq_database" {
168-
depends_on = [time_sleep.wait_for_authorization_policy]
169-
name = var.instance_name
180+
depends_on = [time_sleep.wait_for_authorization_policy, time_sleep.wait_for_backup_kms_authorization_policy]
181+
name = var.name
170182
plan = var.plan
171183
location = var.region
172184
service = "messages-for-rabbitmq"
173185
version = var.rabbitmq_version
174186
resource_group_id = var.resource_group_id
175-
service_endpoints = var.endpoints
187+
service_endpoints = var.service_endpoints
176188
tags = var.tags
177189
key_protect_key = var.kms_key_crn
178190
backup_encryption_key_crn = local.backup_encryption_key_crn
@@ -373,7 +385,7 @@ locals {
373385
}
374386

375387
data "ibm_database_connection" "database_connection" {
376-
endpoint_type = var.endpoints == "public-and-private" ? "public" : var.endpoints
388+
endpoint_type = var.service_endpoints == "public-and-private" ? "public" : var.service_endpoints
377389
deployment_id = ibm_database.rabbitmq_database.id
378390
user_id = ibm_database.rabbitmq_database.adminuser
379391
user_type = "database"

0 commit comments

Comments
 (0)