Как добавить несколько серверов в LoadBalancer в Hetzner Cloud с Terraform? - PullRequest
0 голосов
/ 01 августа 2020

В настоящее время пытается получить новый Hetzner Load Balancer , работающий с несколькими серверами с использованием Terraform v0.12.28. Прилагаемая документация показывает только случай одного сервера, что довольно странно для балансировщика нагрузки:)

Серверы создаются с использованием count , например:

 resource "hcloud_server" "web" {
  count       = var.instances
  name        = "web-server-${count.index}"
...
}

, а чтобы добавить сервер в балансировщик нагрузки, следует использовать такой шаблон:

    target {
    type = "server"
    server_id = hcloud_server.web.id
  }

Однако любые типы для или for_each кажутся не такими применимо здесь для добавления всех созданных экземпляров.

Не могли бы вы показать мне, как добавить серверы, созданные с помощью подсчета, в балансировщик нагрузки?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 августа 2020

Я пытался сделать то же самое, и в итоге я изменил тип цели с сервера на метку.

Для каждого ресурса вы можете установить метку, например "env = dev" и затем на балансировщике нагрузки вы используете метку типа, а затем label_selector в соответствии с вашей меткой.

Пример:

resource "hcloud_server" "node1" {
  name = "node1"
  image = "debian-9"
  server_type = "cx11"
  labels = {"env" : "dev"}
}

resource "hcloud_load_balancer" "load_balancer" {
  name       = "my-load-balancer"
  load_balancer_type = "lb11"
  location   = var.instance_location
}

resource "hcloud_load_balancer_target" "load_balancer_target" {
  type             = "label_selector"
  load_balancer_id = hcloud_load_balancer.load_balancer.id
  label_selector   = "env=dev"
}
0 голосов
/ 01 августа 2020

Я думаю, что Dynami c блоки могут быть использованы в вашей ситуации.

Возможно, вы могли бы сделать что-то похожее на следующее (блок Dynami c - это target ; пример из документации, поэтому может потребоваться корректировка вашего реального кода):

resource "hcloud_load_balancer" "load_balancer" {

  name       = "my-load-balancer"
  load_balancer_type = "lb11"
  location   = "nbg1"


  dynamic "target" {

    for_each = hcloud_server.web

    content {
        type = "server"
        server_id = target.value["id"]
    }   

  }

}
...