/** * Copyright 2020 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ locals { endpoint_list = flatten([ for name, attrs in var.services : [ for endpoint in attrs.endpoints : { service : name, endpoint : endpoint } ] ]) endpoints = { for ep in local.endpoint_list : "${ep.service}/${ep.endpoint}" => ep } iam_pairs = var.service_iam_roles == null ? [] : flatten([ for name, roles in var.service_iam_roles : [for role in roles : { name = name, role = role }] ]) iam_keypairs = { for pair in local.iam_pairs : "${pair.name}-${pair.role}" => pair } iam_members = ( var.service_iam_members == null ? {} : var.service_iam_members ) } resource "google_service_directory_namespace" "default" { provider = google-beta project = var.project_id namespace_id = var.name location = var.location labels = var.labels } resource "google_service_directory_namespace_iam_binding" "default" { provider = google-beta for_each = toset(var.iam_roles) name = google_service_directory_namespace.default.name role = each.value members = lookup(var.iam_members, each.value, []) } resource "google_service_directory_service" "default" { provider = google-beta for_each = var.services namespace = google_service_directory_namespace.default.id service_id = each.key metadata = each.value.metadata } resource "google_service_directory_service_iam_binding" "default" { provider = google-beta for_each = local.iam_keypairs name = google_service_directory_service.default[each.value.name].name role = each.value.role members = lookup( lookup(local.iam_members, each.value.name, {}), each.value.role, [] ) } resource "google_service_directory_endpoint" "default" { provider = google-beta for_each = local.endpoints endpoint_id = each.value.endpoint service = google_service_directory_service.default[each.value.service].id metadata = try(var.endpoint_config[each.key].metadata, null) address = try(var.endpoint_config[each.key].address, null) port = try(var.endpoint_config[each.key].port, null) }