15
15
*/
16
16
17
17
locals {
18
- k8s_sa_gcp_derived_name = " serviceAccount:${ var . project_id } .svc.id.goog[${ var . namespace } /${ var . name } ]"
18
+ k8s_sa_gcp_derived_name = " serviceAccount:${ var . project_id } .svc.id.goog[${ var . namespace } /${ local . output_k8s_name } ]"
19
+ gcp_sa_email = google_service_account. cluster_service_account . email
19
20
20
21
# This will cause terraform to block returning outputs until the service account is created
21
- output_k8s_name = var. use_existing_k8s_sa ? var. name : kubernetes_service_account. main [0 ]. metadata [0 ]. name
22
+ k8s_given_name = var. k8s_sa_name != null ? var. k8s_sa_name : var. name
23
+ output_k8s_name = var. use_existing_k8s_sa ? local. k8s_given_name : kubernetes_service_account. main [0 ]. metadata [0 ]. name
22
24
output_k8s_namespace = var. use_existing_k8s_sa ? var. namespace : kubernetes_service_account. main [0 ]. metadata [0 ]. namespace
23
25
}
24
26
25
27
resource "google_service_account" "cluster_service_account" {
26
28
account_id = var. name
27
- display_name = substr (" GCP SA bound to K8S SA ${ local . k8s_sa_gcp_derived_name } " , 0 , 100 )
29
+ display_name = substr (" GCP SA bound to K8S SA ${ local . k8s_given_name } " , 0 , 100 )
28
30
project = var. project_id
29
31
}
30
32
@@ -40,6 +42,22 @@ resource "kubernetes_service_account" "main" {
40
42
}
41
43
}
42
44
45
+ module "annotate-sa" {
46
+ source = " terraform-google-modules/gcloud/google"
47
+ version = " ~> 0.5"
48
+
49
+ platform = " linux"
50
+ additional_components = [" kubectl" ]
51
+ enabled = var. use_existing_k8s_sa
52
+ skip_download = true
53
+
54
+ create_cmd_entrypoint = " kubectl"
55
+ create_cmd_body = " annotate sa -n ${ local . output_k8s_namespace } ${ local . k8s_given_name } iam.gke.io/gcp-service-account=${ local . gcp_sa_email } "
56
+
57
+ destroy_cmd_entrypoint = " kubectl"
58
+ destroy_cmd_body = " annotate sa -n ${ local . output_k8s_namespace } ${ local . k8s_given_name } iam.gke.io/gcp-service-account-"
59
+ }
60
+
43
61
resource "google_service_account_iam_member" "main" {
44
62
service_account_id = google_service_account. cluster_service_account . name
45
63
role = " roles/iam.workloadIdentityUser"
0 commit comments