Поддержка Terraform в списке карт - PullRequest
0 голосов
/ 11 ноября 2019

Чтобы создать многорегиональный кластер mongodb, мне нужно создать ресурс, который содержит некоторую статическую и динамическую конфигурацию.

Я хотел бы взять динамическую конфигурацию и вставить 2 различных значения в этот раздел.

Позвольте уточнить, пожалуйста, проверьте следующий ресурс:

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
      }
    }
  }
}

Для моих целей я хотел бы создать список карт, который будет выглядеть следующим образом:

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"
}
]

Обратите внимание, что я не хочу создавать несколько кластеров, поэтому я полагаю, что функция «count» мне не поможет, я просто хочу добавить еще один раздел region_config в указанный кластер.

ресурс должен выглядеть так:

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
    }
  }
}

Знаете, как я могу справиться с этим?

Спасибо!

1 Ответ

0 голосов
/ 12 ноября 2019

Итак, я получил ответ от форума Hashicorp: Ссылка

Я создал динамический блок region_config в разделе ресурса:

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
      }
    }
  }
}

ВФайл переменных Я определил регионы регионов:

variable "regions_config" {
  type = list(object({
    region_name     = string
    electable_nodes = number
    priority        = number
    read_only_nodes = number
  }))
}

Я могу убедиться, что он работает. (Terraform V0.12.12)

...