Skip to content

Commit 03e86e3

Browse files
authored
feat: split resources into separate resource to allow out-of-module additions (#61)
1 parent 54ee979 commit 03e86e3

File tree

8 files changed

+44
-14
lines changed

8 files changed

+44
-14
lines changed

modules/access_level/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ terraform {
2020

2121
google = {
2222
source = "hashicorp/google"
23-
version = "~> 3.53"
23+
version = ">= 3.50, < 5.0"
2424
}
2525
}
2626

modules/bridge_service_perimeter/main.tf

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,14 @@ resource "google_access_context_manager_service_perimeter" "bridge_service_perim
2121
name = "accessPolicies/${var.policy}/servicePerimeters/${var.perimeter_name}"
2222
title = var.perimeter_name
2323

24-
status {
25-
resources = formatlist("projects/%s", var.resources)
24+
lifecycle {
25+
ignore_changes = [status[0].resources]
2626
}
2727
}
28+
29+
30+
resource "google_access_context_manager_service_perimeter_resource" "service_perimeter_resource" {
31+
for_each = toset(formatlist("projects/%s", var.resources))
32+
perimeter_name = google_access_context_manager_service_perimeter.bridge_service_perimeter.name
33+
resource = each.key
34+
}

modules/bridge_service_perimeter/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@
1717
output "resources" {
1818
description = "A list of GCP resources that are inside of the service perimeter. Currently only projects are allowed."
1919
value = var.resources
20+
depends_on = [
21+
google_access_context_manager_service_perimeter.bridge_service_perimeter,
22+
google_access_context_manager_service_perimeter_resource.service_perimeter_resource
23+
]
2024
}

modules/bridge_service_perimeter/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ terraform {
2020

2121
google = {
2222
source = "hashicorp/google"
23-
version = "~> 3.53"
23+
version = ">= 3.50, < 5.0"
2424
}
2525
}
2626

modules/regular_service_perimeter/main.tf

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ resource "google_access_context_manager_service_perimeter" "regular_service_peri
2828

2929
status {
3030
restricted_services = var.restricted_services
31-
resources = formatlist("projects/%s", var.resources)
3231
access_levels = formatlist(
3332
"accessPolicies/${var.policy}/accessLevels/%s",
3433
var.access_levels
@@ -58,9 +57,9 @@ resource "google_access_context_manager_service_perimeter" "regular_service_peri
5857
content {
5958
service_name = operations.key
6059
dynamic "method_selectors" {
61-
for_each = merge(
60+
for_each = operations.key != "*" ? merge(
6261
{ for k, v in lookup(operations.value, "methods", {}) : v => "method" },
63-
{ for k, v in lookup(operations.value, "permissions", {}) : v => "permission" })
62+
{ for k, v in lookup(operations.value, "permissions", {}) : v => "permission" }) : {}
6463
content {
6564
method = method_selectors.value == "method" ? method_selectors.key : null
6665
permission = method_selectors.value == "permission" ? method_selectors.key : ""
@@ -85,9 +84,9 @@ resource "google_access_context_manager_service_perimeter" "regular_service_peri
8584
content {
8685
service_name = operations.key
8786
dynamic "method_selectors" {
88-
for_each = merge(
87+
for_each = operations.key != "*" ? merge(
8988
{ for k, v in lookup(operations.value, "methods", {}) : v => "method" },
90-
{ for k, v in lookup(operations.value, "permissions", {}) : v => "permission" })
89+
{ for k, v in lookup(operations.value, "permissions", {}) : v => "permission" }) : {}
9190
content {
9291
method = method_selectors.value == "method" ? method_selectors.key : ""
9392
permission = method_selectors.value == "permission" ? method_selectors.key : ""
@@ -178,4 +177,15 @@ resource "google_access_context_manager_service_perimeter" "regular_service_peri
178177
}
179178
}
180179
use_explicit_dry_run_spec = local.dry_run
180+
181+
lifecycle {
182+
ignore_changes = [status[0].resources]
183+
}
184+
}
185+
186+
187+
resource "google_access_context_manager_service_perimeter_resource" "service_perimeter_resource" {
188+
for_each = toset(formatlist("projects/%s", var.resources))
189+
perimeter_name = google_access_context_manager_service_perimeter.regular_service_perimeter.name
190+
resource = each.key
181191
}

modules/regular_service_perimeter/outputs.tf

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,26 @@
1717
output "shared_resources" {
1818
description = "A map of lists of resources to share in a Bridge perimeter module. Each list should contain all or a subset of the perimeters resources"
1919
value = var.shared_resources
20-
depends_on = [google_access_context_manager_service_perimeter.regular_service_perimeter]
20+
depends_on = [
21+
google_access_context_manager_service_perimeter.regular_service_perimeter,
22+
google_access_context_manager_service_perimeter_resource.service_perimeter_resource
23+
]
2124
}
2225

2326
output "resources" {
2427
description = "A list of GCP resources that are inside of the service perimeter. Currently only projects are allowed."
2528
value = var.resources
26-
depends_on = [google_access_context_manager_service_perimeter.regular_service_perimeter]
29+
depends_on = [
30+
google_access_context_manager_service_perimeter.regular_service_perimeter,
31+
google_access_context_manager_service_perimeter_resource.service_perimeter_resource
32+
]
2733
}
2834

2935
output "perimeter_name" {
3036
description = "The perimeter's name."
3137
value = var.perimeter_name
32-
depends_on = [google_access_context_manager_service_perimeter.regular_service_perimeter]
38+
depends_on = [
39+
google_access_context_manager_service_perimeter.regular_service_perimeter,
40+
google_access_context_manager_service_perimeter_resource.service_perimeter_resource
41+
]
3342
}

modules/regular_service_perimeter/versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ terraform {
2020

2121
google = {
2222
source = "hashicorp/google"
23-
version = "~> 3.82"
23+
version = ">= 3.50, < 5.0"
2424
}
2525
}
2626

versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ terraform {
2020

2121
google = {
2222
source = "hashicorp/google"
23-
version = "~> 3.82"
23+
version = ">= 3.50, < 5.0"
2424
}
2525
}
2626

0 commit comments

Comments
 (0)