Skip to content

Commit 900f563

Browse files
feat: improved user experience for validating input variable values <br>* updated required terraform to be >= 1.9.0 (#354)
1 parent 9719a87 commit 900f563

File tree

13 files changed

+90
-39
lines changed

13 files changed

+90
-39
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ You need the following permissions to run this module.
5656

5757
| Name | Version |
5858
|------|---------|
59-
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.0 |
59+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.9.0 |
6060
| <a name="requirement_ibm"></a> [ibm](#requirement\_ibm) | >= 1.70.0, <2.0.0 |
6161
| <a name="requirement_time"></a> [time](#requirement\_time) | >= 0.9.1 |
6262

examples/backup-restore/version.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.3.0"
2+
required_version = ">= 1.9.0"
33
required_providers {
44
# Pin to the lowest provider version of the range defined in the main module's version.tf to ensure lowest version still works
55
ibm = {

examples/basic/version.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.3.0"
2+
required_version = ">= 1.9.0"
33
required_providers {
44
# Pin to the lowest provider version of the range defined in the main module's version.tf to ensure lowest version still works
55
ibm = {

examples/complete/version.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.3.0"
2+
required_version = ">= 1.9.0"
33
required_providers {
44
# Pin to the lowest provider version of the range defined in the main module's version.tf to ensure lowest version still works
55
ibm = {

examples/fscloud/version.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.3.0"
2+
required_version = ">= 1.9.0"
33
required_providers {
44
# Use latest version of provider in non-basic examples to verify latest version works with module
55
ibm = {

main.tf

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,6 @@
55
# TODO: Replace with terraform cross variable validation: https://github.ibm.com/GoldenEye/issues/issues/10836
66
########################################################################################################################
77

8-
locals {
9-
# Validation (approach based on https://github.com/hashicorp/terraform/issues/25609#issuecomment-1057614400)
10-
# tflint-ignore: terraform_unused_declarations
11-
validate_kms_values = var.use_ibm_owned_encryption_key && (var.kms_key_crn != null || var.backup_encryption_key_crn != null) ? tobool("When passing values for 'kms_key_crn' or 'backup_encryption_key_crn', you must set 'use_ibm_owned_encryption_key' to false. Otherwise unset them to use default encryption.") : true
12-
# tflint-ignore: terraform_unused_declarations
13-
validate_kms_vars = !var.use_ibm_owned_encryption_key && var.kms_key_crn == null ? tobool("When setting 'use_ibm_owned_encryption_key' to false, a value must be passed for 'kms_key_crn'.") : true
14-
# tflint-ignore: terraform_unused_declarations
15-
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
16-
# tflint-ignore: terraform_unused_declarations
17-
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-
}
19-
208
########################################################################################################################
219
# Locals
2210
########################################################################################################################

modules/fscloud/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ The IBM Cloud Framework for Financial Services mandates the application of an in
1313

1414
| Name | Version |
1515
|------|---------|
16-
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.0 |
16+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.9.0 |
1717
| <a name="requirement_ibm"></a> [ibm](#requirement\_ibm) | >=1.70.0, <2.0.0 |
1818

1919
### Modules

modules/fscloud/version.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
terraform {
2-
required_version = ">= 1.3.0"
2+
required_version = ">= 1.9.0"
33
required_providers {
44
# The below tflint-ignore is required because although the below provider is not directly required by this submodule,
55
# it is required by consuming modules, and if not set here, the top level module calling this module will not be

solutions/standard/main.tf

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,6 @@ module "resource_group" {
1616
# TODO: Replace with terraform cross variable validation: https://github.ibm.com/GoldenEye/issues/issues/10836
1717
#######################################################################################################################
1818

19-
locals {
20-
# tflint-ignore: terraform_unused_declarations
21-
validate_kms_1 = var.existing_rabbitmq_instance_crn != null ? true : var.use_ibm_owned_encryption_key && (var.existing_kms_instance_crn != null || var.existing_kms_key_crn != null || var.existing_backup_kms_key_crn != null) ? tobool("When setting values for 'existing_kms_instance_crn', 'existing_kms_key_crn' or 'existing_backup_kms_key_crn', the 'use_ibm_owned_encryption_key' input must be set to false.") : true
22-
# tflint-ignore: terraform_unused_declarations
23-
validate_kms_2 = var.existing_rabbitmq_instance_crn != null ? true : !var.use_ibm_owned_encryption_key && (var.existing_kms_instance_crn == null && var.existing_kms_key_crn == null) ? tobool("When 'use_ibm_owned_encryption_key' is false, a value is required for either 'existing_kms_instance_crn' (to create a new key), or 'existing_kms_key_crn' to use an existing key.") : true
24-
}
25-
2619
#######################################################################################################################
2720
# KMS encryption key
2821
#######################################################################################################################
@@ -253,10 +246,6 @@ module "rabbitmq_instance_crn_parser" {
253246
locals {
254247
existing_rabbitmq_guid = var.existing_rabbitmq_instance_crn != null ? module.rabbitmq_instance_crn_parser[0].service_instance : null
255248
existing_rabbitmq_region = var.existing_rabbitmq_instance_crn != null ? module.rabbitmq_instance_crn_parser[0].region : null
256-
257-
# Validate the region input matches region detected in existing instance CRN (approach based on https://github.com/hashicorp/terraform/issues/25609#issuecomment-1057614400)
258-
# tflint-ignore: terraform_unused_declarations
259-
validate_existing_instance_region = var.existing_rabbitmq_instance_crn != null && var.region != local.existing_rabbitmq_region ? tobool("The region detected in the 'existing_rabbitmq_instance_crn' value must match the value of the 'region' input variable when passing an existing instance.") : true
260249
}
261250

262251
# Do a data lookup on the resource GUID to get more info that is needed for the 'ibm_database' data lookup below
@@ -328,13 +317,6 @@ locals {
328317

329318
locals {
330319
## Variable validation (approach based on https://github.com/hashicorp/terraform/issues/25609#issuecomment-1057614400)
331-
# tflint-ignore: terraform_unused_declarations
332-
validate_sm_crn = length(local.service_credential_secrets) > 0 && var.existing_secrets_manager_instance_crn == null ? tobool("`existing_secrets_manager_instance_crn` is required when adding service credentials to a secrets manager secret.") : false
333-
# tflint-ignore: terraform_unused_declarations
334-
validate_sm_sg = var.existing_secrets_manager_instance_crn != null && var.admin_pass_secrets_manager_secret_group == null ? tobool("`admin_pass_secrets_manager_secret_group` is required when `existing_secrets_manager_instance_crn` is set.") : false
335-
# tflint-ignore: terraform_unused_declarations
336-
validate_sm_sn = var.existing_secrets_manager_instance_crn != null && var.admin_pass_secrets_manager_secret_name == null ? tobool("`admin_pass_secrets_manager_secret_name` is required when `existing_secrets_manager_instance_crn` is set.") : false
337-
338320
create_sm_auth_policy = var.skip_rabbitmq_sm_auth_policy || var.existing_secrets_manager_instance_crn == null ? 0 : 1
339321
}
340322

solutions/standard/variables.tf

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ variable "region" {
3434
description = "The region where you want to deploy your instance."
3535
type = string
3636
default = "us-south"
37+
38+
validation {
39+
condition = var.existing_rabbitmq_instance_crn != null && var.region != local.existing_rabbitmq_region ? false : true
40+
error_message = "The region detected in the 'existing_rabbitmq_instance_crn' value must match the value of the 'region' input variable when passing an existing instance."
41+
}
3742
}
3843

3944
variable "rabbitmq_version" {
@@ -127,6 +132,30 @@ variable "use_ibm_owned_encryption_key" {
127132
type = bool
128133
description = "IBM Cloud Databases will secure your deployment's data at rest automatically with an encryption key that IBM hold. Alternatively, you may select your own Key Management System instance and encryption key (Key Protect or Hyper Protect Crypto Services) by setting this to false. If setting to false, a value must be passed for `existing_kms_instance_crn` to create a new key, or `existing_kms_key_crn` and/or `existing_backup_kms_key_crn` to use an existing key."
129134
default = false
135+
136+
# this validation ensures IBM-owned key is not used when KMS details are provided
137+
validation {
138+
condition = (
139+
var.existing_rabbitmq_instance_crn != null ||
140+
!(var.use_ibm_owned_encryption_key && (
141+
var.existing_kms_instance_crn != null ||
142+
var.existing_kms_key_crn != null ||
143+
var.existing_backup_kms_key_crn != null
144+
))
145+
)
146+
error_message = "When setting values for 'existing_kms_instance_crn', 'existing_kms_key_crn' or 'existing_backup_kms_key_crn', the 'use_ibm_owned_encryption_key' input must be set to false."
147+
}
148+
149+
# this validation ensures key info is provided when IBM-owned key is disabled and no RabbitMQ instance is given
150+
validation {
151+
condition = !(
152+
var.existing_rabbitmq_instance_crn == null &&
153+
var.use_ibm_owned_encryption_key == false &&
154+
var.existing_kms_instance_crn == null &&
155+
var.existing_kms_key_crn == null
156+
)
157+
error_message = "When 'use_ibm_owned_encryption_key' is false, you must provide either 'existing_kms_instance_crn' (to create a new key) or 'existing_kms_key_crn' (to use an existing key)."
158+
}
130159
}
131160

132161
variable "existing_kms_instance_crn" {
@@ -293,6 +322,14 @@ variable "service_credential_secrets" {
293322
])
294323
error_message = "service_credentials_source_service_role_crn must be a serviceRole CRN. See https://cloud.ibm.com/iam/roles"
295324
}
325+
326+
validation {
327+
condition = (
328+
length(var.service_credential_secrets) == 0 ||
329+
var.existing_secrets_manager_instance_crn != null
330+
)
331+
error_message = "`existing_secrets_manager_instance_crn` is required when adding service credentials to a secrets manager secret."
332+
}
296333
}
297334

298335
variable "skip_rabbitmq_sm_auth_policy" {
@@ -305,6 +342,14 @@ variable "admin_pass_secrets_manager_secret_group" {
305342
type = string
306343
description = "The name of a new or existing secrets manager secret group for admin password. To use existing secret group, `use_existing_admin_pass_secrets_manager_secret_group` must be set to `true`. If a prefix input variable is specified, the prefix is added to the name in the `<prefix>-<name>` format."
307344
default = "rabbitmq-secrets"
345+
346+
validation {
347+
condition = (
348+
var.existing_secrets_manager_instance_crn == null ||
349+
var.admin_pass_secrets_manager_secret_group != null
350+
)
351+
error_message = "`admin_pass_secrets_manager_secret_group` is required when `existing_secrets_manager_instance_crn` is set."
352+
}
308353
}
309354

310355
variable "use_existing_admin_pass_secrets_manager_secret_group" {
@@ -317,6 +362,14 @@ variable "admin_pass_secrets_manager_secret_name" {
317362
type = string
318363
description = "The name of a new rabbitmq administrator secret. If a prefix input variable is specified, the prefix is added to the name in the `<prefix>-<name>` format."
319364
default = "rabbitmq-admin-password"
365+
366+
validation {
367+
condition = (
368+
var.existing_secrets_manager_instance_crn == null ||
369+
var.admin_pass_secrets_manager_secret_name != null
370+
)
371+
error_message = "`admin_pass_secrets_manager_secret_name` is required when `existing_secrets_manager_instance_crn` is set."
372+
}
320373
}
321374

322375
##############################################################

0 commit comments

Comments
 (0)