Skip to content

Commit c99808d

Browse files
authored
fix: update bucket IAM member keys for consistency in generated lists (#34)
* fix: update bucket IAM member keys for consistency in generated lists
1 parent d9cbd19 commit c99808d

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres
77
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

9+
# [0.12.0] - 2026-01-22
10+
11+
[Compare with previous version](https://github.com/sparkfabrik/terraform-google-gcp-application-bucket-creation-helper/compare/0.11.0...0.12.0)
12+
13+
### Fixed
14+
15+
- Fixed `bucket_obj_adm` and `bucket_obj_vwr` variables causing "Invalid for_each argument" error when used with `append_random_suffix = true`. The `for_each` key for IAM member resources now uses the static input bucket name instead of the dynamically generated name (with random suffix).
16+
17+
### Changed
18+
19+
- **BREAKING CHANGE for existing users of `bucket_obj_adm`/`bucket_obj_vwr`**: The `for_each` key for `google_storage_bucket_iam_member.default_storage_admin` and `google_storage_bucket_iam_member.default_storage_viewer` resources has changed from `<generated_bucket_name>--<member>` to `<input_bucket_name>--<member>`.
20+
21+
**Example**: If your bucket input name is `myapp` and it gets a random suffix `a1b2`, the key changes from `myapp-a1b2--group:admins@example.com` to `myapp--group:admins@example.com`.
22+
23+
**Impact**: Terraform will plan to destroy and recreate the IAM bindings. This is safe - the IAM permissions will be briefly removed and immediately recreated. No data loss occurs.
24+
25+
**Migration**: No action required. Run `terraform apply` to recreate the IAM bindings with the new keys. If you want to avoid the brief permission gap, you can use `terraform state mv` to rename the resources before applying.
26+
927
# [0.11.0] - 2025-12-10
1028

1129
[Compare with previous version](https://github.com/sparkfabrik/terraform-google-gcp-application-bucket-creation-helper/compare/0.10.0...0.11.0)

main.tf

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@ locals {
99
bucket.append_random_suffix ? "${bucket.name}-${random_id.resources_suffix[bucket.name].hex}" : bucket.name
1010
}
1111

12-
generated_bucket_obj_admin_list = distinct(flatten([
12+
generated_bucket_obj_admin_list = flatten([
1313
for bucket in var.buckets_list : [
1414
for bucket_obj_adm in bucket.bucket_obj_adm : {
15-
bucket_name = local.generated_bucket_names[bucket.name]
16-
bucket_obj_adm = bucket_obj_adm
15+
bucket_name = bucket.name
16+
bucket_obj_admin = bucket_obj_adm
1717
}
1818
]
19-
]))
19+
])
2020

21-
generated_bucket_obj_vwr_list = distinct(flatten([
21+
generated_bucket_obj_vwr_list = flatten([
2222
for bucket in var.buckets_list : [
2323
for bucket_obj_vwr in bucket.bucket_obj_vwr : {
24-
bucket_name = local.generated_bucket_names[bucket.name]
24+
bucket_name = bucket.name
2525
bucket_obj_vwr = bucket_obj_vwr
2626
}
2727
]
28-
]))
28+
])
2929

3030
}
3131

@@ -194,15 +194,15 @@ resource "google_storage_bucket_iam_member" "viewer" {
194194
# Default Storage Admin Role
195195
resource "google_storage_bucket_iam_member" "default_storage_admin" {
196196
for_each = { for bucket in local.generated_bucket_obj_admin_list : "${bucket.bucket_name}--${bucket.bucket_obj_admin}" => bucket }
197-
bucket = google_storage_bucket.application[each.value.name].name
197+
bucket = google_storage_bucket.application[each.value.bucket_name].name
198198
role = "roles/storage.objectAdmin"
199199
member = each.value.bucket_obj_admin
200200
}
201201

202202
# Default Storage Viewer Role
203203
resource "google_storage_bucket_iam_member" "default_storage_viewer" {
204204
for_each = { for bucket in local.generated_bucket_obj_vwr_list : "${bucket.bucket_name}--${bucket.bucket_obj_vwr}" => bucket }
205-
bucket = google_storage_bucket.application[each.value.name].name
205+
bucket = google_storage_bucket.application[each.value.bucket_name].name
206206
role = "roles/storage.objectViewer"
207207
member = each.value.bucket_obj_vwr
208208
}

0 commit comments

Comments
 (0)