In order to create a multi region mongodb cluster I'll need to create a resource which contains some static and dynamic configuration.
I would like to take the dynamic configuration and insert 2 different values to this section.
Let me clarify, please check the following resource:
resource "mongodbatlas_cluster" "mongo_cluster" {
project_id = var.mongo_project_id
name = var.mongo_cluster_name
num_shards = var.mongo_num_shards
replication_factor = var.mongo_replication_factor
backup_enabled = var.mongo_backup_boolean
mongo_db_major_version = var.mongo_version
provider_name = var.mongo_provider_name
disk_size_gb = var.mongo_disk_size
provider_disk_iops = var.mongo_disk_iops
provider_volume_type = var.mongo_volume_type
provider_encrypt_ebs_volume = var.mongo_encryption_boolean
provider_instance_size_name = var.mongo_instance_size
cluster_type = var.mongo_cluster_type
replication_specs {
num_shards = var.mongo_replication_num_shards
regions_config {
region_name = regions_config.region
electable_nodes = regions_config.electable_nodes
priority = regions_config.priority
read_only_nodes = regions_config.read_only_nodes
}
}
}
}
For my purposes I would like to create a list of maps which will look like this:
regions_config = [
{
region_name = "eu-west-1"
electable_nodes = "2"
priority = "7"
read_only_nodes = "0"
},
{
region_name = "eu-central-1"
electable_nodes = "1"
priority = "6"
read_only_nodes = "0"
}
]
Note that I don't want to create several clusters so I guess the “count” function won't help me, I just want to add another “regions_config” section to the specified cluster.
The resource should look like this:
resource "mongodbatlas_cluster" "cluster-test" {
project_id = "<YOUR-PROJECT-ID>"
name = "cluster-test-multi-region"
disk_size_gb = 100
num_shards = 1
backup_enabled = true
cluster_type = "REPLICASET"
//Provider Settings "block"
provider_name = "AWS"
provider_disk_iops = 300
provider_volume_type = "STANDARD"
provider_instance_size_name = "M10"
replication_specs {
num_shards = 1
regions_config {
region_name = "US_EAST_1"
electable_nodes = 3
priority = 7
read_only_nodes = 0
}
regions_config {
region_name = "US_EAST_2"
electable_nodes = 2
priority = 6
read_only_nodes = 0
}
regions_config {
region_name = "US_WEST_1"
electable_nodes = 2
priority = 5
read_only_nodes = 2
}
}
}
Do you know how can I handle it?
Thanks !
So I got the answer from Hashicorp forum, Link
I've created a dynamic block of regions_config in the resource's section:
resource "mongodbatlas_cluster" "mongo_cluster" {
project_id = var.mongo_project_id
name = var.mongo_cluster_name
num_shards = var.mongo_num_shards
replication_factor = var.mongo_replication_factor
backup_enabled = var.mongo_backup_boolean
mongo_db_major_version = var.mongo_version
provider_name = var.mongo_provider_name
disk_size_gb = var.mongo_disk_size
provider_disk_iops = var.mongo_disk_iops
provider_volume_type = var.mongo_volume_type
provider_encrypt_ebs_volume = var.mongo_encryption_boolean
provider_instance_size_name = var.mongo_instance_size
cluster_type = var.mongo_cluster_type
replication_specs {
num_shards = var.mongo_replication_num_shards
dynamic "regions_config" {
for_each = var.regions_config
content {
region_name = regions_config.value.region_name
electable_nodes = regions_config.value.electable_nodes
priority = regions_config.value.priority
read_only_nodes = regions_config.value.read_only_nodes
}
}
}
}
In the variables file I defined the regions_config var as:
variable "regions_config" {
type = list(object({
region_name = string
electable_nodes = number
priority = number
read_only_nodes = number
}))
}
I can verify it's working. (Terraform V0.12.12)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.