Files
hunfabric/fast/project-templates/data-mongodb/main.tf
Ludovico Magnocavallo 554cc47707 Mongodb Atlas project template (#2986)
* mongodb project definition

* wip

* add psc output to net-address module

* wip

* wip

* initial README, test

* remove providers file

* boilerplate

* tfdoc

* test

* fix unrelated test

* outputs, better README
2025-03-29 08:43:27 +00:00

76 lines
2.4 KiB
HCL

/**
* Copyright 2025 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 {
region = regex(
"projects/[^/]+/regions/([^/]+)/subnetworks/[^/]+$",
var.vpc_config.subnetwork_id
)[0]
}
module "addresses" {
source = "../../../modules/net-address"
project_id = var.project_id
psc_addresses = {
for i in range(50) : "${var.name}-${i}" => {
address = cidrhost(var.vpc_config.psc_cidr_block, i)
region = local.region
subnet_self_link = var.vpc_config.subnetwork_id
service_attachment = {
psc_service_attachment_link = (
mongodbatlas_privatelink_endpoint.default.service_attachment_names[i]
)
global_access = true
}
}
}
}
resource "mongodbatlas_project" "default" {
name = var.atlas_config.project_name
org_id = var.atlas_config.organization_id
}
resource "mongodbatlas_cluster" "default" {
project_id = mongodbatlas_project.default.id
name = var.atlas_config.cluster_name
provider_name = "GCP"
provider_instance_size_name = var.atlas_config.instance_size
provider_region_name = var.atlas_config.region
mongo_db_major_version = var.atlas_config.database_version
}
resource "mongodbatlas_privatelink_endpoint" "default" {
project_id = mongodbatlas_project.default.id
provider_name = "GCP"
region = var.atlas_config.region
}
resource "mongodbatlas_privatelink_endpoint_service" "default" {
project_id = mongodbatlas_privatelink_endpoint.default.project_id
private_link_id = mongodbatlas_privatelink_endpoint.default.private_link_id
provider_name = "GCP"
endpoint_service_id = var.vpc_config.network_name
gcp_project_id = var.project_id
dynamic "endpoints" {
for_each = module.addresses.psc
content {
ip_address = endpoints.value.address.address
endpoint_name = endpoints.value.forwarding_rule.name
}
}
}