hashicorp / terraform-provider-google

Terraform Provider for Google Cloud Platform
https://registry.terraform.io/providers/hashicorp/google/latest/docs
Mozilla Public License 2.0
2.28k stars 1.72k forks source link

project_service_identity module returns null email #18649

Open serpro69 opened 2 months ago

serpro69 commented 2 months ago

Community Note

Terraform Version & Provider Version(s)

Terraform v1.8.5 on linux_amd64

Affected Resource(s)

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/project_service_identity

Terraform Configuration

locals {
  service = {
    cloudkms = {
      project_id = var.kms_project_id,
      name       = "cloudkms.googleapis.com"
    },
    storage = {
      project_id = var.gcs_project_id,
      name       = "storage.googleapis.com"
    }
  }
}

resource "google_project_service" "main" {
  for_each = local.service

  project = each.value.project_id
  service = each.value.name

  depends_on = [
    module.project
  ]
}

data "google_project_service" "storage" {
  project    = local.service.storage.project_id
  service    = local.service.storage.name
  depends_on = [google_project_service.main]
}

data "google_project_service" "kms" {
  project    = local.service.cloudkms.project_id
  service    = local.service.cloudkms.name
  depends_on = [google_project_service.main]
}

resource "google_project_service_identity" "storage" {
  provider = google-beta

  project = data.google_project.gcs.project_id
  service = local.service.storage.name

  depends_on = [
    data.google_project_service.storage
  ]
}

resource "google_project_iam_member" "storage" {
  for_each = toset(["cloudkms.admin", "cloudkms.cryptoOperator"])

  project = data.google_project.gcs.project_id
  role    = "roles/${each.value}"
  member  = "serviceAccount:${google_project_service_identity.storage.email}"

  depends_on = [
    google_project_service.main,
    google_project_service_identity.storage
  ]
}

Debug Output

No response

Expected Behavior

email should not be null

Actual Behavior

email variable is null all other variables (id, service, and project) contain values, so it's only the email that's returning null for some reason

│ Error: Invalid template interpolation value
│
│   on tfstate/iam.tf line 7, in resource "google_project_iam_member" "storage":
│    7:   member  = "serviceAccount:${google_project_service_identity.storage.email}"
│     ├────────────────
│     │ google_project_service_identity.storage.email is null
│
│ The expression result is null. Cannot include a null value in a string template.
╵
╷
│ Error: Invalid template interpolation value
│
│   on tfstate/iam.tf line 7, in resource "google_project_iam_member" "storage":
│    7:   member  = "serviceAccount:${google_project_service_identity.storage.email}"
│     ├────────────────
│     │ google_project_service_identity.storage.email is null
│
│ The expression result is null. Cannot include a null value in a string template.

Steps to reproduce

  1. terraform apply

Important Factoids

No response

References

No response

b/351534769

noisy-murmure commented 2 months ago

We have the same problem. Especially with Big Query and Cloud Storage.

ggtisc commented 2 months ago

Confirmed issue!

After running a terraform apply it returns the next error message:

│ Error: Invalid template interpolation value
│
│   on tfstate/iam.tf line 7, in resource "google_project_iam_member" "storage":
│    7:   member  = "serviceAccount:${google_project_service_identity.storage.email}"
│     ├────────────────
│     │ google_project_service_identity.storage.email is null
│
│ The expression result is null. Cannot include a null value in a string template.
benhxy commented 3 weeks ago

Watching