Skip to content

Commit b0a44df

Browse files
authored
Merge branch 'main' into jor2-patch-1
2 parents 2a68be6 + a97fafb commit b0a44df

File tree

9 files changed

+65
-47
lines changed

9 files changed

+65
-47
lines changed

ibm_catalog.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,9 @@
287287
},
288288
{
289289
"key": "backup_crn"
290+
},
291+
{
292+
"key": "remote_leader_crn"
290293
}
291294
]
292295
}

main.tf

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,35 @@ locals {
3333
# Parse info from KMS key CRNs
3434
########################################################################################################################
3535

36+
locals {
37+
parse_kms_key = !var.use_ibm_owned_encryption_key
38+
parse_backup_kms_key = !var.use_ibm_owned_encryption_key && !var.use_default_backup_encryption_key
39+
}
40+
3641
module "kms_key_crn_parser" {
37-
count = var.use_ibm_owned_encryption_key ? 0 : 1
42+
count = local.parse_kms_key ? 1 : 0
3843
source = "terraform-ibm-modules/common-utilities/ibm//modules/crn-parser"
3944
version = "1.1.0"
4045
crn = var.kms_key_crn
4146
}
4247

4348
module "backup_key_crn_parser" {
44-
count = var.use_ibm_owned_encryption_key ? 0 : 1
49+
count = local.parse_backup_kms_key ? 1 : 0
4550
source = "terraform-ibm-modules/common-utilities/ibm//modules/crn-parser"
4651
version = "1.1.0"
4752
crn = local.backup_encryption_key_crn
4853
}
4954

5055
# Put parsed values into locals
5156
locals {
52-
kms_service = !var.use_ibm_owned_encryption_key ? module.kms_key_crn_parser[0].service_name : null
53-
kms_account_id = !var.use_ibm_owned_encryption_key ? module.kms_key_crn_parser[0].account_id : null
54-
kms_key_id = !var.use_ibm_owned_encryption_key ? module.kms_key_crn_parser[0].resource : null
55-
kms_key_instance_guid = !var.use_ibm_owned_encryption_key ? module.kms_key_crn_parser[0].service_instance : null
56-
backup_kms_service = !var.use_ibm_owned_encryption_key ? module.backup_key_crn_parser[0].service_name : null
57-
backup_kms_account_id = !var.use_ibm_owned_encryption_key ? module.backup_key_crn_parser[0].account_id : null
58-
backup_kms_key_id = !var.use_ibm_owned_encryption_key ? module.backup_key_crn_parser[0].resource : null
59-
backup_kms_key_instance_guid = !var.use_ibm_owned_encryption_key ? module.backup_key_crn_parser[0].service_instance : null
57+
kms_service = local.parse_kms_key ? module.kms_key_crn_parser[0].service_name : null
58+
kms_account_id = local.parse_kms_key ? module.kms_key_crn_parser[0].account_id : null
59+
kms_key_id = local.parse_kms_key ? module.kms_key_crn_parser[0].resource : null
60+
kms_key_instance_guid = local.parse_kms_key ? module.kms_key_crn_parser[0].service_instance : null
61+
backup_kms_service = local.parse_backup_kms_key ? module.backup_key_crn_parser[0].service_name : null
62+
backup_kms_account_id = local.parse_backup_kms_key ? module.backup_key_crn_parser[0].account_id : null
63+
backup_kms_key_id = local.parse_backup_kms_key ? module.backup_key_crn_parser[0].resource : null
64+
backup_kms_key_instance_guid = local.parse_backup_kms_key ? module.backup_key_crn_parser[0].service_instance : null
6065
}
6166

6267
########################################################################################################################

modules/fscloud/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ No resources.
4545
| <a name="input_members"></a> [members](#input\_members) | Allocated number of members. Members can be scaled up but not down. | `number` | `3` | no |
4646
| <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 |
4747
| <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 |
48+
| <a name="input_remote_leader_crn"></a> [remote\_leader\_crn](#input\_remote\_leader\_crn) | A CRN of the leader database to make the replica(read-only) deployment. The leader database is created by a database deployment with the same service ID. A read-only replica is set up to replicate all of your data from the leader deployment to the replica deployment by using asynchronous replication. For more information, see https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-read-replicas | `string` | `null` | no |
4849
| <a name="input_resource_group_id"></a> [resource\_group\_id](#input\_resource\_group\_id) | The resource group ID where the MySQL instance will be created. | `string` | n/a | yes |
4950
| <a name="input_resource_tags"></a> [resource\_tags](#input\_resource\_tags) | Optional list of tags to be added to the MySQL instance. | `list(string)` | `[]` | no |
5051
| <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 |

modules/fscloud/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ module "mysql_db" {
2424
users = var.users
2525
service_credential_names = var.service_credential_names
2626
auto_scaling = var.auto_scaling
27+
remote_leader_crn = var.remote_leader_crn
2728
}

modules/fscloud/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ variable "region" {
2424
default = "us-south"
2525
}
2626

27+
variable "remote_leader_crn" {
28+
type = string
29+
description = "A CRN of the leader database to make the replica(read-only) deployment. The leader database is created by a database deployment with the same service ID. A read-only replica is set up to replicate all of your data from the leader deployment to the replica deployment by using asynchronous replication. For more information, see https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-read-replicas"
30+
default = null
31+
}
32+
2733
##############################################################################
2834
# ICD hosting model properties
2935
##############################################################################

solutions/standard/DA-types.md

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ In the configuration, specify the secret group name, whether it already exists o
5656
#### Options for service_credentials
5757

5858
- `secret_name`: (required): A unique human-readable name of the secret to create.
59-
- `service_credentials_source_service_role`: (required): The role to give the service credential in the Databases for MySQL service. Acceptable values are `Writer`, `Reader`, `Manager`, and `None`
59+
- `service_credentials_source_service_role_crn`: (required): The CRN of the role to give the service credential in the IBM Cloud Database service. Service credentials role CRNs can be found at https://cloud.ibm.com/iam/roles, select the IBM Cloud Database and select the role.
6060
- `secret_labels`: (optional, default = `[]`): Labels of the secret to create. Up to 30 labels can be created. Labels can be 2 - 30 characters, including spaces. Special characters that are not permitted include the angled brackets (<>), comma (,), colon (:), ampersand (&), and vertical pipe character (|).
6161
- `secret_auto_rotation`: (optional, default = `true`): Whether to configure automatic rotation of service credential.
6262
- `secret_auto_rotation_unit`: (optional, default = `day`): Specifies the unit of time for rotation of a secret. Acceptable values are `day` or `month`.
@@ -70,11 +70,11 @@ The following example includes all the configuration options for four service cr
7070
{
7171
"secret_group_name": "sg-1"
7272
"existing_secret_group": true
73-
"service_credentials": [ # pragma: allowlist secret
73+
"service_credentials": [ # pragma: allowlist secret
7474
{
7575
"secret_name": "cred-1"
76-
"service_credentials_source_service_role": "Writer"
77-
"secret_labels": ["test-writer-1", "test-writer-2"]
76+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Editor"
77+
"secret_labels": ["test-editor-1", "test-editor-2"]
7878
"secret_auto_rotation": true
7979
"secret_auto_rotation_unit": "day"
8080
"secret_auto_rotation_interval": 89
@@ -83,20 +83,16 @@ The following example includes all the configuration options for four service cr
8383
},
8484
{
8585
"secret_name": "cred-2"
86-
"service_credentials_source_service_role": "Reader"
86+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Viewer"
8787
}
8888
]
8989
},
9090
{
9191
"secret_group_name": "sg-2"
92-
"service_credentials": [ # pragma: allowlist secret
92+
"service_credentials": [ # pragma: allowlist secret
9393
{
9494
"secret_name": "cred-3"
95-
"service_credentials_source_service_role": "Editor"
96-
},
97-
{
98-
"secret_name": "cred-4"
99-
"service_credentials_source_service_role": "None"
95+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Viewer"
10096
}
10197
]
10298
}

solutions/standard/main.tf

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ module "mysql" {
266266
auto_scaling = var.auto_scaling
267267
service_credential_names = var.service_credential_names
268268
backup_crn = var.backup_crn
269+
remote_leader_crn = var.remote_leader_crn
269270
}
270271

271272
locals {
@@ -298,16 +299,16 @@ locals {
298299
existing_secret_group = service_credentials.existing_secret_group
299300
secrets = [
300301
for secret in service_credentials.service_credentials : {
301-
secret_name = secret.secret_name
302-
secret_labels = secret.secret_labels
303-
secret_auto_rotation = secret.secret_auto_rotation
304-
secret_auto_rotation_unit = secret.secret_auto_rotation_unit
305-
secret_auto_rotation_interval = secret.secret_auto_rotation_interval
306-
service_credentials_ttl = secret.service_credentials_ttl
307-
service_credential_secret_description = secret.service_credential_secret_description
308-
service_credentials_source_service_role = secret.service_credentials_source_service_role
309-
service_credentials_source_service_crn = module.mysql.crn
310-
secret_type = "service_credentials" #checkov:skip=CKV_SECRET_6
302+
secret_name = secret.secret_name
303+
secret_labels = secret.secret_labels
304+
secret_auto_rotation = secret.secret_auto_rotation
305+
secret_auto_rotation_unit = secret.secret_auto_rotation_unit
306+
secret_auto_rotation_interval = secret.secret_auto_rotation_interval
307+
service_credentials_ttl = secret.service_credentials_ttl
308+
service_credential_secret_description = secret.service_credential_secret_description
309+
service_credentials_source_service_role_crn = secret.service_credentials_source_service_role_crn
310+
service_credentials_source_service_crn = module.mysql.crn
311+
secret_type = "service_credentials" #checkov:skip=CKV_SECRET_6
311312
}
312313
]
313314
}
@@ -325,7 +326,7 @@ module "secrets_manager_service_credentials" {
325326
count = length(local.service_credential_secrets) > 0 ? 1 : 0
326327
depends_on = [time_sleep.wait_for_mysql_authorization_policy]
327328
source = "terraform-ibm-modules/secrets-manager/ibm//modules/secrets"
328-
version = "1.19.10"
329+
version = "1.22.0"
329330
existing_sm_instance_guid = local.existing_secrets_manager_instance_guid
330331
existing_sm_instance_region = local.existing_secrets_manager_instance_region
331332
endpoint_type = var.existing_secrets_manager_endpoint_type

solutions/standard/variables.tf

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ variable "region" {
3636
default = "us-south"
3737
}
3838

39+
variable "remote_leader_crn" {
40+
type = string
41+
description = "A CRN of the leader database to make the replica(read-only) deployment. The leader database is created by a database deployment with the same service ID. A read-only replica is set up to replicate all of your data from the leader deployment to the replica deployment by using asynchronous replication. [Learn more](https://cloud.ibm.com/docs/databases-for-mysql?topic=databases-for-mysql-read-replicas)"
42+
default = null
43+
}
44+
3945
variable "mysql_version" {
4046
description = "The version of the Databases for MySQL instance. If no value is specified, the current preferred version of Databases for MySQL is used."
4147
type = string
@@ -263,30 +269,29 @@ variable "service_credential_secrets" {
263269
secret_group_description = optional(string)
264270
existing_secret_group = optional(bool)
265271
service_credentials = list(object({
266-
secret_name = string
267-
service_credentials_source_service_role = string
268-
secret_labels = optional(list(string))
269-
secret_auto_rotation = optional(bool)
270-
secret_auto_rotation_unit = optional(string)
271-
secret_auto_rotation_interval = optional(number)
272-
service_credentials_ttl = optional(string)
273-
service_credential_secret_description = optional(string)
272+
secret_name = string
273+
service_credentials_source_service_role_crn = string
274+
secret_labels = optional(list(string))
275+
secret_auto_rotation = optional(bool)
276+
secret_auto_rotation_unit = optional(string)
277+
secret_auto_rotation_interval = optional(number)
278+
service_credentials_ttl = optional(string)
279+
service_credential_secret_description = optional(string)
274280

275281
}))
276282
}))
277283
default = []
278284
description = "Service credential secrets configuration for Databases for MySQL. [Learn more](https://github.com/terraform-ibm-modules/terraform-ibm-icd-mysql/tree/main/solutions/standard/DA-types.md#service-credential-secrets)."
279285

280286
validation {
287+
# Service roles CRNs can be found at https://cloud.ibm.com/iam/roles, select the IBM Cloud Database and select the role
281288
condition = alltrue([
282289
for group in var.service_credential_secrets : alltrue([
283-
for credential in group.service_credentials : contains(
284-
["Writer", "Reader", "Manager", "None"], credential.service_credentials_source_service_role
285-
)
290+
# crn:v?:bluemix; two non-empty segments; three possibly empty segments; :serviceRole or role: non-empty segment
291+
for credential in group.service_credentials : can(regex("^crn:v[0-9]:bluemix(:..*){2}(:.*){3}:(serviceRole|role):..*$", credential.service_credentials_source_service_role_crn))
286292
])
287293
])
288-
error_message = "service_credentials_source_service_role role must be one of 'Writer', 'Reader', 'Manager', and 'None'."
289-
294+
error_message = "service_credentials_source_service_role_crn must be a serviceRole CRN. See https://cloud.ibm.com/iam/roles"
290295
}
291296
}
292297

tests/pr_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ func TestRunStandardSolutionSchematics(t *testing.T) {
134134
"service_credentials": []map[string]string{
135135
{
136136
"secret_name": fmt.Sprintf("%s-cred-reader", options.Prefix),
137-
"service_credentials_source_service_role": "Reader",
137+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Viewer",
138138
},
139139
{
140140
"secret_name": fmt.Sprintf("%s-cred-writer", options.Prefix),
141-
"service_credentials_source_service_role": "Writer",
141+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Editor",
142142
},
143143
},
144144
},

0 commit comments

Comments
 (0)