1515 */
1616
1717locals {
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
1920
2021 # 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
2224 output_k8s_namespace = var. use_existing_k8s_sa ? var. namespace : kubernetes_service_account. main [0 ]. metadata [0 ]. namespace
2325}
2426
2527resource "google_service_account" "cluster_service_account" {
2628 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 )
2830 project = var. project_id
2931}
3032
@@ -40,6 +42,22 @@ resource "kubernetes_service_account" "main" {
4042 }
4143}
4244
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+
4361resource "google_service_account_iam_member" "main" {
4462 service_account_id = google_service_account. cluster_service_account . name
4563 role = " roles/iam.workloadIdentityUser"
0 commit comments