Skip to content

Commit 918c8d5

Browse files
authored
fix: fix issue that was causing secrets manager managed service credential re-creation<br><br>NOTE: When upgrading from previous version, you will see the following destroy and re-create, however there is no impact to any deployed infrastructure: (#539)
1 parent 8588196 commit 918c8d5

File tree

3 files changed

+47
-9
lines changed

3 files changed

+47
-9
lines changed

.secrets.baseline

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"files": "go.sum|^.secrets.baseline$",
44
"lines": null
55
},
6-
"generated_at": "2025-10-04T04:24:13Z",
6+
"generated_at": "2025-10-11T11:57:05Z",
77
"plugins_used": [
88
{
99
"name": "AWSKeyDetector"
@@ -110,7 +110,7 @@
110110
"hashed_secret": "8c7c51db5075ebd0369c51e9f14737d9b4c1c21d",
111111
"is_secret": false,
112112
"is_verified": false,
113-
"line_number": 379,
113+
"line_number": 413,
114114
"type": "Base64 High Entropy String",
115115
"verified_result": null
116116
}

solutions/fully-configurable/main.tf

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,10 @@ resource "time_sleep" "wait_for_elasticsearch_authorization_policy" {
367367
count = local.create_secrets_manager_auth_policy
368368
depends_on = [ibm_iam_authorization_policy.secrets_manager_key_manager]
369369
create_duration = "30s"
370+
triggers = {
371+
secrets_manager_region = local.existing_secrets_manager_instance_region
372+
secrets_manager_guid = local.existing_secrets_manager_instance_guid
373+
}
370374
}
371375

372376
locals {
@@ -412,12 +416,12 @@ locals {
412416
}
413417

414418
module "secrets_manager_service_credentials" {
415-
count = length(local.service_credential_secrets) > 0 ? 1 : 0
416-
depends_on = [time_sleep.wait_for_elasticsearch_authorization_policy]
417-
source = "terraform-ibm-modules/secrets-manager/ibm//modules/secrets"
418-
version = "2.10.2"
419-
existing_sm_instance_guid = local.existing_secrets_manager_instance_guid
420-
existing_sm_instance_region = local.existing_secrets_manager_instance_region
419+
count = length(local.service_credential_secrets) > 0 ? 1 : 0
420+
source = "terraform-ibm-modules/secrets-manager/ibm//modules/secrets"
421+
version = "2.10.2"
422+
# converted into implicit dependency and removed explicit depends_on time_sleep.wait_for_elasticsearch_authorization_policy for this module because of issue https://github.com/terraform-ibm-modules/terraform-ibm-icd-redis/issues/608
423+
existing_sm_instance_guid = local.create_secrets_manager_auth_policy > 0 ? time_sleep.wait_for_elasticsearch_authorization_policy[0].triggers["secrets_manager_guid"] : local.existing_secrets_manager_instance_guid
424+
existing_sm_instance_region = local.create_secrets_manager_auth_policy > 0 ? time_sleep.wait_for_elasticsearch_authorization_policy[0].triggers["secrets_manager_region"] : local.existing_secrets_manager_instance_region
421425
endpoint_type = var.existing_secrets_manager_endpoint_type
422426
secrets = local.secrets
423427
}

tests/pr_test.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package test
44
import (
55
"crypto/rand"
66
"encoding/base64"
7+
"encoding/json"
78
"fmt"
89
"log"
910
"math/big"
@@ -146,15 +147,48 @@ func TestRunSecurityEnforcedUpgradeSolutionSchematics(t *testing.T) {
146147
CheckApplyResultForUpgrade: true,
147148
})
148149

150+
serviceCredentialSecrets := []map[string]any{
151+
{
152+
"secret_group_name": fmt.Sprintf("%s-secret-group", options.Prefix),
153+
"service_credentials": []map[string]string{
154+
{
155+
"secret_name": fmt.Sprintf("%s-cred-reader", options.Prefix),
156+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Viewer",
157+
},
158+
{
159+
"secret_name": fmt.Sprintf("%s-cred-writer", options.Prefix),
160+
"service_credentials_source_service_role_crn": "crn:v1:bluemix:public:iam::::role:Editor",
161+
},
162+
},
163+
},
164+
}
165+
166+
serviceCredentialNames := map[string]string{
167+
"admin": "Administrator",
168+
"user1": "Viewer",
169+
"user2": "Editor",
170+
}
171+
172+
serviceCredentialNamesJSON, err := json.Marshal(serviceCredentialNames)
173+
if err != nil {
174+
log.Fatalf("Error converting to JSON: %s", err)
175+
}
176+
149177
options.TerraformVars = []testschematic.TestSchematicTerraformVar{
150178
{Name: "ibmcloud_api_key", Value: options.RequiredEnvironmentVars["TF_VAR_ibmcloud_api_key"], DataType: "string", Secure: true},
151179
{Name: "prefix", Value: options.Prefix, DataType: "string"},
152180
{Name: "deletion_protection", Value: false, DataType: "bool"},
153181
{Name: "existing_resource_group_name", Value: resourceGroup, DataType: "string"},
154182
{Name: "existing_kms_instance_crn", Value: permanentResources["hpcs_south_crn"], DataType: "string"},
183+
{Name: "existing_secrets_manager_instance_crn", Value: permanentResources["secretsManagerCRN"], DataType: "string"},
184+
{Name: "service_credential_secrets", Value: serviceCredentialSecrets, DataType: "list(object)"},
185+
{Name: "service_credential_names", Value: string(serviceCredentialNamesJSON), DataType: "map(string)"},
186+
{Name: "admin_pass_secrets_manager_secret_name", Value: options.Prefix, DataType: "string"},
187+
{Name: "admin_pass", Value: GetRandomAdminPassword(t), DataType: "string"},
188+
{Name: "admin_pass_secrets_manager_secret_group", Value: fmt.Sprintf("es-%s-admin-secrets", options.Prefix), DataType: "string"},
155189
}
156190

157-
err := options.RunSchematicUpgradeTest()
191+
err = options.RunSchematicUpgradeTest()
158192
assert.Nil(t, err, "This should not have errored")
159193
}
160194

0 commit comments

Comments
 (0)