Skip to content

Commit 4db2cb7

Browse files
authored
Merge pull request #2319 from minrk/terraform-up
Terraform updates
2 parents c1bb339 + 7a84e20 commit 4db2cb7

File tree

6 files changed

+54
-28
lines changed

6 files changed

+54
-28
lines changed

terraform/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Then, to deploy e.g. staging:
1919

2020
```bash
2121
cd staging
22+
terraform init
2223
terraform apply
2324
```
2425

terraform/modules/mybinder/resource.tf

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,14 @@ resource "google_service_account" "sa" {
121121
}
122122

123123
resource "google_project_iam_member" "iam" {
124+
project = data.google_client_config.provider.project
124125
for_each = local.service_accounts
125126
role = each.value.role
126127
member = "serviceAccount:${google_service_account.sa[each.key].email}"
127128
}
128129

129130
resource "google_project_iam_member" "deploy-pusher" {
131+
project = data.google_client_config.provider.project
130132
# deployer also gets storage admin
131133
role = "roles/storage.admin"
132134
member = "serviceAccount:${google_service_account.sa["deployer"].email}"
@@ -169,6 +171,8 @@ resource "google_storage_bucket" "raw-export" {
169171
}
170172

171173
resource "google_logging_project_sink" "events-archive" {
174+
project = data.google_client_config.provider.project
175+
172176
name = "binderhub-${var.name}-events-raw-text"
173177
filter = "resource.type=\"global\" AND logName=\"projects/${data.google_client_config.provider.project}/logs/${local.events_log_prefix}-events-text\""
174178
destination = "storage.googleapis.com/${google_storage_bucket.raw-export.name}"
@@ -183,3 +187,32 @@ resource "google_storage_bucket_iam_binding" "event-log-sink" {
183187
google_logging_project_sink.events-archive.writer_identity
184188
]
185189
}
190+
191+
# events-archiver
192+
# create service accounts and keys for logging events to stackdriver
193+
resource "google_service_account" "events" {
194+
for_each = toset(var.federation_members)
195+
account_id = "${each.key}-events-archiver"
196+
display_name = "${each.key} Events Archiver"
197+
}
198+
199+
resource "google_project_iam_member" "events" {
200+
project = data.google_client_config.provider.project
201+
for_each = toset(var.federation_members)
202+
role = "roles/logging.logWriter"
203+
member = "serviceAccount:${google_service_account.events[each.key].email}"
204+
}
205+
206+
# create keys for each service account
207+
resource "google_service_account_key" "events" {
208+
for_each = toset(var.federation_members)
209+
service_account_id = google_service_account.events[each.key].account_id
210+
}
211+
212+
output "events_archiver_keys" {
213+
value = {
214+
for name in var.federation_members :
215+
name => base64decode(google_service_account_key.events[name].private_key)
216+
}
217+
sensitive = true
218+
}

terraform/modules/mybinder/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,9 @@ variable "sql_tier" {
2323
description = "SQL instance tier"
2424
default = "db-f1-micro"
2525
}
26+
27+
variable "federation_members" {
28+
type = list(any)
29+
description = "List of federation members by name"
30+
default = []
31+
}

terraform/modules/mybinder/versions.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ terraform {
22
required_providers {
33
google = {
44
source = "hashicorp/google"
5-
version = "~> 3.44"
5+
version = "~> 4.31"
66
}
77
random = {
88
source = "hashicorp/random"
9-
version = "~> 3.0.0"
9+
version = "~> 3.3.2"
1010
}
1111
}
1212
required_version = "~> 1.1"

terraform/prod/main.tf

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ provider "google" {
1414
locals {
1515
gke_version = "1.19.14-gke.1900"
1616
location = "us-central1" # for regional clusters
17-
federation_members = ["gke-old", "gesis", "turing", "ovh"]
17+
federation_members = ["gesis", "turing", "ovh"]
1818
}
1919

2020
module "mybinder" {
@@ -25,6 +25,8 @@ module "mybinder" {
2525
gke_location = local.location # regional cluster for better upgrades
2626

2727
sql_tier = "db-n1-standard-1"
28+
29+
federation_members = ["gesis", "turing", "ovh"]
2830
}
2931

3032
# define node pools here, too hard to encode with variables
@@ -135,24 +137,6 @@ resource "google_storage_bucket" "billing" {
135137
uniform_bucket_level_access = true
136138
}
137139

138-
# create service accounts and keys for logging events to stackdriver
139-
resource "google_service_account" "events" {
140-
for_each = toset(local.federation_members)
141-
account_id = "${each.key}-events-archiver"
142-
display_name = "${each.key} Events Archiver"
143-
}
144-
145-
resource "google_project_iam_member" "events" {
146-
for_each = toset(local.federation_members)
147-
role = "roles/logging.logWriter"
148-
member = "serviceAccount:${google_service_account.events[each.key].email}"
149-
}
150-
151-
# create keys for each service account
152-
resource "google_service_account_key" "events" {
153-
for_each = toset(local.federation_members)
154-
service_account_id = google_service_account.events[each.key].account_id
155-
}
156140

157141
# outputs: things we want to be able to see and/or save to files
158142
# e.g. credentials for deployment / event logging
@@ -174,9 +158,6 @@ output "private_keys" {
174158
}
175159

176160
output "events_archiver_keys" {
177-
value = {
178-
for name in local.federation_members :
179-
name => base64decode(google_service_account_key.events[name].private_key)
180-
}
161+
value = module.mybinder.events_archiver_keys
181162
sensitive = true
182163
}

terraform/staging/main.tf

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ locals {
1616
}
1717

1818
module "mybinder" {
19-
source = "../modules/mybinder"
20-
19+
source = "../modules/mybinder"
2120
name = "staging"
2221
gke_master_version = local.gke_version
22+
federation_members = ["turing-staging"]
2323
}
2424

2525
# define node pools here, too hard to encode with variables
@@ -53,7 +53,7 @@ resource "google_container_node_pool" "pool" {
5353

5454
lifecycle {
5555
ignore_changes = [
56-
version
56+
version
5757
]
5858
}
5959
}
@@ -73,3 +73,8 @@ output "matomo_password" {
7373
value = module.mybinder.matomo_password
7474
sensitive = true
7575
}
76+
77+
output "events_archiver_keys" {
78+
value = module.mybinder.events_archiver_keys
79+
sensitive = true
80+
}

0 commit comments

Comments
 (0)