Вертикальное масштабирование с помощью Terraform - PullRequest
0 голосов
/ 27 апреля 2018

Я использую terraform для настройки VPS кластера.

Это работает уже довольно хорошо. Я определил variable с именем instance_size, который по умолчанию установлен на 1gb. Я настраиваю несколько VPS с точно такой же конфигурацией, используя параметр count в моем определении resource:

variable "swarm_instance_size" {
    default = "1gb"
}

resource "digitalocean_droplet" "server" {
    image = "123456"
    size = "${var.instance_size}"
    count = "3"
    name = "${format("server-%02d", (count.index + 1))}"
    region = "sfc1"
}

(исключая ключи SSH и провайдеров для краткости)

Теперь у меня вопрос, как лучше масштабировать по вертикали только один из этих ресурсов.

Я могу масштабировать их все без простоев, увеличив instance_size, например, 2gb и выполнив terraform apply --parallelism 1, так что только один ресурс обновляется за один раз.

Я также могу нацелить только один из этих ресурсов, используя terraform apply -target digitalocean_droplet.server[0] -var instance_size=2gb. Проблема заключается в том, что это приводит к неожиданному отклонению конфигурации, поскольку я не объявлял об этом изменении нигде, кроме как при выполнении команды.

Является ли единственный и лучший способ объявить каждый из этих серверов как единый ресурс без параметра count? И если я хочу добавить новый сервер вместо увеличения параметра count, я просто добавлю другое определение ресурса в мою конфигурацию terraform?

1 Ответ

0 голосов
/ 27 апреля 2018

Используя карту

Например (это идет в вашем файле variables.tf):

variable "machines" {
  description = "description here"
  type = "map"
  default = {
    "server-01" = 1gb
    "server-02" = 1gb
    "server-03" = 2gb
  }
}

Тогда в вашем фактическом коде:

size = ${lookup(var.machines, format("server-%02d", (count.index + 1)))}

Затем вы можете применить план.

...